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

网页设计和网站编辑软文范例大全500字

网页设计和网站编辑,软文范例大全500字,东莞建设网站开发,徐州专业做网站四元数如何用于 3D 旋转(代替欧拉角和旋转矩阵) 在三维空间中,物体的旋转可以用 欧拉角、旋转矩阵 或 四元数 来表示。 四元数相比于欧拉角和旋转矩阵有 计算更高效、避免万向锁、存储占用少 等优点,因此广泛用于 游戏开发、机器…

四元数如何用于 3D 旋转(代替欧拉角和旋转矩阵)

在三维空间中,物体的旋转可以用 欧拉角、旋转矩阵 或 四元数 来表示。
四元数相比于欧拉角和旋转矩阵有 计算更高效、避免万向锁、存储占用少 等优点,因此广泛用于 游戏开发、机器人学、计算机图形学和航空航天 等领域。

四元数的定义

一个四元数 q 由四个实数组成:
q = w + x i + y j + z k q=w+xi+yj+zk q=w+xi+yj+zk
其中:w,x,y,z 是实数;i,j,k 是虚单位,满足特定的乘法规则

旋转的基本表示方式

方式表示方法优缺点
欧拉角(Euler Angles)(α,β,γ) 对应绕 X, Y, Z 轴的旋转优点:直观易理解,和现实生活的旋转方式类似。缺点:存在万向锁(Gimbal Lock)问题,计算复杂。
旋转矩阵(Rotation Matrix)3×3 矩阵优点:适用于线性代数计算,方便复合旋转。缺点:需要存储 9 个值,数值误差累积会导致非正交性。
四元数(Quaternion)q=w+xi+yj+zk优点:旋转计算简单,存储更紧凑(只需要 4 个数),避免万向锁,插值平滑。缺点:不直观,不容易手动调整。

旋转四元数的定义

一个 旋转四元数q 表示围绕单位向量 (x,y,z) 旋转角度 θ 的旋转:
q = cos ⁡ θ 2 + sin ⁡ θ 2 ( x i + y j + z k ) q=\cos\frac{\theta}{2}+\sin\frac{\theta}{2}(x\mathbf{i}+y\mathbf{j}+z\mathbf{k}) q=cos2θ+sin2θ(xi+yj+zk)
或写成向量形式:
q = ( cos ⁡ θ 2 , x sin ⁡ θ 2 , y sin ⁡ θ 2 , z sin ⁡ θ 2 ) q=\left(\cos\frac{\theta}{2},x\sin\frac{\theta}{2},y\sin\frac{\theta}{2},z\sin\frac{\theta}{2}\right) q=(cos2θ,xsin2θ,ysin2θ,zsin2θ)
其中:θ 是旋转角度
(x,y,z) 是旋转轴(必须是单位向量)
(xi,yj,zk) 是四元数的虚部,表示旋转方向
注意:旋转四元数必须是单位四元数,即满足:
∣ q ∣ = w 2 + x 2 + y 2 + z 2 = 1 |q|=\sqrt{w^2+x^2+y^2+z^2}=1 q=w2+x2+y2+z2 =1

使用四元数进行 3D 旋转

假设有一个点 v = ( v x , v y , v z ) \mathbf{v}=(v_x,v_y,v_z) v=(vx,vy,vz),我们想用四元数 q 旋转它。方法如下:

  • 将点转换为纯四元数(虚部存储向量坐标)
    p = ( 0 , v x , v y , v z ) p=(0,v_x,v_y,v_z) p=(0,vx,vy,vz)
  • 计算旋转后的点
    p ′ = q p q − 1 p^{\prime}=qpq^{-1} p=qpq1
    其中: q − 1 q^{-1} q1是四元数的逆(单位四元数的逆就是它的共轭)
    旋转后的点 p ′ p^{\prime} p也是一个纯四元数,其中的虚部给出新坐标。
  • 单位四元数的逆
    q − 1 = q ∗ = ( cos ⁡ θ 2 , − x sin ⁡ θ 2 , − y sin ⁡ θ 2 , − z sin ⁡ θ 2 ) q^{-1}=q^*=(\cos\frac{\theta}{2},-x\sin\frac{\theta}{2},-y\sin\frac{\theta}{2},-z\sin\frac{\theta}{2}) q1=q=(cos2θ,xsin2θ,ysin2θ,zsin2θ)

例程(C语言)

旋转 (1, 0, 0) 向量 绕 Y 轴旋转 90°。
计算后,结果应该接近 (0, 0, -1),即 X 轴向量变成 Z 轴负方向。

#include <stdio.h>
#include <math.h>// 定义四元数结构体
typedef struct {double w, x, y, z;
} Quaternion;// 定义向量结构体
typedef struct {double x, y, z;
} Vector3;// 归一化四元数(单位四元数)
Quaternion normalize(Quaternion q) {double magnitude = sqrt(q.w * q.w + q.x * q.x + q.y * q.y + q.z * q.z);q.w /= magnitude;q.x /= magnitude;q.y /= magnitude;q.z /= magnitude;return q;
}// 计算四元数的共轭
Quaternion conjugate(Quaternion q) {Quaternion conj = {q.w, -q.x, -q.y, -q.z};return conj;
}// 计算两个四元数的乘法
Quaternion multiply(Quaternion q1, Quaternion q2) {Quaternion result;result.w = q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z;result.x = q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y;result.y = q1.w * q2.y - q1.x * q2.z + q1.y * q2.w + q1.z * q2.x;result.z = q1.w * q2.z + q1.x * q2.y - q1.y * q2.x + q1.z * q2.w;return result;
}// 旋转向量 v 使用四元数 q
Vector3 rotate_vector(Vector3 v, Quaternion q) {Quaternion p = {0, v.x, v.y, v.z}; // 将向量转换为纯四元数Quaternion q_conj = conjugate(q);  // 计算四元数共轭// 计算旋转后的四元数 p' = q * p * q^(-1)Quaternion temp = multiply(q, p);Quaternion rotated = multiply(temp, q_conj);// 结果的虚部即为旋转后的向量Vector3 result = {rotated.x, rotated.y, rotated.z};return result;
}// 生成绕 (ux, uy, uz) 轴旋转 theta 角度的四元数
Quaternion from_axis_angle(double ux, double uy, double uz, double theta) {Quaternion q;double half_theta = theta * M_PI / 360.0; // 角度转弧度并除以 2double sin_half_theta = sin(half_theta);q.w = cos(half_theta);q.x = ux * sin_half_theta;q.y = uy * sin_half_theta;q.z = uz * sin_half_theta;return normalize(q);
}int main() {// 定义一个向量 (1, 0, 0)Vector3 v = {1, 0, 0};// 绕 Y 轴旋转 90 度的四元数Quaternion q = from_axis_angle(0, 1, 0, 90);// 旋转向量Vector3 rotated_v = rotate_vector(v, q);// 输出旋转后的结果printf("旋转后向量: (%f, %f, %f)\n", rotated_v.x, rotated_v.y, rotated_v.z);return 0;
}

代码解析

  1. 定义数据结构
    Quaternion 结构体存储四元数(w, x, y, z)
    Vector3 结构体存储 3D 向量(x, y, z)
  2. 归一化四元数
    旋转四元数必须是 单位四元数,所以 normalize() 函数保证四元数的模长为 1。
  3. 计算四元数共轭
    conjugate() 计算 (对于单位四元数,逆就是共轭)。
  4. 四元数乘法
    multiply() 执行两个四元数的乘法,用于计算旋转变换。
  5. 向量旋转
    rotate_vector() 采用公式 计算旋转后的向量。
  6. 从轴-角度转换为四元数
    from_axis_angle() 计算沿任意轴旋转 theta 角度的旋转四元数。

如预期,原来的 (1, 0, 0) 经过 绕 Y 轴旋转 90° 后变成了 (0, 0, -1)

http://www.15wanjia.com/news/21636.html

相关文章:

  • 阿里云网站建设认证答案百度关键词刷搜索量
  • 商标 做网站 是几类免费网站统计
  • 个人网站备案成功后换好的推广方式
  • 郑州富士康怎么样seo资料站
  • 东莞企石网站建设5118网站如何使用免费版
  • 一流的福州网站建设关键词优化是什么意思?
  • 公司手机网站建设价格免费个人网站服务器
  • 做网站的费用是多少钱百度灰色关键词代做
  • 做网站框架需要什么软件建立网站平台
  • 做众筹网站网站推广渠道
  • 网站免费注册会员怎么做关于友情链接的作用有
  • 域名网站空间百度爱采购
  • 推广比较好的网站有哪些电商卖货平台有哪些
  • 上海贸易公司排名凌哥seo
  • 软件开发和网页设计哪个好抖音关键词优化
  • 做动态网站学php_asp+还是jsp好?郑州seo关键词
  • 国外做农产品有名的网站网站排名靠前的方法
  • 网站建设谁家好仓山区seo引擎优化软件
  • 找关键词的网站怎么做起泡胶
  • centos做网站服务器域名注册优惠
  • 技术支持 沧州辉煌网络-网站建设网址seo关键词
  • 永兴县网站建设哪个好广告类的网站
  • 在哪个网站做劳动用工备案百度竞价入口
  • 唐山万唯网络科技有限公司百度seo查询
  • 织梦网站采集侠怎么做新闻式软文
  • wordpress编程视频360seo关键词优化
  • 成都网站建设排名万网域名注册查询网
  • 在服务器上布网站怎么做的十八未成年禁用免费app
  • 网站的规划方案没干过网络推广能干吗
  • 平衡木网站建设宁波网站推广公司价格