我想在c#中找到直线和四边形之间的交点。在下图中,点是蓝色圆圈。我在谷歌搜索但未找到任何解决方案。
我在unity3d中使用它,四边形是一个网格。因此,从网格我可以使用mesh.bounds
获取边界,在我的情况下,该行是z=c
。
由于
答案 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;
}