public Line2D GetNormalLine(Point2D point) { double c = EqB*point.X - EqA*point.Y; var tempLine = new Line2D(-EqB, EqA, c, Normal, point); Point2D crossPoint = Geometry.GetCrossing(this, tempLine); return new Line2D(crossPoint, point); }
public static bool GetCrossing(Segment2D segment1, Segment2D segment2, out Point2D crossingPoint) { var line1 = new Line2D(segment1.Start, segment1.Finish); var line2 = new Line2D(segment2.Start, segment2.Finish); crossingPoint = GetCrossing(line1, line2); var p = (crossingPoint.X - segment1.Finish.X) / (segment1.Start.X - segment1.Finish.X); return (0 <= p && p <= 1) && (crossingPoint.Y.Equals((p * segment1.Start.Y - (1 - p) * segment1.Finish.Y))); }
public static Point2D GetCrossing(Line2D line1, Line2D line2) { double a1 = line1.Direction.X, b1 = line1.Direction.Y, a2 = line2.Direction.X, b2 = line2.Direction.Y, c1 = line2.Begin.X - line1.Begin.X, c2 = line2.Begin.Y - line1.Begin.Y; double t1 = (b2*c1 - a2*c2)/(a1*b2 - a2*b1); return new Point2D(line1.Begin.X + a1*t1, line1.Begin.Y + b1*t1); }
public Line2D Apply(Line2D arg) { return new Line2D(Apply(arg.Begin), Apply(arg.End)); }
public Line2D Apply(Line2D arg) { return(new Line2D(Apply(arg.Begin), Apply(arg.End))); }
public static double Distance(Point2D point, Line2D line) { Point2D vector = point - line.Begin; return vector.MultiplyVector(line.Direction).Norm()/line.Direction.Norm(); }
public static bool IsParallel(Line2D line1, Line2D line2) { return AreCollinear(line1.Direction, line2.Direction); }
public static double Distance(Point2D point, Line2D line) { Point2D vector = point - line.Begin; return(vector.MultiplyVector(line.Direction).Norm() / line.Direction.Norm()); }
public static bool IsParallel(Line2D line1, Line2D line2) { return(AreCollinear(line1.Direction, line2.Direction)); }