根据旋转前后的向量值求旋转矩阵

根据旋转前后的向量值求旋转矩阵
根据旋转前后的向量值求旋转矩阵

根据旋转前后的向量值求旋转矩阵

如果已知旋转前后的一向量的变化,那么该如何求这个旋转矩阵呢?本篇结合Rodrigues' rotation formula,介绍一下该旋转矩阵的求法。

1.旋转角度

已知旋转前向量为P, 旋转后变为Q。由点积定义可知:

可推出P,Q之间的夹角为:

2. 旋转轴

由1中可知,旋转角所在的平面为有P和Q所构成的平面,那么旋转轴必垂直该平面。

假定旋转前向量为a(a1, a2, a3),旋转后向量为b(b1, b2, b3)。由叉乘定义得:

所以旋转轴c(c1, c2, c3)为:

3. 罗德里格旋转公式(Rodrigues' rotation formula)

3.1 公式

已知单位向量,将它旋转θ角。由罗德里格旋转公式,可知对应的旋转矩阵:

其中I是3x3的单位矩阵,

是叉乘中的反对称矩阵r:

3.2 公式证明

假设在坐标系(x, y, z)中,向量v=ax+by+cz,v绕z轴逆时针旋转θ角后得到新的向量v’。

根据2维(x,y)面上的旋转公式可得:

推出:

已知:

将上式带入v’的公式:

将cz替换掉,可得:

将上式中的叉乘表示为反对称矩阵得:

另外:

最终可以推出:

上式即为罗德里格旋转公式。

4. 求旋转矩阵

根据旋转前后的两个向量值,使用上面的方法,先求出旋转角度和旋转轴,然后用罗德里格旋转公式即可求出对应的旋转矩阵。

C#的实现代码如下:

void Calculation(double[] vectorBefore, double[] vectorAfter)

{

double[] rotationAxis;

double rotationAngle;

double[,] rotationMatrix;

rotationAxis = CrossProduct(vectorBefore, vectorAfter);

rotationAngle = Math.Acos(DotProduct(vectorBefore, vectorAfter) / Normalize(vectorBefore) / Normalize(vectorAfter));

rotationMatrix = RotationMatrix(rotationAngle, rotationAxis);

}

double[] CrossProduct(double[] a, double[] b)

{

double[] c = new double[3];

c[0] = a[1] * b[2] - a[2] * b[1];

c[1] = a[2] * b[0] - a[0] * b[2];

c[2] = a[0] * b[1] - a[1] * b[0];

return c;

}

double DotProduct(double[] a, double[] b)

{

double result;

result = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];

return result;

}

double Normalize(double[] v)

{

double result;

result = Math.Sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);

return result;

}

double[,] RotationMatrix(double angle, double[] u)

{

double norm = Normalize(u);

double[,] rotatinMatrix = new double[3,3];

u[0] = u[0] / norm;

u[1] = u[1] / norm;

u[2] = u[2] / norm;

rotatinMatrix[0, 0] = Math.Cos(angle) + u[0] * u[0] * (1 - Math.Cos(angle));

rotatinMatrix[0, 0] = u[0] * u[1] * (1 - Math.Cos(angle) - u[2] * Math.Sin(angle));

rotatinMatrix[0, 0] = u[1] * Math.Sin(angle) + u[0] * u[2] * (1 - Math.Cos(angle));

rotatinMatrix[0, 0] = u[2] * Math.Sin(angle) + u[0] * u[1] * (1 - Math.Cos(angle));

rotatinMatrix[0, 0] = Math.Cos(angle) + u[1] * u[1] * (1 - Math.Cos(angle));

rotatinMatrix[0, 0] = -u[0] * Math.Sin(angle) + u[1] * u[2] * (1 - Math.Cos(angle));

rotatinMatrix[0, 0] = -u[1] * Math.Sin(angle) + u[0] * u[2] * (1 - Math.Cos(angle));

rotatinMatrix[0, 0] = u[0] * Math.Sin(angle) + u[1] * u[2] * (1 - Math.Cos(angle));

rotatinMatrix[0, 0] = Math.Cos(angle) + u[2] * u[2] * (1 - Math.Cos(angle));

return rotatinMatrix;

}

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?【唯美句子】走累的时候,我就到升国旗哪里的一角台阶坐下,双手抚膝,再闭眼,让心灵受到阳光的洗涤。懒洋洋的幸福。

顶 3 收藏 2

?【唯美句子】一个人踮着脚尖,在窄窄的跑道白线上走,走到很远的地方又走回来。阳光很好,温暖,柔和。漫天的安静。

顶7 收藏7

?【唯美句子】清风飘然,秋水缓淌。一丝云起,一片叶落,剔透生命的空灵。轻轻用手触摸,就点碎了河面的脸。落叶舞步婀娜不肯去,是眷恋,是装点?瞬间回眸,点亮了生命精彩。

顶11 收藏9

?【唯美句子】几只从南方归来的燕子,轻盈的飞来飞去,“几处早莺争暖树,谁家新燕啄春泥,”其乐融融的山林气息,与世无争的世外桃源,让人心旷神怡。

顶0 收藏 2

?【唯美句子】流年清浅,岁月轮转,或许是冬天太过漫长,当一夜春风吹开万里柳时,心情也似乎开朗了许多,在一个风轻云淡的早晨,踏着初春的阳光,漫步在碧柳垂青的小河边,看小河的流水因为解开了冰冻而欢快的流淌,清澈见底的的河水,可以数得清河底的鹅软石,偶尔掠过水面的水鸟,让小河荡起一层层的涟漪。河岸换上绿色的新装,刚刚睡醒的各种各样的花花草草,悄悄的露出了嫩芽,这儿一丛,那儿一簇,好像是交头接耳的议论着些什么,又好象是在偷偷地说着悄悄话。

顶 3 收藏 4

?【唯美句子】喜欢海子写的面朝大海春暖花开,不仅仅是因为我喜欢看海,还喜欢诗人笔下的意境,每当夜深人静时,放一曲纯音乐,品一盏茶,在脑海中搜寻诗中的恬淡闲适。在春暖花开时,身着一身素衣,站在清风拂柳,蝶舞翩跹的百花丛中,轻吹一叶竖笛,放眼碧波万里,海鸥,沙滩,还有扬帆在落日下的古船,在心旷神怡中,做一帘红尘的幽

顶0 收藏 2

?【唯美句子】繁华如三千东流水,你只在乎闲云野鹤般的采菊东篱、身心自由,置身置灵魂于旷野,高声吟唱着属于自己的歌,悠悠然永远地成为一个真真正正的淡泊名利、鄙弃功名利禄的隐者。

顶 1 收藏 3

?【唯美句子】世俗名利和青山绿水之间,你选择了淡泊明志,持竿垂钓碧泉绿潭;权力富贵和草舍茅庐之间,你选择了宁静致远,晓梦翩跹姹紫嫣红。

顶 2 收藏 3

?【唯美句子】那是一株清香的无名花,我看到了它在春风夏雨中风姿绰约的模样,可突如其来的秋雨,无情的打落了它美丽的花瓣,看着它在空谷中独自凋零,我莫名其妙的心痛,像针椎一样的痛。秋雨,你为何如此残忍,为何不懂得怜香惜玉,我伸出颤抖的双手,将散落在泥土里的花瓣捧在手心。

顶 4 收藏 5

?【唯美句子】滴答滴答,疏疏落落的秋雨,赶着时间的脚步,哗啦啦的下起来。听着雨水轻轻地敲击着微薄的玻璃窗,不知不觉,我像是被催眠了一样,渐渐的进入了梦乡。

顶 3 收藏 5

?【唯美句子】在这极致的悲伤里,我看到了世间最美的爱,可谁又能明白,此刻的我是悲伤还是欢喜,也许只有那拨动我心弦的秋季,才知道潜藏在我心中的眼泪。

顶 4 收藏 3

?【唯美句子】看着此情此景,我细细地聆听。像是听到了落叶的呢喃,秋风的柔软,在这极短的瞬间,他们一起诉说着最美的爱恋,演绎着永恒的痴缠。当落叶安详的躺在大地,露出幸福的模样,你看,它多像一个进入梦乡的孩子。突然发现,秋风并非是想象中的刽子手,原来它只是在叶子生命的最后一刻,让它体会到爱的缠绵,飞翔的滋味。

顶 1 收藏 1

?【唯美句子】很感谢那些耐心回答我的人,公交上那个姐姐,还有那位大叔,我不知道他们是不是本地人,但我们遇到的一个交警协管,一位头发花白的大姐,她是上海本地人,很和善,并不像有些人说的上海人很排外。事实上,什么都不是绝对的。

顶 2 收藏0

?【唯美句子】我嗅到浓郁的香奈尔,却也被那种陌生呛了一鼻。也许,我却不知道,那时的感受了。那里没有那么美好,没有安全感,归属感。我想要的自由呢,不完全地体验到了。

顶 2 收藏 1

?【唯美句子】那些繁华的都市,车水马龙,灯红酒绿,流光溢彩,却充斥着一种悲哀,浮夸。我看到各种奢华,却也看到各种卑微,我看到友善亲和,也看到暴躁粗鲁,我看到

?【优美语句】踏过一片海,用博识的学问激起片片微澜;采过一丛花,正在聪慧的碰碰外送来缕缕清喷鼻;无过一个梦,决定从那里启程。

顶0 收藏0

?【优美语句】人生如一本书,应该多一些精彩的细节,少一些乏味的字眼;人生如一支歌,应该多一些昂扬的旋律,少一些忧伤的音符;人生如一幅画,应该多一些亮丽的色彩,少一些灰暗的色调。

顶0 收藏0

?【优美语句】母爱是一滴甘露,亲吻干涸的泥土,它用细雨的温情,用钻石的坚毅,期待着闪着碎光的泥土的肥沃;母爱不是人生中的一个凝固点,而是一条流动的河,这条河造就了我们生命中美丽的情感之景。

顶0 收藏0

?【优美语句】生活如海,宽容作舟,泛舟于海,方知海之宽阔;生活如山,宽容为径,循径登山,方知山之高大;生活如歌,宽容是曲,和曲而歌,方知歌之动听。

顶0 收藏0

?【优美语句】母爱就是一幅山水画,洗去铅华雕饰,留下清新自然;母爱就象一首深情的歌,婉转悠扬,轻吟浅唱;母爱就是一阵和煦的风,吹去朔雪纷飞,带来春光无限。

顶0 收藏0

?【优美语句】努力奋斗,天空依旧美丽,梦想仍然纯真,放飞自我,勇敢地飞翔于梦想的天空,相信自己一定做得更好。

顶0 收藏0

?【优美语句】品味生活,完善人性。存在就是机会,思考才能提高。人需要不断打碎自己,更应该重新组装自己。

顶0 收藏0

?【优美语句】母爱是一缕阳光,让你的心灵即使在寒冷的冬天也能感到温暖如春;母爱是一泓清泉,让你的情感即使蒙上岁月的风尘依然纯洁明净。

顶0 收藏0

?【优美语句】母爱是温暖心灵的太阳;母爱是滋润心灵的雨露;母爱是灌溉心灵的沃土;母爱是美化心灵的彩虹。

顶0 收藏0

?【优美语句】一轮金色的光圈印在海面,夕阳将最后的辉煌撒向了大海,海平面波光潋滟,金光闪闪,夕阳下的海水让最后一丝蓝也带着感动。温和的海水轻轻地拍打着我的脚踝,我张开双臂拥抱最温馨的时刻……我爱大海宽广的胸怀,无论多大的风浪,她都可以揽入怀中;无论多少风雨,都无法将她击垮;无论多少河流,她都可以容纳;我愿做一只填海的燕,填平她的波涛翻滚,填平她的汹涌愤怒,只留下平静、柔和的海面。

相关主题
相关文档
最新文档