我在同一(已知)平面上有一些点(3D)。现在我想在平面内缩放这些点而不是整个3D空间。
是否有一些快速的解决方案,例如修改后的缩放矩阵? 有人能帮助我吗?
感谢。
编辑:我更多地寻找一个想法/伪代码如何做到这一点。如果你想使用MatLab或一些方便的语言
答案 0 :(得分:1)
您的飞机可以通过三个非共线点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)
的所需2D坐标
(x, y) = (P.U, P.V)
(此转换是一种轮换,可使P0P1
与x
轴平行,并将P0P1P2
置于平面xy
中。)