public static sIntersectPos GetLinesIntersectBetween(sXY_int A1, sXY_int A2, sXY_int B1, sXY_int B2) { sIntersectPos pos2; if (((A1.X == A2.X) & (A1.Y == A2.Y)) | ((B1.X == B2.X) & (B1.Y == B2.Y))) { pos2.Exists = false; return pos2; } double num9 = B1.Y - A1.Y; double num8 = B1.X - A1.X; double num = A2.X - A1.X; double num2 = A2.Y - A1.Y; double num4 = B2.X - B1.X; double num5 = B2.Y - B1.Y; double num7 = (num * num5) - (num2 * num4); if (num7 == 0.0) { pos2.Exists = false; return pos2; } double num3 = ((num8 * num5) - (num9 * num4)) / num7; double num6 = ((num8 * num2) - (num9 * num)) / num7; if ((((num3 <= 0.0) | (num3 >= 1.0)) | (num6 <= 0.0)) | (num6 >= 1.0)) { pos2.Exists = false; return pos2; } pos2.Pos.X = A1.X + ((int) Math.Round((double) (num3 * num))); pos2.Pos.Y = A1.Y + ((int) Math.Round((double) (num3 * num2))); pos2.Exists = true; return pos2; }
public static void ReorderXY(sXY_int A, sXY_int B, ref sXY_int Lesser, ref sXY_int Greater) { if (A.X <= B.X) { Lesser.X = A.X; Greater.X = B.X; } else { Lesser.X = B.X; Greater.X = A.X; } if (A.Y <= B.Y) { Lesser.Y = A.Y; Greater.Y = B.Y; } else { Lesser.Y = B.Y; Greater.Y = A.Y; } }
public static sXY_int PointGetClosestPosOnLine(sXY_int LinePointA, sXY_int LinePointB, sXY_int Point) { sXY_int _int2; double num4 = Point.X - LinePointA.X; double num5 = Point.Y - LinePointA.Y; double num = LinePointB.X - LinePointA.X; double num2 = LinePointB.Y - LinePointA.Y; double num3 = (num * num) + (num2 * num2); if (num3 == 0.0) { return LinePointA; } double num6 = ((num4 * num) + (num5 * num2)) / num3; if (num6 <= 0.0) { return LinePointA; } if (num6 >= 1.0) { return LinePointB; } _int2.X = LinePointA.X + ((int) Math.Round((double) (num * num6))); _int2.Y = LinePointA.Y + ((int) Math.Round((double) (num2 * num6))); return _int2; }