当前位置: 首页 > news >正文

蓝田微网站建设软件工程导论

蓝田微网站建设,软件工程导论,企业名录下载,c 网站开发数据库目录 1 三维空间里的旋转与欧拉角#xff0c;四元数 1.1 欧拉角比较符合直观 1.2 四元数 1.3 下面是欧拉角和四元数的一些参考文章 2 关于旋转的这些知识点 2.1 使用euler欧拉角旋转 2.2 使用quaternion四元数,w,x,y,z 2.3 使用quaternion四元数,类 Vector3.zero 这种…目录 1 三维空间里的旋转与欧拉角四元数 1.1 欧拉角比较符合直观 1.2 四元数 1.3 下面是欧拉角和四元数的一些参考文章 2 关于旋转的这些知识点 2.1 使用euler欧拉角旋转 2.2 使用quaternion四元数,w,x,y,z 2.3 使用quaternion四元数,类 Vector3.zero 这种固定坐标了固定的旋转 2.4 利用unity编辑器在unity里通过看向一个物体而实现旋转 2.5 互转 2.5.1 使用Euler转化为quaternion四元数 2.5.2 使用quaternion四元数转化为Euler角 3 逐一测试旋转效果 3.1 直接使用Euler角Vector3(0,30,0)来旋转 3.2   直接使用quaternion四元数旋转 3.3 将quaternion四元数转化为Euler角后旋转 3.4 用欧拉角转成四元数后旋转 3.5 直接用Quaternion.AngleAxis *Quaternion.AngleAxis 实现同时绕着多轴旋转 3.6 直接用Quaternion.AngleAxis *Quaternion.AngleAxis 实现同时绕着多轴旋转 3.7 下面是完整的测试草稿代码 4 未解决的问题 4.1 不了解为啥上面有的时候可以持续旋转有时候只能旋转1次 4.2 关于下面的匀速代码 5 另外一种匀速代码 1 三维空间里的旋转与欧拉角四元数 欧拉角四元数都是用来表达三维空间里的旋转的 1.1 欧拉角比较符合直观 欧拉角与四元数-CSDN博客文章浏览阅读1.6w次点赞29次收藏127次。一、欧拉角静态的定义对于在三维空间里的一个参考系任何坐标系的取向都可以用三个欧拉角来表现。参考系又称为实验室参考系是静止不动的。而坐标系则固定于刚体随着刚体的旋转而旋转。如图所示。设定xyz-轴为参考系的参考轴。称xy-平面与XY-平面的相交为交点线用英文字母N代表。zxz顺规的欧拉角可以静态地这样定义α\alphaα 是 x-轴与交点线的夹角β\betaβ 是z-..._欧拉角和四元数的区别https://blog.csdn.net/ViatorSun/article/details/102713679 unity里的E旋转很明显表示方式就是欧拉角的3种旋转轴 1.2 四元数 我们用复数两个数字可以表示二维上的旋转那么是不是用三个数字三元数可以表示三维空间中的旋转呢数学家告诉我们不是的要表示三维空间中的旋转我们得用四元数。unity 里不只支持欧拉角也支持用 四元数表达三维空间里的旋转 四元数的基本数学方程为 : q cos (a/2) i(x * sin(a/2)) j(y * sin(a/2)) k(z * sin(a/2)) 其中a表示旋转角度(x,y,z)表示旋转轴。 四元数的定义q [w,x,y,z]其中w是实部当然也有资料会把四元数写成q [x,y,z,w]其中w是实部。这都是正确的 注意四元数q有q^2 1. 若想要某个物体(i,j,k)绕着a(x,y,z)轴旋转θ度。 这个旋转用四元数表示就是q  ((x,y,z)sinθ/2, cosθ/2) 该物体用四元数表示为p ((j,j,k),0)。 那么旋转之后的物体的点为p′ 则 通过某个公式能算出p′的值。 Quaternion.AngleAxis (30.0f, transform.right) 这个方法的意思是创建一个四元数表示饶transform.right轴旋转30度。 四元数可以用*操作符来进行多个旋转操作比如 transform.rotation Quaternion.AngleAxis (30.0f, transform.right) * Quaternion.AngleAxis (30.0f,transform.up); 也可以用 Quaternion.Euler 欧拉旋转表示四元数旋转比如 transform.rotation Quaternion.Euler (new Vector3 (0.0f, 30.0f, 20.0f)) * Quaternion.AngleAxis (30.0f, transform.forward); 如果想对一个向量做旋转做法如下 Vector3 someVector new Vector3 (1.0f,1.0f,1.0f); Vector3 newVector Quaternion.AngleAxis(90, Vector3.up) * someVector; Quaternion.LookRotation(某个向量v) 使得物体的朝向和v一致 利用四元数做差值Quaternion.Slerp旋转 transform.rotation Quaternion.Slerp (transform.rotation,Quaternion.Euler (new Vector3 (0.0f, 30.0f, 0.0f)) * Quaternion.AngleAxis (30.0f, transform.forward),Time.deltaTime * 0.33f); 1.3 下面是欧拉角和四元数的一些参考文章 https://zhuanlan.zhihu.com/p/267359507https://zhuanlan.zhihu.com/p/267359507 https://zhuanlan.zhihu.com/p/513687673https://zhuanlan.zhihu.com/p/513687673 https://www.zhihu.com/question/23005815https://www.zhihu.com/question/23005815 https://zhuanlan.zhihu.com/p/27471300https://zhuanlan.zhihu.com/p/27471300 2 关于旋转的这些知识点 2.1 使用euler欧拉角旋转 Vector3 rotate1 new Vector3(0,30,0);在unity里表示绕着Y轴旋转30度 2.2 使用quaternion四元数,w,x,y,z 其中W是实数部分xyz是虚数部分Quaternion quaternion1 new Quaternion(0,0,0,0); Quaternion.AngleAxis (30.0f, transform.right) 2.3 使用quaternion四元数,类 Vector3.zero 这种固定坐标了固定的旋转 Quaternion quaternion2 Quaternion.identity; 2.4 利用unity编辑器在unity里通过看向一个物体而实现旋转 quaternion2 Quaternion.LookRotation(new Vector3(0,0,0)); 2.5 互转 2.5.1 使用Euler转化为quaternion四元数 quaternion2 Quaternion.Euler(rotate1); 2.5.2 使用quaternion四元数转化为Euler角 rotate2 quaternion2.eulerAngles; using System.Collections; using System.Collections.Generic; using UnityEngine;public class rotateTest1 : MonoBehaviour {// Start is called before the first frame updatevoid Start(){//使用euler欧拉角旋转Vector3 rotate1 new Vector3(0,30,0);//使用quaternion四元数,xyzw?Quaternion quaternion1 new Quaternion(0,0,0,0);//使用quaternion四元数,类 Vector3.zero 这种固定坐标了固定的旋转Quaternion quaternion2 Quaternion.identity;//利用unity编辑器在unity里通过看向一个物体而实现旋转//重新给quaternion2赋值quaternion2 Quaternion.LookRotation(new Vector3(0,0,0));///互转//使用Euler转化为quaternion四元数quaternion2 Quaternion.Euler(rotate1);//使用quaternion四元数转化为Euler角//给rotate2赋值,需要先定义rotate2Vector3 rotate2 new Vector3(0,0,0);rotate2 quaternion2.eulerAngles;}// Update is called once per framevoid Update(){} }3 逐一测试旋转效果 3.1 直接使用Euler角Vector3(0,30,0)来旋转 Vector3 rotate1 new Vector3(0,30,0);     this.transform.Rotate(rotate1);   using System.Collections; using System.Collections.Generic; using UnityEngine;public class rotateTest1 : MonoBehaviour {// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){//使用euler欧拉角旋转Vector3 rotate1 new Vector3(0,30,0);this.transform.Rotate(rotate1); } }3.2   直接使用quaternion四元数旋转 w,xyz ,其中w是实数部分xyz都是*i的虚数部分比如new Quaternion(0.866f,0,0,0.5f);new Quaternion(0,0,0,0);Quaternion.identity; //quaternion1不能持续旋转这个方法this.transform.Rotate(quaternion1);    //只能用this.transform.rotation 旋转到指定位置而不能持续旋转    this.transform.rotation quaternion1; using System.Collections; using System.Collections.Generic; using UnityEngine;public class rotateTest1 : MonoBehaviour {// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){//使用euler欧拉角旋转//Vector3 rotate1 new Vector3(0,30,0);//使用quaternion四元数,w,xyz ,其中w是实数部分xyz都是*i的虚数部分Quaternion quaternion1 new Quaternion(0.866f,0,0,0.5f); //quaternion1不能持续旋转这个方法this.transform.Rotate(quaternion1); //只能用this.transform.rotation 旋转到指定位置而不能持续旋转this.transform.rotation quaternion1;} }3.3 将quaternion四元数转化为Euler角后旋转 quaternion1.eulerAngles 可以将quaternion四元数转化为Euler角rotate2 quaternion1.eulerAngles; Quaternion quaternion1 new Quaternion(0.866f,0,0,0.5f);     Vector3 rotate2 new Vector3(0,0,0);     rotate2 quaternion1.eulerAngles;     this.transform.Rotate(rotate2);   using System.Collections; using System.Collections.Generic; using UnityEngine;public class rotateTest1 : MonoBehaviour {// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){Quaternion quaternion1 new Quaternion(0.866f,0,0,0.5f); Vector3 rotate2 new Vector3(0,0,0);rotate2 quaternion1.eulerAngles;this.transform.Rotate(rotate2); } }3.4 用欧拉角转成四元数后旋转 // 创建一个表示xx度旋转欧拉角然后转换为的四元数表示绕Y轴旋转     Quaternion rotate3 Quaternion.Euler(0, 45, 0);     // 假设你有一个现有的四元数     Quaternion originalQuaternion Quaternion.identity;     // 转换为30度旋转     Quaternion newQuaternion rotate3 * originalQuaternion;     // 应用到游戏对象     this.transform.rotation newQuaternion; using System.Collections; using System.Collections.Generic; using UnityEngine;public class rotateTest1 : MonoBehaviour {// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){// 创建一个表示xx度旋转欧拉角然后转换为的四元数表示绕Y轴旋转Quaternion rotate3 Quaternion.Euler(0, 45, 0);// 假设你有一个现有的四元数Quaternion originalQuaternion Quaternion.identity;// 转换为30度旋转Quaternion newQuaternion rotate3 * originalQuaternion;// 应用到游戏对象this.transform.rotation newQuaternion;} }3.5 直接用Quaternion.AngleAxis *Quaternion.AngleAxis 实现同时绕着多轴旋转 this.transform.rotation Quaternion.AngleAxis (90.0f, transform.right)  *  Quaternion.AngleAxis (30.0f, transform.up);Quaternion.AngleAxis (90.0f, transform.right)    // 绕着right轴X轴旋转90Quaternion.AngleAxis (30.0f, transform.up)       // 绕着up轴y轴旋转30this.transform.rotation 可以实现连续旋转不知道为啥上面的只能转1次 using System.Collections; using System.Collections.Generic; using UnityEngine;public class rotateTest1 : MonoBehaviour {// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){this.transform.rotation Quaternion.AngleAxis (90.0f, transform.right)  *  Quaternion.AngleAxis (30.0f, transform.up);} }3.6 直接用Quaternion.AngleAxis *Quaternion.AngleAxis 实现同时绕着多轴旋转 但是其中一个Quaternion 用欧拉角转化而来    this.transform.rotation Quaternion.Euler (new Vector3 (0.0f, 90.0f, 0.0f))   *  Quaternion.AngleAxis (30.0f, transform.up); using System.Collections; using System.Collections.Generic; using UnityEngine;public class rotateTest1 : MonoBehaviour {// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){this.transform.rotation Quaternion.Euler (new Vector3 (0.0f, 90.0f, 0.0f)) * Quaternion.AngleAxis (30.0f, transform.up);} }3.7 下面是完整的测试草稿代码 如下 using System.Collections; using System.Collections.Generic; using UnityEngine;public class rotateTest1 : MonoBehaviour {// Start is called before the first frame updatevoid Start(){//使用euler欧拉角旋转//Vector3 rotate1 new Vector3(0,30,0);//this.transform.Rotate(rotate1); //使用quaternion四元数,xyzw?//Quaternion quaternion1 new Quaternion(0,0,0,0);//使用quaternion四元数,类 Vector3.zero 这种固定坐标了固定的旋转//Quaternion quaternion2 Quaternion.identity;//利用unity编辑器在unity里通过看向一个物体而实现旋转//重新给quaternion2赋值// quaternion2 Quaternion.LookRotation(new Vector3(0,0,0));///互转//使用Euler转化为quaternion四元数//quaternion2 Quaternion.Euler(rotate1);//使用quaternion四元数转化为Euler角//给rotate2赋值,需要先定义rotate2//Vector3 rotate2 new Vector3(0,0,0);//rotate2 quaternion2.eulerAngles;}// Update is called once per framevoid Update(){//使用euler欧拉角旋转//Vector3 rotate1 new Vector3(0,30,0);//使用quaternion四元数,w,xyz ,其中w是实数部分xyz都是*i的虚数部分//Quaternion quaternion1 new Quaternion(0.866f,0,0,0.5f); //quaternion1不能持续旋转这个方法this.transform.Rotate(quaternion1); //只能用this.transform.rotation 旋转到指定位置而不能持续旋转//this.transform.rotation quaternion1;//Quaternion quaternion1 new Quaternion(0.866f,0,0,0.5f); //Vector3 rotate2 new Vector3(0,0,0);//rotate2 quaternion1.eulerAngles;//this.transform.Rotate(rotate2); // 创建一个表示xx度旋转欧拉角然后转换为的四元数表示绕Y轴旋转//Quaternion rotate3 Quaternion.Euler(0, 45, 0);// 假设你有一个现有的四元数//Quaternion originalQuaternion Quaternion.identity;// 转换为30度旋转//Quaternion newQuaternion rotate3 * originalQuaternion;// 应用到游戏对象//this.transform.rotation newQuaternion;// 多个四元数旋转操作相乘 *然后转换为的四元数//其中四元数也可以被替换为 欧拉角this.transform.rotation Quaternion.Euler (new Vector3 (0.0f, 90.0f, 0.0f)) * Quaternion.AngleAxis (30.0f, transform.up);} }4 未解决的问题 4.1 不了解为啥上面有的时候可以持续旋转有时候只能旋转1次 4.2 关于下面的匀速代码 不理解下面的匀速代码不理解匀速代码下为啥改速度没效果改轴也没效果 5 另外一种匀速代码 using UnityEngine;public class RotateObject : MonoBehaviour {// 旋转速度度/秒public float speed 30.0f; // 旋转轴public Vector3 axis Vector3.right; void Update(){// 计算旋转量//Time.deltaTime 是上一帧的时间可以实现不同机器的匀速播放效果float angle speed * Time.deltaTime;// 绕axis轴旋转objecttransform.Rotate(axis, angle);} }
http://www.w-s-a.com/news/535167/

相关文章:

  • 浦口区网站建设售后服务建设一个网站多少钱
  • 做个小网站大概多少钱广州h5网站
  • 360免费建站视频wordpress标签显示图片
  • 创建简易个人网站国外做网站被动收入
  • 轻定制网站建设网页培训哪个机构好
  • 青岛海诚互联做网站好吗计算机软件开发培训机构
  • 德钦网站建设如何在网站上做用工登记
  • 创意品牌网站云服务
  • 个人备案网站可以做商城展示如何制作网页二维码
  • 网站建设php教程视频百度seo 站长工具
  • 外包小程序两个相同的网站对做优化有帮助
  • 网站备案主体修改wordpress 导航图片
  • 怎么建设网站数据库用vs代码做网站
  • 运营企业网站怎么赚钱动漫制作专业概念
  • 宜春网站建设推广网络推广工作好干吗
  • 网站程序0day平顶山市做网站
  • 企业网站名称怎么写哔哩哔哩网页版官网在线观看
  • 直播网站建设书籍阿里巴巴网站建设销售
  • 肇庆企业自助建站系统郴州网站建设解决方案
  • 长沙专业做网站排名游戏开发大亨内购破解版
  • 网站推广适合女生做吗网站如何开启gzip压缩
  • 做外单阿里的网站建站平台那个好
  • 全国性质的网站开发公司关于网站开发的请示
  • 齐齐哈尔住房和城乡建设局网站生物科技公司网站模板
  • 中国建设协会官方网站前端培训的机构
  • 网站建设套餐是什么北京孤儿院做义工网站
  • 网站如何做微信支付链接做暧小视频xo免费网站
  • SEO案例网站建设重庆建站模板平台
  • 上海seo网站推广公司wordpress 小米商城主题
  • 搭建服务器做网站什么网站可以请人做软件