示例#1
0
        public static bool Intersect(Coord2D p11, Coord2D p12, Coord2D p21, Coord2D p22)
        {
            bool b1 = crossZ(p22 - p21, p11 - p21) * crossZ(p22 - p21, p12 - p21) <= 0;
            bool b2 = crossZ(p12 - p11, p21 - p11) * crossZ(p12 - p11, p22 - p11) <= 0;

            return(b1 && b2);
        }
示例#2
0
        private bool hit(Coord2D hit, Coord2D infinity)
        {
            int cnt = 0;

            for (int i = 0; i < Outline.Count; i++)
            {
                var p0 = Outline[i];
                var p1 = Outline[(i + 1) % Outline.Count];
                if (LineSegment.Intersect(hit, infinity, p0, p1))
                {
                    cnt++;
                }
            }
            return(cnt % 2 == 1);
        }
示例#3
0
 public static float Dot(Coord2D p1, Coord2D p2)
 => p1.X * p2.X + p1.Y * p2.Y;
示例#4
0
 public bool Hit(Coord2D shoot)
 {
     return
         (hit(shoot, new Coord2D(1.9999f, 2.0001f)) ||
          hit(shoot, new Coord2D(shoot.Y, -1.9999f)));
 }
示例#5
0
 private static double crossZ(Coord2D v1, Coord2D v2)
 {
     return(v1.X * v2.Y - v1.Y * v2.X);
 }