求点p 绕p1 p2为法线正方向旋转 ang 角度后的点
求助,求点p 绕p1 p2为法线正方向旋转 ang 角度后的点,应该怎么写请大侠帮忙,谢谢!本帖最后由 Bao_lai 于 2024-5-7 23:15 编辑
旋转只口不谈旋转基点确定不是耍流氓?
还是说是图中所示?
提问题总要讲明白嘛,不能让别人去猜吧。
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=99926&highlight=%BE%D8%D5%F3&_dsign=9cd9eb05 这个太难,你把握不住,开玩笑
最笨的方法是,创造一个点,然后用vla-rotate旋转,再读取这个点坐标后删除这个点 http://bbs.mjtd.com/forum.php?mod=redirect&goto=findpost&ptid=189940&pid=977657&fromuid=7332737
自卖自夸一番 https://www.cnblogs.com/JJBox/p/14300098.html
一些基础的矩阵变换概念,
在描述任意轴旋转只是先变换到z轴重合,这个过程叫做基变换.
至于怎么转换成lisp代码就是你自己的事情了,嘻嘻 ;点pt围绕轴line(两点)旋转角度ang
(defun diy_3d_rotate ( pt line ang / vz z p1 p2)
(mapcar 'set '(p1 p2) line) ;旋转轴两点
(setq vz (mapcar '- p2 p1)) ;旋转轴向量
(setq pt (mapcar '- pt p1)) ;旋转点以旋转轴起点位移
(setq pt (trans pt 0 vz)) ;把pt转换为以旋转轴为z轴的坐标系,xy轴未明
(setq z (caddr pt)) ;获得转换后z坐标
(setq pt (list (car pt) (cadr pt)));去掉转换后z坐标
(setq pt (polar (list 0 0) (+ ang (angle (list 0 0) pt)) (distance (list 0 0) pt))) ;把转换后在0平面上投影点旋转ang
(setq pt (list (car pt) (cadr pt) z)) ;把z坐标给回旋转后的点
(setq pt (trans pt vz 0)) ;转回世界坐标系
(setq pt (mapcar '+ pt p1)) ;还原位移
) 上贴巧妙利用acad的trans函数
如果要用纯数学计算,代码会略微复杂一些 szmaicy 发表于 2024-5-13 14:51
;点pt围绕轴line(两点)旋转角度ang
(defun diy_3d_rotate ( pt line ang / vz z p1 p2)
(mapcar 'set...
非常感谢!谢谢! szmaicy 发表于 2024-5-13 14:51
;点pt围绕轴line(两点)旋转角度ang
(defun diy_3d_rotate ( pt line ang / vz z p1 p2)
(mapcar 'set...
不但解决了问题,注释还很清楚,学到不少!
页:
[1]