什么叫旋转矩阵?如何写他的算法...(40分)

  • 主题发起人 主题发起人 why_119
  • 开始时间 开始时间
W

why_119

Unregistered / Unconfirmed
GUEST, unregistred user!
什么叫旋转矩阵?如何写他的算法...
分不GO在加
 
上课不认真听,该打屁股哈。
 
哈哈,旋转矩阵就是 Rotation Matrix,有 Formula 直接套用的,没什么难得

确实上课不认真听。。。。。
 
老大写一下呀!
 
明天考好给你写,ok
 
我等....我等.....
你考的好不好?
 
呵呵,这也能做程序员!
 
To 爱元元的哥哥
如果你会,你就写一下吧!
 
恩,考砸了。。。

我在写。
To 爱元元的哥哥,不要把问题看的太简单了,等看我的代码吧
 
基本上矩阵 (Matrix) 就是多个 Vector 的组合而形成的。
比如 Identitiy Matrix 就是以这个方式出现(3*3)
(1,0,0)
(0,1,0)
(0,0,1)
而,Rotation, 旋转,则是一个矩阵在一个角度后转换为一个新的点。
拿二维的旋转clockwise来说
它的公式是 (cosx, sinx)
(-sinx,cosx)

有个问题要问你一下,你是需要多维旋转还是只要 2 维或 3 维?
多维旋转相对复杂点,不想多浪费时间,呵呵。
 
可能是5-8维
 
几维的无所为...就是想学一下...看了很多书...不行写不出来。。。
 
// ArraySize 就是你要几维的矩阵
TYPE
PTNM = ^TNmatrix;
TNvector = ARRAY[1..TNArraySize] OF Float;
TNmatrix = ARRAY[1..TNArraySize] OF TNvector;

VAR
Mat : PTNM
{ given square symmetric matrix }

PROCEDURE RotateMatrix(Dimen : integer;
SinTheta : Float;
CosTheta : Float;
Row : integer;
Col : integer);
VAR
CosSqr, SinSqr, SinCos : Float;
MatRowRow, MatColCol, MatRowCol, MatRowIndex, MatColIndex : Float;

Index : integer;

BEGIN
CosSqr := Sqr(CosTheta)

SinSqr := Sqr(SinTheta);
SinCos := SinTheta * CosTheta;
MatRowRow := Mat^[Row, Row] * CosSqr + 2 * Mat^[Row, Col] * SinCos +
Mat^[Col, Col] * SinSqr;
MatColCol := Mat^[Row, Row] * SinSqr - 2 * Mat^[Row, Col] * SinCos +
Mat^[Col, Col] * CosSqr;
MatRowCol := (Mat^[Col, Col] - Mat^[Row, Row]) * SinCos +
Mat^[Row, Col] * (CosSqr - SinSqr);

FOR Index := 1 to Dimen DO
IF NOT(Index IN [Row, Col]) THEN
BEGIN
MatRowIndex := Mat^[Row, Index] * CosTheta +
Mat^[Col, Index] * SinTheta;
MatColIndex := -Mat^[Row, Index] * SinTheta +
Mat^[Col, Index] * CosTheta;
Mat^[Row, Index] := MatRowIndex;
Mat^[Index, Row] := MatRowIndex;
Mat^[Col, Index] := MatColIndex;
Mat^[Index, Col] := MatColIndex;
END;
Mat^[Row, Row] := MatRowRow;
Mat^[Col, Col] := MatColCol;
Mat^[Row, Col] := MatRowCol;
Mat^[Col, Row] := MatRowCol;
END;
 
不是彩票的螺旋矩阵?
 
TO:幕后黑手
有点意思...
 
后退
顶部