960322 发表于 2024-5-7 22:48

求点p 绕p1 p2为法线正方向旋转 ang 角度后的点

求助,求点p 绕p1 p2为法线正方向旋转 ang 角度后的点,应该怎么写请大侠帮忙,谢谢!

Bao_lai 发表于 2024-5-7 23:04

本帖最后由 Bao_lai 于 2024-5-7 23:15 编辑






旋转只口不谈旋转基点确定不是耍流氓?
还是说是图中所示?
提问题总要讲明白嘛,不能让别人去猜吧。

自贡黄明儒 发表于 2024-5-8 07:29

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=99926&highlight=%BE%D8%D5%F3&_dsign=9cd9eb05

liuhe 发表于 2024-5-8 11:18

这个太难,你把握不住,开玩笑
最笨的方法是,创造一个点,然后用vla-rotate旋转,再读取这个点坐标后删除这个点

Gaudi 发表于 2024-5-8 16:21

http://bbs.mjtd.com/forum.php?mod=redirect&goto=findpost&ptid=189940&pid=977657&fromuid=7332737

自卖自夸一番

你有种再说一遍 发表于 2024-5-8 19:17

https://www.cnblogs.com/JJBox/p/14300098.html
一些基础的矩阵变换概念,
在描述任意轴旋转只是先变换到z轴重合,这个过程叫做基变换.
至于怎么转换成lisp代码就是你自己的事情了,嘻嘻

szmaicy 发表于 2024-5-13 14:51

;点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)) ;还原位移
)

szmaicy 发表于 2024-5-13 14:54

上贴巧妙利用acad的trans函数
如果要用纯数学计算,代码会略微复杂一些

960322 发表于 2024-5-13 17:16

szmaicy 发表于 2024-5-13 14:51
;点pt围绕轴line(两点)旋转角度ang
(defun diy_3d_rotate ( pt line ang / vz z p1 p2)
        (mapcar 'set...

非常感谢!谢谢!

960322 发表于 2024-5-13 17:17

szmaicy 发表于 2024-5-13 14:51
;点pt围绕轴line(两点)旋转角度ang
(defun diy_3d_rotate ( pt line ang / vz z p1 p2)
        (mapcar 'set...

不但解决了问题,注释还很清楚,学到不少!
页: [1]
查看完整版本: 求点p 绕p1 p2为法线正方向旋转 ang 角度后的点