博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
向量绕任意轴旋转
阅读量:5929 次
发布时间:2019-06-19

本文共 1199 字,大约阅读时间需要 3 分钟。

此处旋转轴向量N必须为归一化后的向量,否则旋转后的向量将可能会出错
View Code
1 float c = (float)Math.Cos(theta); 2 float c1 =1.0f- (float)Math.Cos(theta); 3 float s = (float)Math.Sin(theta); 4 float ny2 = (float)Math.Pow(n.Y, 2); 5 float nx2 = (float)Math.Pow(n.X, 2); 6 float nz2 = (float)Math.Pow(n.Z, 2); 7 Vector3 i = imp; 8  9 10 11 Matrix m = new Matrix(12 nx2 + (1.0f - nx2) * c,13 n.X * n.Y * c1 - n.Z * s,14 n.X * n.Z * c1 + n.Y * s,15 0,16 17 n.X * n.Y * c1 + n.Z * s,18 ny2 + (1.0f - ny2) * c,19 n.Y * n.Z * c1 - n.X * s,20 0,21 22 n.X * n.Z * c1 - n.Y * s,23 n.Y * n.Z * c1 + n.X * s,24 nz2 + (1.0f - nz2) * c,25 0,26 27 0,28 0,29 0,30 131 );32 Quaternion q = new Quaternion(0, 0, 0, 1);33 Quaternion.CreateFromRotationMatrix(ref m, out q);34 Matrix m1 = Matrix.CreateTranslation(i);35 m1 = Matrix.Transform(m1, q);36 o = m1.Translation;

 

旋转矩阵也可替换为:
1 Matrix m = new Matrix( 2 n.X * n.X * (c1) + c, 3 n.X * n.Y * (c1) + n.Z * s, 4 n.X * n.Z * (c1) - n.Y * s, 0, 5 n.X * n.Y * (c1) - n.Z * s, 6 n.Y * n.Y * (c1) + c, 7 n.Y * n.Z * (c1) + n.X * s, 0, 8 n.X * n.Z * (c1) + n.Y * s, 9 n.Y * n.Z * (c1) - n.X * s,10 n.Z * n.Z * (c1) + c, 0,11 0, 0, 0, 112 );

转载于:https://www.cnblogs.com/leafing/archive/2013/01/30/2882991.html

你可能感兴趣的文章
第一次作业-准备篇
查看>>
RunLoop基础
查看>>
移动浏览器的四大内核
查看>>
ES6解构赋值
查看>>
2435: [Noi2011]道路修建
查看>>
iOS多线程运用
查看>>
【算法】网络流与二分图
查看>>
ios中Runtime的介绍以及使用
查看>>
Python字典的实现原理
查看>>
多线程爬虫实现(下)
查看>>
二:Ionic Framework支持Android开发
查看>>
[Unity] 精灵动画制作中需要注意的一些问题
查看>>
mybatis运行原理(面试回答)
查看>>
js基础知识梳理
查看>>
Hadoop入门 【1】 下载源码,构建
查看>>
SharePoint 2010 Object model 添加移除权限
查看>>
Spring Boot入门(七):使用MyBatis访问MySql数据库(xml方式)
查看>>
webhook是啥?
查看>>
JS基础知识之原型和原型链
查看>>
你真的知道onmouseenter与onmouseover的区别吗???
查看>>