Gol*_*lom 3 3d translation vector rotation plane
我有一个由法线(n)和距离(d)(从原点)定义的平面.我想把它变成一个新的系统.长路是这样的:1)将距离(d)与法线(n)相乘得到aa向量(p)2)旋转(R)并平移(v)向量(p)得到(p')3) normalize(p')得到法线4)使用另一种算法找到新平面和原点之间的最小距离(d')
我没试过这个,但我想它应该有用.问题:是不是有更快的方法来获得n'和d'?如果翻译(v)是0而不是我可以跳过4).但如果它不是0?是否有更简单的方法来获得新的d'?
你需要小心,因为法线不一定像点那样变换,距离是到原点的垂直距离,所以你必须计算d'= d + n.v.如果你所做的只是平移和旋转,那么你可以旋转法线并计算一个新的垂直距离.但是,如果你以不同的方式缩放你的轴,或进行一般的投射变换,那么你需要以不同的方式对待事物.
适用于所有内容的方法是使用齐次坐标,因此所有变换都是4x4矩阵,并且您的点和平面都是4向量:
point p=(x,y,z) -> homogeneous (x,y,z,1), equiv. to (x*W, y*W, z*W, W)
plane q=[n=(a,b,c), d] -> homogeneous [a,b,c,d], equiv. to [a*K, b*K, c*K, d*K)
-> point p is on plane q iff: p.q=0 (using homogeneous coords, as above)
Run Code Online (Sandbox Code Playgroud)
通常,您将所有变换矩阵乘以一个4x4矩阵T,并在每个点上使用该矩阵,以确定其最终变换位置.诀窍是,您需要使用T 的逆转置来转换平面坐标.从以下内容可以看出,这保留了点和平面之间的入射:
point p' = T p
plane q' = (T^-1)^t q
-> point p' is on plane q' when: p'.q'=0
then, note: p'.q' = p^t T^t (T^-1)^t q = p^t q = p.q
so: p'.q'=0 whenever p.q=0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6494 次 |
| 最近记录: |