private Point FindIntersection(Line3Points tangent, Point center) { var Np = new Line3Points(tangent.Ay, -tangent.Bx, 0); var Fp = new Line3Points(Np.Ay * Np.Bx, -(Np.Ay * center.Y + Np.Bx * center.X), 0); var x = (Pow(tangent.Bx) * center.X - tangent.Ay * (tangent.Bx * center.Y + tangent.C)) / (Pow(tangent.Ay) + Pow(tangent.Bx)); var point = GetY(tangent, (int) x); Console.WriteLine($"{Fp.Ay}a - {Fp.Bx} - {Fp.C}"); Console.WriteLine($"{point}, center: {center}"); return point; }
private Point FindIntersectionWithoutDividing(Line3Points tangent, Point center, int r) { var vector = new Vector2(tangent.Ay, -tangent.Bx); var v2 = new Vector2(center.X - 0, center.Y - tangent.C); var skal = Vector2.Dot(vector, v2); vector = Vector2.Normalize(vector) * r; if (skal > 0) { vector.X -= center.X; vector.Y -= center.Y; } else { vector.X += center.X; vector.Y += center.Y; } return new Point((int) vector.X, (int) vector.Y); }
private Point GetY(Line3Points tangent, int x) { return tangent.Bx.Equals(0) ? new Point(x, (int) (tangent.Ay * x + tangent.C)) : new Point(x, (int) -((tangent.Ay * x + tangent.C) / tangent.Bx)); }