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))); }
public Point Intersection(PolEdge pol) { return(DoesHit(this, pol)); }