我怎么知道点的位置,垂直于线

时间:2014-12-13 14:51:04

标签: unity3d

enter image description here

有2个A点(a,b,c),B(d,e,f)

enter image description here

有AB线,连接A和B

Line CC'垂直于AB线

我想在C'

点上点C的位置

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

如何统一计算C&C的位置?

  

A:Vector3(a,b,c)

     

B:Vector3(d,e,f)

     

AC'长度= BC'长度

     

CC'长度= 1

     

AB与CC'

垂直      

- > C Vector3(?,?,?)

1 个答案:

答案 0 :(得分:2)

正如您所描述的那样,问题尚未确定。 C有很多解决方案,因为你在3D空间工作。要想象,想象围绕轴C绕轨道运行的点AB。无论C在其轨道中的哪个位置,它始终与AB和length(CC') = 1正交。你需要进一步限制问题。

数学

首先,我们计算点C'。为此,我们将AB的向量取为AB = B - A。然后,为了到达C',我们只需从ABA的距离移动一半:

C' = A + AB/2

现在我们需要找到一个与AB正交的向量。在这里,我们遇到了我最初描述的问题。有无数的这样的载体,所以我们需要进一步约束问题。假设我们可以选择与行vAB不共线的向量C'C。现在,我们可以通过查找与C'CAB正交的向量找到v

我们知道两个线性独立向量的交叉乘积产生一个与两个向量正交的向量。所以剩下要做的就是将结果标准化,使长度为1:

C'C = normalize(AB x v)

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

C = C' + C'C

Unity代码

在这里,我提供了一些未经测试的代码,它们只是实现了上述数学。我对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));