예제 #1
0
            private static Point DoesHit(PolEdge a, PolEdge b)
            {
                var adx = a.Final.X - a.Init.X;
                var ady = a.Final.Y - a.Init.Y;
                var bdx = b.Final.X - b.Init.X;
                var bdy = b.Final.Y - b.Init.Y;
                var det = bdx * ady - bdy * adx;

                if (Math.Abs(det) < .00001)
                {
                    return(null);
                }

                var s = (bdx * (b.Init.Y - a.Init.Y) - bdy * (b.Init.X - a.Init.X)) / det;

                if (s < 0 || s > 1)
                {
                    return(null);
                }

                return(new Point(a.Init.X + s * (a.Final.X - a.Init.X), a.Init.Y + s * (a.Final.Y - a.Init.Y), a.Init.Z + s * (a.Final.Z - a.Init.Z)));
            }
예제 #2
0
 public Point Intersection(PolEdge pol)
 {
     return(DoesHit(this, pol));
 }