コード例 #1
0
        private static bool LinesIntersect(IRenderVertex start1, IRenderVertex start2, IRenderVertex end1, IRenderVertex end2)
        {
            var x1 = start1.GetX();
            var y1 = start1.GetY();
            var x2 = start2.GetX();
            var y2 = start2.GetY();
            var x3 = end1.GetX();
            var y3 = end1.GetY();
            var x4 = end2.GetX();
            var y4 = end2.GetY();

            var d123 = (x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1);

            if (d123 == 0.0)               // p3 lies on the same line as p1 and p2
            {
                return(x3 >= MathF.Min(x1, x2) && x3 <= MathF.Max(x2, x1));
            }

            var d124 = (x2 - x1) * (y4 - y1) - (x4 - x1) * (y2 - y1);

            if (d124 == 0.0)               // p4 lies on the same line as p1 and p2
            {
                return(x4 >= MathF.Min(x1, x2) && x4 <= MathF.Max(x2, x1));
            }

            if (d123 * d124 >= 0.0)
            {
                return(false);
            }

            var d341 = (x3 - x1) * (y4 - y1) - (x4 - x1) * (y3 - y1);

            if (d341 == 0.0)               // p1 lies on the same line as p3 and p4
            {
                return(x1 >= MathF.Min(x3, x4) && x1 <= MathF.Max(x3, x4));
            }

            var d342 = d123 - d124 + d341;

            if (d342 == 0.0)               // p1 lies on the same line as p3 and p4
            {
                return(x2 >= MathF.Min(x3, x4) && x2 <= MathF.Max(x3, x4));
            }

            return(d341 * d342 < 0.0);
        }
コード例 #2
0
 private static float GetDot(IRenderVertex pvEnd1, IRenderVertex pvJoint, IRenderVertex pvEnd2)
 {
     return((pvJoint.GetX() - pvEnd1.GetX()) * (pvJoint.GetY() - pvEnd2.GetY()) - (pvJoint.GetY() - pvEnd1.GetY()) * (pvJoint.GetX() - pvEnd2.GetX()));
 }