コード例 #1
0
ファイル: modMath.cs プロジェクト: Zabanya/SharpFlame
 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;
 }
コード例 #2
0
ファイル: modMath.cs プロジェクト: Zabanya/SharpFlame
 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;
     }
 }
コード例 #3
0
ファイル: modMath.cs プロジェクト: Zabanya/SharpFlame
 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;
 }