我在3D空间中有两个点,比方说(0,0,0)和(5,5,0)
我有一个(0,0,5)的相机
鉴于此,第一个点(0,0,0)比第二个点更靠近相机。我想要做的是让第二点与摄像机点的距离有限,这样它(或实际上任何假设点)都不能远离摄像机点而不是我的控制点距离(0,0, 0)。
我可以使用什么数学设备计算空间中与摄像机相同的矢量,但不是很远的点?
我希望这是有道理的......我希望我的数学课程比基本代数高。
答案 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)
P1 = { 0, 0, 0 }
C = { 0, 0, 5 }
r = DIST(C, P1)
P2 = { 5, 5, 0 }
E=UNIT(P2-C)
P2 = C + r*E
使用这些运算符
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 };