Биссектриса угла, заданного тремя точками - C#

Узнай цену своей работы

Формулировка задачи:

имеем три точки A, B, C. необходимо нарисовать биссектрису угла ABC. кто подскажет решение. а то я уже зашел в тупик. попробовал вычислить уравнения прямых через точки AB(А1x+B1y+C1) и BC(A2x+B2y+C2), далее из уравнения расстояния от точки до прямой имеем систему: однако решение дает какие-то совсем левые точки. десять раз перепроверил не могу найти ошибки.
public static class GrExt
    {
        public static void DrawLine(this Graphics g, float a, float b, float c, float x1, float x2)
        {
            float y1 = (-a * x1 - c) / b; 
            float y2 = (-a * x2 - c) / b;
            g.DrawLine(Pens.Black, x1,y1,x2,y2);
        }
        public static void DrawBisector(this Graphics g, float x1, float y1, float x2, float y2, float x3, float y3, float d = 50)
        {
            DrawBisector(g, new PointF(x1, y1), new PointF(x2, y2), new PointF(x3, y3), d);
        }
        public static void DrawBisector(this Graphics g, PointF p1, PointF p2, PointF p3, float d=50)
        {
            float A1, B1, C1, A2, B2, C2;
            A1 = p2.Y - p1.Y;
            B1 = p1.X - p2.X;
            C1 = p1.Y*(p2.X-p1.X)-p1.X*(p2.Y-p1.Y);
            g.DrawLine(A1, B1, C1, p1.X, p2.X);
            A2 = p3.Y - p2.Y;
            B2 = p2.X - p3.X;
            C2 = p2.Y * (p3.X - p2.X) - p2.X * (p3.Y - p2.Y);
            g.DrawLine(A2, B2, C2, p3.X, p2.X);
            p.X = p2.X;
            p.Y = p2.Y;
            g.dr(A1,B1,C1,A2,B2,C2);
        }
 
        private static PointF p= new PointF();
        private static void dr(this Graphics g,  float a1, float b1, float c1, float a2, float b2, float c2, float d=50)
        {
            float val1 = Convert.ToSingle(d * Math.Sqrt(a1 * a1 + b1 * b1));
            float val2 = Convert.ToSingle(d * Math.Sqrt(a2 * a2 + b2 * b2));
            float valY = b2 - b1*a2/a1;
            float val = a2*c1/a1 - c2;
            float y1 = (val1 + val2 + val)/valY;
            float y2 = (val1 - val2 + val) / valY;
            float y3 = (-val1 + val2 + val) / valY;
            float y4 = (-val1 - val2 + val) / valY;
            float x1 = (val1 - b1*y1 - c1)/a1;
            float x2 = (val1 - b1 * y2 - c1) / a1;
            float x3 = (-val1 - b1 * y3 - c1) / a1;
            float x4 = (-val1 - b1 * y4 - c1) / a1;
            g.DrawLine(new Pen(Color.Red, 3), p.X, p.Y, x1, y1);
            g.DrawLine(new Pen(Color.Green, 3), p.X, p.Y, x2, y2);
            g.DrawLine(new Pen(Color.Blue, 3), p.X, p.Y, x3, y3);
            g.DrawLine(new Pen(Color.Black, 3), p.X, p.Y, x4, y4);
        }
    }

Решение задачи: «Биссектриса угла, заданного тремя точками»

textual
Листинг программы
 g.DrawLine(Pens.Black, p2, p);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5
Похожие ответы