在平面中缩放 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 中的旋转。)