明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 789|回复: 9

旋转点表函数

[复制链接]
发表于 2024-6-23 12:36:03 | 显示全部楼层 |阅读模式
本帖最后由 hubeiwdlue 于 2024-6-23 12:46 编辑

xiaocainiao网友提出的按方向点排序的问题,黄大师提出可以旋转点表,然后按照x排序。
http://bbs.mjtd.com/forum.php?mo ... hlight=%C5%C5%D0%F2
我试着写一个简单的点表旋转函数,水平很差,大家不要笑话。
期待大神写出效率更高,更精简的函数。
  1. ;;旋转点表函数,(ptlst-rot ptlst pt ang),ptlst为点表,pt为旋转基点,ang为角度,单位是弧度
  2. (defun ptlst-rot(ptlst pt ang / ang1 ang2 dis p2 plst v)
  3.   (foreach p ptlst
  4.     (setq dis (distance pt p)
  5.       ang1 (angle pt p)
  6.       ang2 (+ ang1 ang)
  7.       v (polar '(0 0 0) ang2 dis)
  8.     )
  9.     (setq p2 (mapcar '+ pt v)
  10.       plst (cons p2 plst)
  11.     )
  12.   )
  13.   (reverse plst)
  14. )
  15. ;;测试
  16. (defun c:tt()
  17.   (setq en (car(entsel)))
  18.   (setq plst (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10))(entget en))))
  19.   (setq pt (car plst))
  20.   (setq plst2 (ptlst-rot plst pt (* (/ -50 180.0) pi)))
  21.   (command ".PLINE")
  22.   (foreach p plst2
  23.     (command "non" p)
  24.   )
  25.   (command)
  26.   (princ)  
  27. )



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +1 收起 理由
tryhi + 1

查看全部评分

发表于 2024-6-23 19:15:01 | 显示全部楼层
本帖最后由 tryhi 于 2024-6-23 19:17 编辑


建议化整为零,不要上来直接整表,拆解为两步更简单

  1. ;;pt点围绕p0点旋转ang弧度
  2. (defun try-pt-rotate (pt p0 ang)(polar p0 (+ (angle p0 pt) ang) (distance pt p0)))
  3. ;;点表围绕p0点旋转ang弧度
  4. (defun try-pts-rotate(lst p0 ang)(mapcar '(lambda(x)(try-pt-rotate x p0 ang))lst))
 楼主| 发表于 2024-6-23 19:28:02 | 显示全部楼层
tryhi 发表于 2024-6-23 19:15
建议化整为零,不要上来直接整表,拆解为两步更简单

谢谢大海老师的指导。这样逻辑确实更清晰一些。谢谢。
发表于 2024-6-24 08:20:56 | 显示全部楼层
我喜欢找Matrix-Lib.LSP
  1. ;;-----------------------------------------------------------;;
  2. ;; 二维旋转变换矩阵                                              ;;
  3. ;; 参数:                                                      ;;
  4. ;; Cen - 基点                                                ;;
  5. ;; ang - 旋转角度                                            ;;
  6. ;;-----------------------------------------------------------;;
  7. ;;-----------------=={ Rotate by Matrix }==------------------;;
  8. ;;                                                           ;;
  9. ;; Rotation Matrix                                           ;;
  10. ;;-----------------------------------------------------------;;
  11. ;; Author: highflybird, Copyright ? 2012                     ;;
  12. ;;-----------------------------------------------------------;;
  13. ;; Arguments:                                                ;;
  14. ;; Cen    - Base Point for Rotation Transformation           ;;
  15. ;; ang    - Angle through which to rotate object             ;;
  16. ;;-----------------------------------------------------------;;
  17. (defun MAT:Rotation ( Cen ang / c s x y)
  18.   (setq c (cos ang) s (sin ang))
  19.   (setq x (car Cen) y (cadr Cen))
  20.   (list
  21.     (list c (- s) 0. (- x (- (* c x) (* s y))))
  22.     (list s    c  0. (- y (+ (* s x) (* c y))))
  23.     '(0. 0. 1. 0.)
  24.     '(0. 0. 0. 1.)
  25.   )
  26. )
 楼主| 发表于 2024-6-24 17:08:01 | 显示全部楼层

谢谢黄大师。这个矩阵变换,已经忘得干干净净了,完全看不懂了。
 楼主| 发表于 2024-9-5 10:47:06 | 显示全部楼层

黄大师,这是旋转矩阵和平移矩阵并一起了吗?要怎么用呢?
发表于 2024-9-5 10:51:03 | 显示全部楼层
hubeiwdlue 发表于 2024-9-5 10:47
黄大师,这是旋转矩阵和平移矩阵并一起了吗?要怎么用呢?

Matrix-Lib.LSP里面有示例的呀
 楼主| 发表于 2024-9-5 10:59:33 | 显示全部楼层
自贡黄明儒 发表于 2024-9-5 10:51
Matrix-Lib.LSP里面有示例的呀

Matrix-Lib.LSP分享一个

点评

谢谢黄大师,谢谢高飞老师。  发表于 2024-9-5 13:00
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=99926&highlight=%C2%DB%BE%D8%D5%F3  发表于 2024-9-5 12:32
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 03:00 , Processed in 0.369993 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表