Биссектриса угла, заданного тремя точками - 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д