我有4个点,其中三个点形成两条线,如V或a<或者一个>,你得到了这个想法,现在我得到了一个点在那个锥体(V)中,我可以从顶部到左下角,右下角,但不是底部位置的位置。 / p>
也许这会有所帮助。
我有代码可以解决这个问题:
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?
答案 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之间的角度