获得两条线之间的距离

时间:2012-06-21 21:18:50

标签: java math trigonometry lwjgl

我有4个点,其中三个点形成两条线,如V或a<或者一个>,你得到了这个想法,现在我得到了一个点在那个锥体(V)中,我可以从顶部到左下角,右下角,但不是底部位置的位置。 / p>

也许这会有所帮助。 https://dl.dropbox.com/u/28109593/examplevec.png

我有代码可以解决这个问题:

public float GetDist(Vector3f one, Vector3f two, Vector3f three, Vector3f p){


          Vector3f one_to_point = new Vector3f(0,0,0);
          Vector3f.sub(p,one,one_to_point);            //Storing vector A->P



          Vector3f one_to_two = new Vector3f(0,0,0);
          Vector3f.sub(two, one, one_to_two);            //Storing vector A->B

          Vector3f one_to_three = new Vector3f(0,0,0);
          Vector3f.sub(three, one, one_to_three);            //Storing vector A->C

          float q1 =  Vector3f.dot(one_to_point,  one_to_two) / one_to_two.lengthSquared();            // The normalized "distance" from a to b
          float q2 =  Vector3f.dot(one_to_point,  one_to_three) / one_to_three.lengthSquared();            // The normalized "distance" from a to c

现在我已经知道pos矢量在锥体中了,所以我需要做什么来获得图像中绿色圆圈pos所示的pos?

2 个答案:

答案 0 :(得分:2)

你在飞机上有4个点:A,B,C和D(其中D是你在图中标记为pos的那个)。可以在任意2个不同的点之间绘制一条独特的直线,因此找到连接A和D的直线并以形式获得其等式

    y = m_1 * x + c_1

对B +和C点进行排序

    y = m_2 * x + c_2

现在你知道了2行,你可以解决这对联立方程,得到位于图上绿圈的点(x,y) - 我将称之为E.给定E,计算长度矢量BE并除以矢量BC的长度。此值是您在问题中寻找的X的值。

如果您不知道如何查找经过2个点的线的等式,请查看此链接以获取详细信息http://www.ugrad.math.ubc.ca/coursedoc/math100/notes/zoo/eqline.html

我不怀疑有一种更简单,更优雅的方式来做到这一点,但如果你没有得到其他答案,这种方法将符合你的目的。

答案 1 :(得分:1)

我已经做了矢量代数已经有一段时间了,但是让我看看我是否做对了。你正在寻找绿点,这是从A到Pos的一条线与从B到C的线相交的地方。

我相信如果你知道BA-Pos形成的角度与BAC形成的角度的比率,那么该比率将与从B到绿色的距离与从B到C的距离的比率相同。 B,Green的方向与C的方向相同,因此表示Green位置的向量是

VectorGreen = VectorB +(x1 / x2)(VectorC - VectorB)// B的向量加上从B到C的向量的一部分

x1 = arccos(Normalize(VectorP - VectorA)* Normalize(VectorB - VectorA))// A到B和A到Pos之间的角度

x2 = arccos(Normalize(VectorB - VectorA)* Normalize(VectorC - VectorA))// A到B和A到C之间的角度