2014-12-13 78 views
-1

enter image description here如何知道点的位置,垂直于线

有2点A(A,B,C),B(d,E,F)

enter image description here

有是直线AB,连接A和B

线CC”是垂直于线AB

欲点C‘上的CC’线

的立场

如果CC'行的长度是1,C的位置是什么?

如何计算C的统一位置?

答:的Vector3(A,B,C)

B:的Vector3(d,E,F)

AC '长度= BC' 的长度

CC”长度= 1

AB垂直于CC”

- (?,?,?)>ç的Vector3

+0

你知道C点吗?在没有关于C'的一些信息的情况下确定C是不可能的,例如确切的坐标或沿着它定位的线AB的距离。你能否澄清你知道什么信息以及你想要找到什么。 – Homar 2014-12-13 18:17:08

+0

你想实现什么?请澄清。你已经知道CC'了吗?你在说2D或3D点和线吗?如果3D,相对于AB位于线CC'的哪个角度? – j00hi 2014-12-13 19:41:08

+0

谢谢您的关注 我补充问题 – user2523112 2014-12-14 00:50:01

回答

1

正如你所描述的那样,问题是不确定的。因为您正在3D空间中工作,因此有无限多的解决方案C。为了可视化,想象围绕轴线AB围绕轨道运行的点C。无论C处于其轨道中,它将始终与AB和length(CC') = 1正交。你需要进一步限制问题。

的数学

首先,我们计算点C'。为此,我们从AB,这是AB = B - A。然后,去C'我们只是从旅游点AAB一半的距离:

C' = A + AB/2

现在,我们需要找到一个向量垂直于AB。这里我们遇到了最初描述的问题。无限多的这种向量,所以我们需要进一步限制这个问题。假设我们可以选择与线ABC'C不共线的矢量v。现在我们可以找到C'C,方法是找到与ABv正交的向量。

我们知道两个线性独立向量的叉积产生一个与两个向量都正交的向量。因此,所有剩下要做的就是正常化的结果,这样的长度为1:

C'C = normalize(AB x v)

最后,我们可以通过从C'沿矢量C'C旅行找到点C

C = C' + C'C

统一码

在这里,我提供了一些未经测试的代码,简单地实现了上述数学。我对Unity并不是非常熟悉,所以很可能存在一些内置函数来缓解一些工作:

Vector3 v = new Vector3(0, 0, 1); // Choose this as you wish 
Vector3 AB = B - A; 
Vector3 C_prime = A + AB/2; 
Vector3 C = C_prime + Vector3.Normalize(Vector3.cross(AB, v)); 
+0

感谢您的回答 这正是我想要的。 – user2523112 2014-12-14 09:52:25