我的问题更多的是2d计算机图形学中的数学问题,但我认为它在这里比标准的堆栈溢出更相关,如果有一个专门用于计算机图形的人,你可以在那里移动它
无论如何,我的问题是从2个不同的2d笛卡尔坐标系转移,其中坐标系被描述为不必相互垂直的矢量。
正如您在我提供的图表中所看到的,您有3个由矢量定义的局部坐标系A,B和C:Ai,Aj,Bi,Bj,Ci,Cj。 我需要找到一种方法来描述所有局部坐标系中的点p,然后找到从坐标系C到B的点的变换。
现在A非常简单,我可以将原点移回0,0并逆时针旋转90度,通过乘以这些矩阵,我得到了从标准坐标系到A的点P的变换。
我不清楚如何处理B和C,因为它们的轴不垂直。
答案 0 :(得分:2)
要在两个坐标系之间进行转换,必须计算适当的仿射变换矩阵。在第一系统中具有三个非共线点并且在第二系统中具有三个对应点就足够了。例如,我们可以使用三元组(5,6),(4,7)(2,7)表示B,三元组(4,3),(0,7),(0,1)表示C系统。 / p>
(x1 y1 1) (X1 Y1 1)
(x2 y2 1) * M = (X2 Y2 1)
(x3 y3 1) (X3 Y3 1)
M是仿射矩阵。为了找到M,我们可以通过(x1 ...)矩阵的逆来左右乘两边。 Resulting affine matrix是:
(0, -3, 0)
M = (-4, -5, 0)
(28, 48, 1)
Quick check对于Bi,Bj之间的中间点,给出(3,7,1)*M=(0,4,1)
,Ci,Cj之间的中间点,如预期的那样