C# System.Numerics.Quaternion 计算绕某轴的旋转
时间: 2024-12-25 10:31:28 浏览: 2
C# 中的 `System.Numerics.Quaternion` 类可以用来计算绕任意轴的旋转。这里有两个相关的内置方法:
1. **Unity 内置方法 Quaternion.AngleAxis(float angle, Vector3 axis)**[^1]:
```csharp
// 假设有一个原始的四元数q
Quaternion originalRotation = Quaternion.identity;
// 按照指定角度和轴旋转
float desiredAngle = 45f; // 例如45度
Vector3 rotationAxis = new Vector3(0, 1, 0); // x轴
Quaternion rotatedRotation = Quaternion.AngleAxis(desiredAngle, rotationAxis);
Quaternion finalRotation = originalRotation * rotatedRotation; // 组合旋转
```
这里先创建了一个初始的四元数(通常是单位四元数,代表无旋转),然后通过 `AngleAxis` 方法生成旋转后的四元数,最后通过乘法运算应用旋转。
2. **自定义方法 RotateRound(Vector3, Vector3, Vector3, float)**:
```csharp
// 向量旋转示例,假设position是要旋转的向量,center是旋转中心,axis是旋转轴
Vector3 position = new Vector3(1, 2, 3);
Vector3 center = new Vector3(0, 0, 0); // 或者是某个具体位置
Vector3 axis = new Vector3(0, 0, 1); // y轴
float angle = 90f; // 例如90度
Vector3 rotatedPosition = RotateRound(position, center, axis, angle);
```
这个方法会围绕给定的中心点`center`,沿着指定的轴`axis`旋转向量`position`。
这两个方法都可以实现绕指定轴的旋转,但第一个是直接针对四元数,第二个则是将旋转应用于向量。
阅读全文