Triangle.IsPointInside C# (CSharp) Méthode

IsPointInside() public méthode

public IsPointInside ( Vector2D, point ) : bool
point Vector2D,
Résultat bool
    public bool IsPointInside(Vector2D point)
    {
        Vector2D[] farFarAwayPoints = new Vector2D[]{
            point+new Vector2(99999,99998),
            point+new Vector2(-99999,89990),
        };
        LineSegment2D[] lineSegments = new LineSegment2D[]{
            new LineSegment2D(point, farFarAwayPoints[0]),
            new LineSegment2D(point, farFarAwayPoints[1]),
        };
        foreach (var ls in lineSegments) {
            int hits = 0;
            for (int i=0;i<3;i++){
                LineSegment2D l1 = new LineSegment2D(Polygon.V2(points[i]), Polygon.V2(points[(i+1)%3]));
                Vector2D res = Vector2D.zero;
                if (ls.LineIntersect(l1,out res)){
                    hits++;
                }
            }
            if (hits%2==1){
                return true;
            }
        }
        return false;
    }

Usage Example

        private static bool _HitTestTriangleFansResult(DataPair pair, LazyArray <Point3F, PointF> pointsTransformed, RectF rectInWpf, bool isFullContain, ref bool flag1, ref bool flag2)
        {
            var stopCond = false;
            var pt1      = pointsTransformed[pair.Start];

            for (int i = 2; i < pair.Count; i++)
            {
                var pt2 = pointsTransformed[i - 1 + pair.Start];
                var pt3 = pointsTransformed[i + pair.Start];

                var triangle = new Triangle(pt1, pt2, pt3);
                if (!isFullContain)
                {
                    if (rectInWpf.Contains(triangle.P1) || rectInWpf.Contains(triangle.P2) || rectInWpf.Contains(triangle.P3) ||
                        triangle.IsPointInside(rectInWpf.TopLeft) || triangle.IsPointInside(rectInWpf.TopRight) || triangle.IsPointInside(rectInWpf.BottomLeft) || triangle.IsPointInside(rectInWpf.BottomRight))
                    {
                        flag1    = true;
                        stopCond = true;
                        break;
                    }
                }
                else
                {
                    if (!triangle.IsCompletelyInside(rectInWpf))
                    {
                        flag2    = false;
                        stopCond = true;
                        break;
                    }
                }
            }
            return(stopCond);
        }
All Usage Examples Of Triangle::IsPointInside