gaics 发表于 2023-7-20 08:27:27

浅谈trans函数的理解

本帖最后由 gaics 于 2023-7-20 10:51 编辑

以下为我个人对trans函数浅薄的理解,如有错误请见谅!

假设世界坐标系上有一点P,坐标为(1.0 2.0 0.0),求其在以A点(3.0 3.0 0.0)为原点、向量AB为X轴的坐标系中的坐标值(B点坐标(6.0 3.0 0.0))。

通过图1不难看出,P点在新坐标系中的坐标值应为(-2.0 -1.0 0.0),
但利用trans函数求值:(trans (mapcar '- P A) 0 (mapcar '- B A)),得到的却是(-1.0 0.0 -2.0),明显与预期不符。
再分析两组数据,trans命令得到的结果是(y z x)格式。

也就是说此时的坐标系如图2所示,以A为原点,向量AB方向为Z轴。
显然这不是我们想要的坐标系。
再次运用trans函数,(trans(trans (mapcar '- P A) 0 (mapcar '- B A))'(1 0 0)'(0 0 1)),得到坐标(-2.0 -1.0 0.0)!
这一步中,trans函数的“from”为'(1 0 0),“to”为'(0 0 1),也可以简单理解为参数中的“1”代表了Z轴的位置,即(1 0 0)代表Z轴位于X方向。
因此通过这一步,将Z轴转换到他本该在位置。

************************************************
大家都知道trans函数格式为(trans pt from to ),总结一下两个重要参数的意义:
1、pt
“pt”不仅仅是一个坐标点,其中还包含了“新坐标系”的原点信息。
如上例(trans (mapcar '- P A) 0 (mapcar '- B A)中的(mapcar '- P A) 表示新坐标系以A点为原点;
如果写作(trans P 0 (mapcar '- B A),则表示新坐标系的原点与原坐标系相同。


2、to
“to”可以是一个向量,他代表了“新坐标系”Z轴的方向。
如上例中的(mapcar '- B A)表示一个由A到B的向量,定义了Z轴的方向。该参数也仅仅表达了一个“方向”。
而且我个人认为其中A、B的值也不是固定的,只要能够表达你想要的“方向”即可( 前提:坐标系原点已另有定义)。

比如A、B可以分别是:
A=(3.0 3.0 0.0)B=(8.0 3.0 0.0),
或者A=(3.0 4.0 0.0)B=(8.0 4.0 0.0),
或者A=(3.0 4.0 5.0)B=(8.0 4.0 5.0),
或者......
只要他能够反映出一种方向的趋势。

以上是我个人的一些理解,如有不妥请大家指正,谢谢!

有区别吗 发表于 2023-7-28 17:44:44

本帖最后由 有区别吗 于 2023-7-28 23:13 编辑

按你的数据测试了下,以'(3 3 0)为原点建立UCS,
输入(trans '(1 2 0) 0 1)
确实是返回(-2.0 -1.0 0.0)没问题啊.
(trans pt from to ),
高飞鸟的帖里说的很清楚了,后二个参数不使用位值而使用点表的话,
当作向量,返回值与两个向量的点乘运算相关.
你随便写两组向量测试下就知道了,
你写这些我反正是完全闹不明白在说些什么.
trans就是个只考虑了变换矩阵的特征值为1的函数

vormittag 发表于 2023-7-26 14:15:07

liuhe 发表于 2023-7-26 13:57
Leemac有了成熟坐标系函数,核心就是trans和矩阵,两者离不开的,只是 我没有仔细研究原理,只会用

只用 trans 是不可能的,像错切、不等比缩放用 trans 是实现不了的。在构造转换矩阵的某些要素时,用 trans 更方便的情况下当然用 trans 而不需要自己去写计算式,但这不表示说离开了 trans 就做不出来。

vormittag 发表于 2023-8-7 11:11:42

mituzhe 发表于 2023-8-6 11:51
有一点不明白,to所代表的向量确定了z轴方向,那么xy轴根据右手定则应该有无数种情况,是怎么确定具体在哪 ...

若 WCS z 轴与OCS z' 轴不平行,因为二者同时经过 WCS 原点,则二者必定形成一个平面。在此平面内旋转 z 轴至 z' 轴,则 OCS x' y' 轴唯一,可以参见 AutoCAD 帮助——任意轴算法。

loveu515 发表于 2023-7-20 09:37:23

感谢分享,学习了

liuhe 发表于 2023-7-20 10:53:27

试试,块里面的坐标,和外面的坐标,转换原理

gaics 发表于 2023-7-21 07:46:46

liuhe 发表于 2023-7-20 10:53
试试,块里面的坐标,和外面的坐标,转换原理

暂时只能理解到这么多

ynhh 发表于 2023-7-21 16:18:02

谢谢
如有几个实际应用列子
就好理解了
这感觉太高深

vormittag 发表于 2023-7-26 10:20:52

点的转换如果不是在几个特殊坐标系(wcs、ucs、ocs)中转换,用转换矩阵的方法比 trans 更直观。这里主要就是构造转换矩阵的问题。

vormittag 发表于 2023-7-26 10:22:08

liuhe 发表于 2023-7-20 10:53
试试,块里面的坐标,和外面的坐标,转换原理

找到转换矩阵直接矩阵和矢量相乘即可,转换矩阵用 (nentselp) 是可以找到的。

liuhe 发表于 2023-7-26 10:43:36

vormittag 发表于 2023-7-26 10:22
找到转换矩阵直接矩阵和矢量相乘即可,转换矩阵用 (nentselp) 是可以找到的。

前提是获取矩阵,获取矩阵的方法呢。复杂体系还得靠trans转换,

vormittag 发表于 2023-7-26 13:15:46

liuhe 发表于 2023-7-26 10:43
前提是获取矩阵,获取矩阵的方法呢。复杂体系还得靠trans转换,

复杂的体系才是要靠数学计算的,用 trans 反而不好表达。

liuhe 发表于 2023-7-26 13:57:25

vormittag 发表于 2023-7-26 13:15
复杂的体系才是要靠数学计算的,用 trans 反而不好表达。

Leemac有了成熟坐标系函数,核心就是trans和矩阵,两者离不开的,只是 我没有仔细研究原理,只会用
页: [1] 2
查看完整版本: 浅谈trans函数的理解