using System;
namespace ComputationalGeometry.Shapes
{
public static class MathUtility
{
///
/// Tests if two line segments intersect or not.
/// The orientation of each line to other line's endpoints is used to determine
/// the intersection.
///
/// Line 1.
/// Line 2.
/// True if the lines intersect each other.
public static bool DoLinesIntersect(Line2D line1, Line2D line2)
{
return CrossProduct(line1.InitialPoint, line1.TerminalPoint, line2.InitialPoint) !=
CrossProduct(line1.InitialPoint, line1.TerminalPoint, line2.TerminalPoint) ||
CrossProduct(line2.InitialPoint, line2.TerminalPoint, line1.InitialPoint) !=
CrossProduct(line2.InitialPoint, line2.TerminalPoint, line1.TerminalPoint);
}
///
/// Finds the cross product of the 2 vectors created by the 3 vertices.
/// Vector 1 = v1 -> v2, Vector 2 = v2 -> v3
/// The vectors make a "right turn" if the sign of the cross product is negative.
/// The vectors make a "left turn" if the sign of the cross product is positive.
/// The vectors are colinear (on the same line) if the cross product is zero.
///
/// First point.
/// Second point.
/// Third point.
/// Cross product of the two vectors.
public static double CrossProduct(Point2D p1, Point2D p2, Point2D p3)
{
return (p2.X - p1.X) * (p3.Y - p1.Y) - (p3.X - p1.X) * (p2.Y - p1.Y);
}
}
}