明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 191|回复: 1

[运行时] cad.net 视图矩阵,罗德里格公式

[复制链接]
发表于 前天 18:40 | 显示全部楼层 |阅读模式
本帖最后由 你有种再说一遍 于 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);
```
回复

使用道具 举报

发表于 前天 22:16 | 显示全部楼层
虽然听不懂,但是还是想到了那个求垂足的函数,也是是坐标系转到z轴简化计算。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-22 02:14 , Processed in 0.171565 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表