在c#中获取直线和四边形之间的交点

时间:2018-01-10 14:41:09

标签: c# unity3d

我想在c#中找到直线和四边形之间的交点。在下图中,点是蓝色圆圈。我在谷歌搜索但未找到任何解决方案。

我在unity3d中使用它,四边形是一个网格。因此,从网格我可以使用mesh.bounds获取边界,在我的情况下,该行是z=c

由于

Example Image

1 个答案:

答案 0 :(得分:1)

使用平面的边界点在你想知道交叉点的每一边做两条线,并检查是否与你的另一条线相交。

你有一个脚本可以用两条线做一个交叉点。 p1-p2是第一个线点,p3-p4是第二个线点:

static public Vector2 GetIntersection (Vector2 p1 , Vector2 p2, Vector2 p3, Vector2 p4)
    {   
    //Determinamos m1 como perpendicular de la recta p1-p2 pasando por p1

        float m1 = pendiente (p1, p2);
        float m2 = pendiente (p3,p4);
        float b1 = ordenada (p1, m1);
        float b2 = ordenada (p3, m2);
        Vector2 interseccion = new Vector2(0f , 0f);    

        if (m1 == m2)
        {

            interseccion = new Vector2(p2.x , p2.y);


        }
        else
        {
            float x = (b2 - b1) / (m1 - m2);
            float y = (m1 * x) + b1;

            interseccion = new Vector2(x , y);
        }

        return interseccion;
    }

static public float pendiente (Vector2 p1 , Vector2 p2)
    {

    float m = (p2.y - p1.y) / (p2.x - p1.x);
    return m;

    }

    static public float ordenada (Vector2 p1, float m)
    {
    float b = p1.y - (m * p1.x);
    return b;       
    }