2

我有 4 个点,其中三个点组成两条线,如 V 或 < 或 >,你明白了,现在我在那个圆锥(V)中得到一个点,我可以得到从顶部到的距离左下角和右下角,但不是底部 pos 所在的位置。

也许这会有所帮助。 https://dl.dropbox.com/u/28109593/e​​xamplevec.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?

4

2 回答 2

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

我不怀疑有一种更简单更优雅的方法可以做到这一点,但如果你在这里没有得到其他答案,这种方法将达到你的目的。

于 2012-06-21T21:55:12.927 回答
1

自从我完成向量代数以来已经有一段时间了,但让我看看我是否做对了。您正在寻找绿点,即从 A 到 Pos 的线与从 B 到 C 的线相交的地方。

我相信如果你知道 BA-Pos 形成的角度与 BAC 形成的角度的比值,那么这个比值将与从 B 到 Green 的距离与从 B 到 C 的距离的比值相同。 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 之间的角度

于 2012-06-21T22:17:04.327 回答