旋转点表函数
本帖最后由 hubeiwdlue 于 2024-6-23 12:46 编辑xiaocainiao网友提出的按方向点排序的问题,黄大师提出可以旋转点表,然后按照x排序。
http://bbs.mjtd.com/forum.php?mo ... hlight=%C5%C5%D0%F2
我试着写一个简单的点表旋转函数,水平很差,大家不要笑话。
期待大神写出效率更高,更精简的函数。
;;旋转点表函数,(ptlst-rot ptlst pt ang),ptlst为点表,pt为旋转基点,ang为角度,单位是弧度
(defun ptlst-rot(ptlst pt ang / ang1 ang2 dis p2 plst v)
(foreach p ptlst
(setq dis (distance pt p)
ang1 (angle pt p)
ang2 (+ ang1 ang)
v (polar '(0 0 0) ang2 dis)
)
(setq p2 (mapcar '+ pt v)
plst (cons p2 plst)
)
)
(reverse plst)
)
;;测试
(defun c:tt()
(setq en (car(entsel)))
(setq plst (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10))(entget en))))
(setq pt (car plst))
(setq plst2 (ptlst-rot plst pt (* (/ -50 180.0) pi)))
(command ".PLINE")
(foreach p plst2
(command "non" p)
)
(command)
(princ)
)
本帖最后由 tryhi 于 2024-6-23 19:17 编辑
建议化整为零,不要上来直接整表,拆解为两步更简单
;;pt点围绕p0点旋转ang弧度
(defun try-pt-rotate (pt p0 ang)(polar p0 (+ (angle p0 pt) ang) (distance pt p0)))
;;点表围绕p0点旋转ang弧度
(defun try-pts-rotate(lst p0 ang)(mapcar '(lambda(x)(try-pt-rotate x p0 ang))lst)) tryhi 发表于 2024-6-23 19:15
建议化整为零,不要上来直接整表,拆解为两步更简单
谢谢大海老师的指导。这样逻辑确实更清晰一些。谢谢。 我喜欢找Matrix-Lib.LSP:loveliness:
;;-----------------------------------------------------------;;
;; 二维旋转变换矩阵 ;;
;; 参数: ;;
;; Cen - 基点 ;;
;; ang - 旋转角度 ;;
;;-----------------------------------------------------------;;
;;-----------------=={ Rotate by Matrix }==------------------;;
;; ;;
;; Rotation Matrix ;;
;;-----------------------------------------------------------;;
;; Author: highflybird, Copyright ? 2012 ;;
;;-----------------------------------------------------------;;
;; Arguments: ;;
;; Cen - Base Point for Rotation Transformation ;;
;; ang - Angle through which to rotate object ;;
;;-----------------------------------------------------------;;
(defun MAT:Rotation ( Cen ang / c s x y)
(setq c (cos ang) s (sin ang))
(setq x (car Cen) y (cadr Cen))
(list
(list c (- s) 0. (- x (- (* c x) (* s y))))
(list s c0. (- y (+ (* s x) (* c y))))
'(0. 0. 1. 0.)
'(0. 0. 0. 1.)
)
)
自贡黄明儒 发表于 2024-6-24 08:20
我喜欢找Matrix-Lib.LSP
谢谢黄大师。这个矩阵变换,已经忘得干干净净了,完全看不懂了。 自贡黄明儒 发表于 2024-6-24 08:20
我喜欢找Matrix-Lib.LSP
黄大师,这是旋转矩阵和平移矩阵并一起了吗?要怎么用呢? hubeiwdlue 发表于 2024-9-5 10:47
黄大师,这是旋转矩阵和平移矩阵并一起了吗?要怎么用呢?
Matrix-Lib.LSP里面有示例的呀 自贡黄明儒 发表于 2024-9-5 10:51
Matrix-Lib.LSP里面有示例的呀
Matrix-Lib.LSP分享一个
页:
[1]