Пример #1
0
        public static bool IsPointOnRay(HPoint p, HRay ray)
        {
            if (!HAccuracy.DoubleEqual(0, ((p - ray.Source) * (ray.Direction)).Length())) //is not on line(colinear)
            {
                return(false);
            }

            return(HAccuracy.DoubleGreater((p - ray.Source) % (ray.Direction), 0)); //is codirectional
        }
Пример #2
0
        public HPoint CollisionPoint(HRay ray)
        {
            HPoint intersectionPoint = HGeometry.OldIntersectPlaneLine(A, B, C, ray.Source, ray.Source + ray.Direction);

            if (intersectionPoint == null) //no intersection point with plane
            {
                return(null);
            }
            if (!HGeometry.IsPointOnRay(intersectionPoint, ray)) //point is invisible
            {
                return(null);
            }

            double firstSquare  = HGeometry.TriangleSquare(A, B, C);
            double secondSquare = HGeometry.TriangleSquare(A, B, intersectionPoint) +
                                  HGeometry.TriangleSquare(A, C, intersectionPoint) +
                                  HGeometry.TriangleSquare(C, B, intersectionPoint);

            return(HAccuracy.DoubleEqual(firstSquare, secondSquare) ? intersectionPoint : null);
        }