- 积分
- 12787
- 明经币
- 个
- 注册时间
- 2015-8-18
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 你有种再说一遍 于 2025-2-22 01:42 编辑
众所周知,Z轴的旋转是从X轴开始的,并且逆时针为正.
逆时针好懂,因为是右手坐标系决定旋转为正的方向.
但是为什么是X轴呢?其实很简单,是基于自然约定.
有多自然呢?下面是一个3*3的单位矩阵是这样的:
1,0,0
0,1,0
0,0,1
可以看见这个斜三角的美.
单位矩阵延伸出三个基础旋转矩阵,
即为绕X旋转矩阵,绕Y旋转矩阵,绕Z旋转矩阵,
然后就又回到了X轴了.
那么三维任意轴旋转的话,按理说有无数根起始轴啊?
此时又是怎么确定起始轴呢?
我第一次遇到这个问题是在复现al命令的时候,
因为一根线可能是三维的,不是简单的二维ro就行,
但是为什么桌子能够每次都吻合一模一样呢?
让我们问问AI,
得到的信息是直接通过 罗德里格公式.
罗德里格公式,它本质上就是Z轴旋转矩阵的一种泛化,
它需要两个参数,
一个是转轴,一个是角度,得到一个旋转矩阵.
也就是你可以先很笨的认为,
可以从任意轴重合到Z轴,
再实现依照Z轴旋转矩阵,最后逆转回去.
不过由于太笨了...罗德里格带着它的公式走来了.
不过,在Acad上面写个啥矩阵,肯定有函数已经写了.
```
// 将世界坐标转换为视图坐标
// 这个世界有两种人,一种人会把角度改为负数,一种人会改转轴方向
public static Matrix3d WorldToEye(this AbstractViewTableRecord view) =>
Matrix3d.WorldToPlane(view.ViewDirection) *
Matrix3d.Displacement(view.Target.GetAsVector().Negate()) *
Matrix3d.Rotation(view.ViewTwist, view.ViewDirection, view.Target);
``` |
|