在不计算垂直向量的情况下获取2d三角形中的点的距离?

时间:2012-06-23 23:16:32

标签: java math trigonometry

好吧,所以我试图在不计算垂直向量的情况下得到一个二维三角形中一个点的距离。

float qd = Vector2f.dot(new Vector2f(pos.x, pos.z),
                        new Vector2f(normal.pos.x, normal.pos.z)) -
           Vector2f.dot(new Vector2f(q.center.x, q.center.z),
                        new Vector2f(normal.pos.x, normal.pos.z));

这就是我正在使用的代码。 (注意:它将3f向量转换为2d向量,但您不必担心这一点)。我需要计算结果在0到1之间。 0.5或者什么。

如果我仍然没有正确解释也许这会有所帮助? Axis Example

我的问题是:如何在不计算垂直向量距离的情况下获得2d三角形中某点的距离? I.E.如果三角形朝上(y = -1)而没有任何倾斜 我需要三角形中没有任何X的距离。

Edit1:关于你在说什么,Banthar,这就是我从中得到的,它不起作用,但它似乎接近于工作。

float d = (float) Math.sqrt( 0 /*cause the two x's should be the same */ + Math.pow(pos.z - q.max.z, 2));   
float h = (float) Math.sqrt( 0 /*cause the two x's should be the same */ + Math.pow(q.min.z - q.max.z, 2)); 

float myDist = d/h;

1 个答案:

答案 0 :(得分:2)

假设你的三角形是ABC,点是P. 您要查找的数字是从P到AB的距离除以从C到AB的距离。 这与相应区域的比率相同。所以你可以计算这两个方面:

Area(ABP) / Area(ABC)

计算三角形区域的最佳方法取决于您对三角形的信息。

如果只有顶点,则可以使用:

Area(ABP) / Area(ABC) = ( Ax*By - Ax*Py + Ay*Px - Ay*Bx + Bx*Py - By*Px ) /
                        ( Ax*By - Ax*Cy + Ay*Cx - Ay*Bx + Bx*Cy - By*Cx )