3D三角函数:沿着球体表面在空间中找到一个点

时间:2011-12-07 18:50:37

标签: math 3d coordinates trigonometry

我在3D空间中有两个点,比方说(0,0,0)和(5,5,0)

我有一个(0,0,5)的相机

鉴于此,第一个点(0,0,0)比第二个点更靠近相机。我想要做的是让第二点与摄像机点的距离有限,这样它(或实际上任何假设点)都不能远离摄像机点而不是我的控制点距离(0,0, 0)。

我可以使用什么数学设备计算空间中与摄像机相同的矢量,但不是很远的点?

我希望这是有道理的......我希望我的数学课程比基本代数高。

4 个答案:

答案 0 :(得分:5)

如果我理解正确的话。你有点让P1(x1,y1,z1)和距离 D 和另一个点P2(x2,y2,z2)你想要另一个点P3,使它与P2的方向相同但距P1只有 D 距离。如果是这样的话。

方向 V1 从P1到P2 (P2 - P1)即(x2 - x1,y2 - y1,z2 - z1)

来自 V1 的单位矢量会 U1

U1 = V1 / distance between ( P1 , P2)

Formula for distance between two points

最后P3沿着这个单位矢量 D 的距离

P3 = P1 +  U1 * D

答案 1 :(得分:1)

首先,从摄影机(0,0,5)中取出矢量,让我们称之为C,然后调用它(5,5,0),让它称之为P

V = P - C

然后将此向量的长度调整为目标长度(在本例中为5),我们称之为L

V' = V * (L / |V|)

然后再将其添加到C,以获得最终结果P'

P' = C + V'

答案 2 :(得分:1)

您可以使用其他参数来修改矢量的长度。如果原始点为(5, 5, 0),那么您可以使用(5t, 5t, 0t)并找到值t,这将导致向量的长度正确。修改后的矢量与原始矢量的方向相同,只是更短。

使用length = sqrt(x^2, y^2, z^2)计算向量的长度。

答案 3 :(得分:1)

这是你想要的吗?大写字母变量是3D矢量,小写字母是标量。

  1. 起点P1 = { 0, 0, 0 }
  2. 相机点C = { 0, 0, 5 }
  3. 距离r = DIST(C, P1)
  4. 第二点P2 = { 5, 5, 0 }
  5. 方向向量E=UNIT(P2-C)
  6. 第二点P2 = C + r*E
  7. 使用这些运算符

    DOT(P,Q) = P[0]*Q[0]+P[1]*Q[1]+P[2]*Q[2];
    UNIT(P) = P/sqrt(DOT(P,P);
    DIST(P,Q) = sqrt(DOT(P-Q,P-Q));
    t*P =  { t*P[0], t*P[1], t*P[2] };
    P/d =  { P[0]/d, P[1]/d, P[2]/d };