我们首先来个题目,假设有一个点(point1),我们想让这个点按照某个点(center)旋转轴是世界z轴来旋转一个度数如何做呢,这样如果把度数改成0-360渐变,那么就和一个表盘的秒针一样旋转了。

如何实现呢 ?

首先看下这个系统函数
public static Quaternion AngleAxis (float angle , Vector3 axis );
获得四元数,参数1是角度,axis是旋转轴。

那么角度先给90度我们来测试下,axis当然是按照Z轴正方向来旋转 。

     //首先计算按照四元数Z轴顺时针旋转Quaternion q = Quaternion.AngleAxis(-90f, Vector3.forward);//计算点到圆心向量Vector3 dir = (point1.transform.position - center.transform.position).normalized;//显示这条线Debug.DrawLine(center.transform.position, dir * 10f,Color.red);//计算距离float dis = Vector3.Distance(point1.transform.position, center.transform.position);//把向量经过四元数旋转Vector3 todir = q * dir;//计算经过90°旋转后到达的位置Vector3 at = center.transform.position + todir * dis;point2.transform.position = at;//显示这条线Debug.DrawLine(center.transform.position, at, Color.black);


红色球是圆心,白色球是开始的位置,黑色球是运行后的位置。

这就是AngleAxis的用法,他核心就是按照某个轴做旋转。

我们把度数再做成一个按时间的变量,再增加小时和分钟就可以实现一个表盘的效果。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TestCenter : MonoBehaviour
{public Transform point1;    //需要移动的点public Transform center;    //圆心public Transform point2;    //移动后的位置float angle = 0f;float spd = 0.1f;private void Update(){angle -= spd;//首先计算按照四元数Z轴顺时针旋转Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward);//计算点到圆心向量Vector3 dir = (point1.transform.position - center.transform.position).normalized;//显示这条线Debug.DrawLine(center.transform.position, dir * 10f,Color.red);//计算距离float dis = Vector3.Distance(point1.transform.position, center.transform.position);//把向量经过四元数旋转Vector3 todir = q * dir;//计算经过90°旋转后到达的位置Vector3 at = center.transform.position + todir * dis;point2.transform.position = at;//显示这条线Debug.DrawLine(center.transform.position, at, Color.black);}
}


大概效果如上图。

四元数学习:Quaternion.AngleAxis相关推荐

  1. 四元数学习笔记(一):初识四元数

    1 四元数的定义 1.1 为什么要使用四元数 旋转向量用 9 个量来描述 3 个自由度的旋转,具有冗余性:欧拉角和旋转向量是紧凑的,但是具有奇异性.事实上,我们找不到不带奇异性的向量描述方式. 回忆之 ...

  2. 【Unity技巧】四元数(Quaternion)和旋转

    四元数介绍 旋转,应该是三种坐标变换--缩放.旋转和平移,中最复杂的一种了.大家应该都听过,有一种旋转的表示方法叫四元数.按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法--矩阵旋转和欧拉旋转. ...

  3. 四元数(Quaternion)食用指南

    四元数(Quaternion)食用指南 "这简直就是黑魔法!" 开发时,每次遇到旋转问题时总会心头一震,在欧拉角和四元数这两种处理方式的选择上犹豫不决,不知不觉就陷入了四元数的淤泥 ...

  4. Unity基础篇:四元数(Quaternion)和欧拉角(Eulerangle)讨论

    四元数(Quaternion)和欧拉角(Eulerangle)这两个老朋友我们在游戏开发的时候会非常,非常频繁的使用他们.然而有时候我会混淆他们的定义以及用法,所以今天写一篇博客,来总结一下,夯实基础 ...

  5. 四旋翼与四元数学习笔记

    为了实现四旋翼无人机的编队控制,重点学习了四旋翼加速度转换为姿态角和推力指令的具体手段,详细学习了四元数.旋转矩阵.欧拉角在四旋翼上的应用,学习了四旋翼的几何控制法.姿态角控制器设计,学习了mavro ...

  6. 四元数(quaternion)

    四元数是对实数或者说复数的一个扩展.类似于复数是在实数的基础上添加了一个虚部,四元数在复数的基础上再添加了两个虚部. 一般形式的四元数,其实是一个四维的元组(a,bi,cj,dk)(a,bi,cj,d ...

  7. 单位四元数(unit quaternion)

    在机器人学中,表示旋转变换的有旋转矩阵.欧拉角.角/度轴和单位四元数. ##1.四元数的表示 四元数是由复数扩展而来: a+bi⟹ω+xi+yj+zka + bi \Longrightarrow \o ...

  8. 四元数(Quaternion)和欧拉角(Eulerangle)

    欧拉旋转.四元数.矩阵旋转之间的差异 除了欧拉旋转以外,还有两种表示旋转的方式:矩阵旋转和四元数旋转.接下来我们比较它们的优缺点. 欧拉角 优点:三个角度组成,直观,容易理解. 优点:可以进行从一个方 ...

  9. 3D数学之四元数 学习笔记

    四元数有三个虚部,一个实部 [ w (x y z) ] = w + xi + yj + zk i² = j² = k² = ijk = -1 用于表示,物体在空间中的任意角度旋转 四元数的模 = Sq ...

最新文章

  1. 如何通过一行代码下载B站视频?
  2. Win10 新版又悲剧了!老外神评论
  3. CAS SSO 单点登录 实例
  4. 华为交换机ACL配置
  5. 惨绝人寰的日期函数,用的方便
  6. TCP中的RTT和RTO
  7. 14:IO之字符字节流
  8. POJ 1966 Cable TV Network (最大流最小割)
  9. uniapp滑动切换tab标签_Web前端,Tab切换,缓存,页面处理的几种方式
  10. sklearn相关积累
  11. 用CSS制作可交换带事件处理的图片按钮
  12. C#之Application.DoEvents()
  13. 代码规范化的七大原则
  14. mysql更新数据的语句怎么写_mysql更新数据库语句怎么写?mysql更新字段语句
  15. AvalonDock使用(1)-基本用法
  16. key位置 win10生成的ssh_Win10系统中生成SSH密钥的方法
  17. POWERSHELL脚本编写利器:PowerGUI Visual Studio Extension
  18. python英语单词 扇贝英语安卓下载_扇贝单词英语版app最新版
  19. 在图片上加滚动文字html,如何让文字在图片上滚动
  20. 三张简图搞懂GBDT

热门文章

  1. 【Cocos游戏】正版《变形金刚:崛起》跻身千万级手游阵营
  2. 【Discuz】去除注册时的邮箱
  3. 微信上墙,微信大屏幕互动,微信签到抽奖
  4. 内核架构师必备技能:编写自己的kconfig框架plus
  5. vue 中 Element-UI 表单验证的几种方法
  6. 手把手告诉你如何安装多个版本的node,妈妈再也不用担心版本高低引发的一系列后遗症(非常详细,非常实用)
  7. 在css的框中打文字,css 边框上如何写入文字?
  8. 第三方投票自动化刷投票脚本代码
  9. js如何实现扫描身份证识别_百度AI身份证识别demo,使用js提交图片数据
  10. 2021-01-12某证券公司后台开发岗位面试记录(二面)