在平面中缩放 3D 点
Scale 3D-Points in Plane
我有一些点(3D)都在同一个(已知)平面上。现在我想在平面内缩放这些点而不是整个 3D space.
是否有一些快速解决方案,例如修改后的缩放矩阵?
有人可以帮助我吗?
谢谢。
编辑:我更想寻找 idea/pseudocode 如何做到这一点。如果你想使用 MatLab 或一些方便的语言
你的平面可以通过三个非共线点P0, P1, P2
,或者它的隐式方程,
A.x + B.y + C.z + D = 0
在第一种情况下,考虑向量 P0P1
并将其归一化 (U = P0P1/|P0P1|
)。然后计算与第一个向量正交的第二个向量,V = P0P2 - (P0P2.U).U
并将其归一化。
在第二种情况下,你可以取轴的三个交点,(-D/A, 0, 0), (0, -D/B, 0), (0, 0, -D/C)
,你又回到了第一种情况(但要注意退化的情况)。
使用这两个向量通过点积
计算任意点的所需二维坐标P = (X, Y, Z)
(x, y) = (P.U, P.V)
(此变换是使 P0P1
平行于 x
轴并使 P0P1P2
在平面 xy
中的旋转。)
我有一些点(3D)都在同一个(已知)平面上。现在我想在平面内缩放这些点而不是整个 3D space.
是否有一些快速解决方案,例如修改后的缩放矩阵? 有人可以帮助我吗?
谢谢。
编辑:我更想寻找 idea/pseudocode 如何做到这一点。如果你想使用 MatLab 或一些方便的语言
你的平面可以通过三个非共线点P0, P1, P2
,或者它的隐式方程,
A.x + B.y + C.z + D = 0
在第一种情况下,考虑向量 P0P1
并将其归一化 (U = P0P1/|P0P1|
)。然后计算与第一个向量正交的第二个向量,V = P0P2 - (P0P2.U).U
并将其归一化。
在第二种情况下,你可以取轴的三个交点,(-D/A, 0, 0), (0, -D/B, 0), (0, 0, -D/C)
,你又回到了第一种情况(但要注意退化的情况)。
使用这两个向量通过点积
计算任意点的所需二维坐标P = (X, Y, Z)
(x, y) = (P.U, P.V)
(此变换是使 P0P1
平行于 x
轴并使 P0P1P2
在平面 xy
中的旋转。)