有这样的一个问题.一个四维坐标(x,y,z,1)是隐含的,也就是说你不可以直接获得它的值,但是可以结合其他矩阵使用,以得到一个组合后的矩阵,当然了,这个组合后的矩阵得值也是不可知的.在这里你仅仅知道的是你所想要得结果形式,也就是说:假设当前有一个点为(x,y,z,1)(你并不知道他的值是多少,只有计算机知道,但是有一点就是,你也不必知道其计算结果,你只是想改变其状态)
如果像将改坐标绕着Y轴作旋转,那么你只需知道这样一个矩阵与它相乘就行了
{cosA ,0,-sinA,0
0 ,1, 0 ,0
sinA,0,cosA ,0
0 ,0 , 0, 1
}
也就是说起计算模式如下:
(x,y,z,1)*| cosA , 0, -sinA, 0 |
| 0 , 1, 0 , 0 |=想要的状态(x',y',z',1)
| sinA, 0, cosA , 0 |
| 0 , 0 , 0 , 1 |在这里面,我们并不关心(x,y,z,1),我们只要知道该旋转矩阵就行了.
现在我的问题如下:
(x,y,z,1)*矩阵X=我想要点的转换状态(x',y',z',1)其中我想要点的“转换状态“如下:
x'=(x*cosA)/(x*sinA+z*cosA)
y'=y/Z
z'=(z*sinA)/(x*sinA+z*cosA)我不知道怎么倒推出那个“矩阵X“啊,大家看看能不能推出来。
如果像将改坐标绕着Y轴作旋转,那么你只需知道这样一个矩阵与它相乘就行了
{cosA ,0,-sinA,0
0 ,1, 0 ,0
sinA,0,cosA ,0
0 ,0 , 0, 1
}
也就是说起计算模式如下:
(x,y,z,1)*| cosA , 0, -sinA, 0 |
| 0 , 1, 0 , 0 |=想要的状态(x',y',z',1)
| sinA, 0, cosA , 0 |
| 0 , 0 , 0 , 1 |在这里面,我们并不关心(x,y,z,1),我们只要知道该旋转矩阵就行了.
现在我的问题如下:
(x,y,z,1)*矩阵X=我想要点的转换状态(x',y',z',1)其中我想要点的“转换状态“如下:
x'=(x*cosA)/(x*sinA+z*cosA)
y'=y/Z
z'=(z*sinA)/(x*sinA+z*cosA)我不知道怎么倒推出那个“矩阵X“啊,大家看看能不能推出来。
B=(x',y',z',1)
设变换矩阵为X
将A扩展成方阵记为Aex
将B扩展成方阵记为Bex
则Aex*X=Bex
对Aex求逆极为Aexr
左右两边左乘Aexr
Aex*X=Bex
=>Aexr*Aex*X=Aexr*Bex
=>E*X=Aexr*Bex
=>X=Aexr*Bex
看!变换矩阵出来了!
1: x'=(x*cosA)/(x*sinA+z*cosA)
y'=y/Z
z'=(z*sinA)/(x*sinA+z*cosA)
的扩展矩阵是什么呢?我没扩展开来啊?能不能帮帮忙啊?
2:(x,y,z,1)是可用的但是不可得到的,也就是说这个原始的值是隐含的,现在只提供给你一个函数接口,比如void Xroat(float *变换矩阵存储数组),在这里你只能写*变换矩阵存储数组,那么结果你也不可得到,但是可以预测到,这跟你的矩阵有关系。比如说你想让(x,y,z,1)这样的点进行绕着y周旋转那么该矩阵,你只要写成:
//------------------------------
{cosA ,0,-sinA,0
0 ,1, 0 ,0
sinA,0,cosA ,0
0 ,0 , 0, 1
}
//------------------------------
存储到数组中,调用那个函数就行了,其他信息的一概不知。基于以上的两点,不知道
x'=(x*cosA)/(x*sinA+z*cosA)
y'=y/Z
z'=(z*sinA)/(x*sinA+z*cosA)
是由什么矩阵计算得来呢?有一个前提就是,这个矩阵肯定不含有未知数x,y,z,仅仅是一些数值。sboom(+-LingCh-+)(爱美人不爱VC)帮帮忙了,我真的傻了!!
假设x != 0 A != Pi /2 || 3 * Pi / 2x' = 1 / ( tan(A) + z / x )你认为这是个线性函数吗????不是线性变换的话,就不存在这个矩阵,也就是无解!否则矩阵就不会在线性代数里面讲了!^_^