trans函数的疑惑
;;;计算cp到p1 p2的垂足点(defun PerToLine(cp p1 p2 / norm)
(setq norm (mapcar '- p2 p1)
p1 (trans p1 0 norm)
cp (trans cp 0 norm)
)
(trans (list (car p1) (cadr p1) (caddr cp)) norm 0)
)
请教各位大佬,这段代码的trans函数怎么解释,我只知道用来转换坐标,但这里是另外一种用法,完全看不懂。
本帖最后由 vormittag 于 2023-8-30 14:28 编辑
很简单:
1、(mapcar '- p2 p1) 是 p1 指向 p2 的向量,作为平面法向量 norm
2、(trans p1 0 norm) 是将 p1 从WCS 坐标转换为 以 norm 为法向量的 OCS 坐标,该坐标系原点与WCS相同,但是以 norm 为Z轴,显然垂足在 OCS 坐标系中的 x、y 坐标与 p1 在 OCS 坐标系下x、y 坐标对应相等。
3、(trans cp 0 norm) 将 cp 点的坐标从 WCS 转换到这个OCS,显然,垂足在 OCS 坐标系中的 z 坐标与 cp 在 OCS 坐标系下 z 坐标对应相等。
4、(trans (list (car p1) (cadr p1) (caddr cp)) norm 0) 把坐标组合起来,再转换回到WCS,齐活了。
从下面这个图里你可能更能看得明白,OXYZ 是世界坐标系 WCS,OX’Y’Z’ 是 对象坐标系 OCS,OZ’∥P1P2,显然,垂足 P 在 OCS 坐标系中的 x、y 坐标与 P1 一致(of course,也与P2 一致,用谁无所谓),P 在 OCS 坐标系中的 z 坐标与 CP 的 z 坐标一致。组装一下,然后转换回到 WCS 就好了啊。
通俗易懂,不错不错呀,看来数学肯定学的不错:D- 本帖最后由 wide 于 2024-5-3 15:05 编辑
vormittag 发表于 2023-8-30 14:10
很简单:
1、(mapcar '- p2 p1) 是 p1 指向 p2 的向量,作为平面法向量 norm
2、(trans p1 0 norm) 是将...
http://bbs.mjtd.com/forum.php?mo ... %B1%EA%D7%A2&page=2,17楼代码中求中点部分能解释习吗?
[*](defun c:test1 (/ get_dim_mid ss n)
[*](defun get_dim_mid (en / ent pt10 pt13 pt14 v pt13t)
[*] (setq ent(entget en)
[*] pt10(cdr (assoc 10 ent))
[*] pt13(cdr (assoc 13 ent))
[*] pt14(cdr (assoc 14 ent))
[*] v(mapcar '- pt10 pt14)
[*] pt14(trans pt14 0 v)
[*] pt13t(trans pt13 0 v)
[*] )
[*] (mapcar
[*] '+
[*] pt10
[*] (mapcar '(lambda (x y) (* 0.5 (- x y)))
[*] pt13
[*] (trans (list (car pt14) (cadr pt14) (caddr pt13t)) v 0)
[*] )
[*] )
[*])
[*](setq ss (ssget))
[*](repeat (setq n (sslength ss))
[*] (entmake
[*] (list (cons 0 "circle")
[*] (cons 10 (get_dim_mid (ssname ss (setq n (1- n)))))
[*] (cons 40 100)
[*] )
[*] )
[*])
[*])
我也看不懂但是受益匪浅 代码我收了 vormittag 发表于 2023-8-30 14:10
很简单:
1、(mapcar '- p2 p1) 是 p1 指向 p2 的向量,作为平面法向量 norm
2、(trans p1 0 norm) 是将...
谢谢您了,我看懂了。没有您详细的解释,光解释这个函数,估计我一时半会也明白不了。再次谢谢您。 本帖最后由 树櫴希德 于 2023-8-30 18:54 编辑
(setq p1 (getpoint"\n please select a point:"))
(setq p2 (getpoint p1 "\n please select a point:"))
(setq cp (getpoint "\n please select a point:"))
(setq norm (mapcar '- p2 p1) )
(setq pp (trans cp 0 norm))
(trans '(12456 41785 15) 0 '(1933.41 1093.65 990.0))vormittag 发表于 2023-8-30 14:10
很简单:
1、(mapcar '- p2 p1) 是 p1 指向 p2 的向量,作为平面法向量 norm
2、(trans p1 0 norm) 是将...
必须收藏 赞 厉害,明白了。 点赞,关注+收藏。{:1_1:} trans方法很巧妙啊.我之前写了一个,用向量方法的,显得麻烦一些了 vormittag 发表于 2023-8-30 14:10
很简单:
1、(mapcar '- p2 p1) 是 p1 指向 p2 的向量,作为平面法向量 norm
2、(trans p1 0 norm) 是将...
受教了,大佬出马解释,基本知道原理了 厉害,说得清楚明白,学些了,多谢
页:
[1]
2