求点在用户坐标系下的坐标
以知点p1 p2 p3的坐标, 求点p1在以p2为原点,p2p3为X正轴方向的坐标系下p1的新坐标点,请问应该怎么写。 请大师们出手相助,万分谢谢! 学习了下,好像这样就可以了。谢谢明经(defun trans-ucs-w->p123 (P1 P2 P3 / XU YU ZU ANGU XP YP ZP X1 Y1 Z1 X Y Z M_RET)
(setq xu(car p2))
(setq yu(cadr p2))
(setq zu (caddr p2))
(setq angu(angle p2 p3))
(setq xp (car p1))
(setq yp (cadr p1))
(setq zp (caddr p1))
(setq x1 (- xp xu))
(setq y1 (- yp yu))
(setq z1 (- zp zu))
(setq x (+ (* x1 (cos angu)) (* y1 (sin angu))))
(setq y (- (* y1 (cos angu)) (* x1 (sin angu))))
(setq z z1)
(setq m_ret (list x y z))
m_ret
) (setq p1 '( 5 2 0 ) p2 '(1 1 0 ) p3 '(3 5 0))
(LH:TRANS3P P1 P2 P3)
;;;;;P1 移动点
;;;;;P2 新原点
;;;;;P3 新原点的方向
;;;;二维测试没问题,三维坐标不清楚
(defun LH:TRANS3P (p1 p2 p3)
(list (caddr (trans (mapcar '- p1 p2) 0 (mapcar '- p3 p2)))
(car (trans (mapcar '- p1 p2) 0 (mapcar '- p3 p2)))
(cadr (trans (mapcar '- p1 p2) 0 (mapcar '- p3 p2)))
)
)
二维测试和你的函数结果相同 liuhe 发表于 2023-7-18 13:45
二维测试和你的函数结果相同
trans函数一直没搞明白。比如当前坐标系中一个矩形的左上角坐标(x1 y1 0),左下角坐标(x0 y0 0)。矩形向右移动了X,向上移动了Y,以左下角为基点旋转了Ang,那么现在原来矩形左上角的坐标现在是多少?
这个经过Polar变换能实现,用trans方法怎么实现呢? liuhe 发表于 2023-7-18 13:45
二维测试和你的函数结果相同
(defun PToLn(p p1 p2)(list(caddr(setq p(trans(mapcar'- p1 p)0(mapcar'- p1 p2))))(car p)(cadr p))) llsheng_73 发表于 2023-7-18 13:56
66666我是刚研究的的,还是你的6 本帖最后由 gaics 于 2023-7-18 15:07 编辑
llsheng_73 发表于 2023-7-18 13:56
73哥,这样行不?
(trans(trans (trans (mapcar '- p1 p2) 0 (mapcar '- p3 p2))0'(1 0 0))0'(1 0 0))
这样更简洁
(trans (trans (mapcar '- p1 p2) 0 (mapcar '- p3 p2))'(1 0 0)'(0 0 1))
llsheng_73 发表于 2023-7-18 13:56
虽然被我试出了结果,但是对于trans函数依然似懂非懂。
从第一次trans返回的结果看,需要把坐标先绕X轴逆时针旋转90度、再绕Z轴逆时针旋转90度就能得到正确的结果。
所以第二次trans的参数为什么是'(1 0 0) '(0 0 1)还是没想明白。 各位高手,牛牛牛!非常感谢 我始终还是搞不懂坐标转换的难题。尤其是 trans 直接 (command "ucs" "")
就不需要算ucs了
自用