(已解决)叉路口圆弧如何求出交点
本帖最后由 song宋_74729 于 2022-4-4 18:03 编辑叉路口圆弧如何求出交点,红色圈为交点,可以用框选方式求出圆弧与交点坐标和半径,并汇出至EXECL,
麻烦大神帮忙谢谢.
song宋_74729 发表于 2022-4-4 16:02
改为图上标注编号并提
取圆弧首末坐标及交点坐标 半径
夏生生 谢谢
您拿19楼的改改就是了,就是那么几个函数转圈圈
(defun c:tt (/ en f i lst n pt pt1 pt1a pt2 pt2a r ss)
(setq ss (ssget '((0 . "arc"))))
(repeat (setq i (sslength ss))
(setq n (* 3 i)
en (ssname ss (setq i (1- i)))
r (rtos (cdr (assoc 40 (entget en))) 2 3)
pt1(vlax-curve-getstartpoint en)
pt1a (mapcar '+
pt1
(vlax-curve-getfirstderiv
en
(vlax-curve-getparamatpoint en pt1)
)
)
pt2(vlax-curve-getendpoint en)
pt2a (mapcar '-
pt2
(vlax-curve-getfirstderiv
en
(vlax-curve-getparamatpoint en pt2)
)
)
pt (trans (inters pt1 pt1a pt2 pt2a nil) 0 1)
pt1(trans pt1 0 1)
pt2(trans pt2 0 1)
lst(cons (strcat (itoa n)
","
(rtos (car pt) 2 3)
","
(rtos (cadr pt) 2 3)
","
r
",心"
)
lst
)
lst(cons (strcat (itoa (1- n))
","
(rtos (car pt2) 2 3)
","
(rtos (cadr pt2) 2 3)
","
r
",末"
)
lst
)
lst(cons (strcat (itoa (- n 2))
","
(rtos (car pt1) 2 3)
","
(rtos (cadr pt1) 2 3)
","
r
",首"
)
lst
)
)
(entmake
(list '(0 . "circle") (cons 10 (trans pt 1 0)) (cons 40 1))
)
(entmake (list '(0 . "text")
'(100 . "AcDbEntity")
'(100 . "AcDbText")
(cons 10 (trans pt 1 0))
(cons 1 (itoa n))
(cons 40 1)
)
)
(entmake (list '(0 . "text")
'(100 . "AcDbEntity")
'(100 . "AcDbText")
(cons 10 (trans pt2 1 0))
(cons 1 (itoa (1- n)))
(cons 40 1)
)
)
(entmake (list '(0 . "text")
'(100 . "AcDbEntity")
'(100 . "AcDbText")
(cons 10 (trans pt1 1 0))
(cons 1 (itoa (- n 2)))
(cons 40 1)
)
)
)
(setq f (open "d:\\1.csv" "w"))
(foreach n (cons "序号,X=,Y=,半径,点类别" lst)
(write-line n f)
)
(close f)
)
本帖最后由 夏生生 于 2022-4-4 15:55 编辑
可以看看vlax-curve-getfirstderiv函数
(defun c:tt (/ en f i lst n pt pt1 pt1a pt2 pt2a ss)
(setq ss (ssget '((0 . "arc"))))
(repeat (setq i (sslength ss))
(setq en (ssname ss (setq i (1- i)))
pt1(vlax-curve-getstartpoint en)
pt1a (mapcar '+
pt1
(vlax-curve-getfirstderiv
en
(vlax-curve-getparamatpoint en pt1)
)
)
pt2(vlax-curve-getendpoint en)
pt2a (mapcar '-
pt2
(vlax-curve-getfirstderiv
en
(vlax-curve-getparamatpoint en pt2)
)
)
pt (trans (inters pt1 pt1a pt2 pt2a nil) 0 1)
n (itoa (1+ i))
lst(cons (strcat n
","
(rtos (car pt) 2 3)
","
(rtos (cadr pt) 2 3)
","
(rtos (cdr (assoc 40 (entget en))) 2 3)
)
lst
)
)
(entmake
(list '(0 . "circle") (cons 10 (trans pt 1 0)) (cons 40 1))
)
(entmake (list '(0 . "text")
'(100 . "AcDbEntity")
'(100 . "AcDbText")
(cons 10 (trans pt 1 0))
(cons 1 n)
(cons 40 1)
)
)
)
(setq f (open "d:\\1.csv" "w"))
(foreach n lst
(write-line n f)
)
(close f)
)
song宋_74729 发表于 2022-3-18 23:00
谢谢xyp1964版主,如何将数据提取至execl,每一个点加编号,1. X=Y=R=并标注在图上,才知道提取位置谢 ...
(defun c:tt ()
(defun dxf (code e) (cdr (assoc code (entget e))))
(defun ArcBreakPoint (s1 / p0 p1 p1a p2 p2a pt) ;
(setq p0(cdr (assoc 10 (entget s1)))
p1(vlax-curve-getStartPoint s1)
p2(vlax-curve-getEndPoint s1)
p1a (polar p1 (+ (angle p0 p1) (* pi 0.5)) 1)
p2a (polar p2 (+ (angle p0 p2) (* pi 0.5)) 1)
)
(inters p1 p1a p2 p2a nil)
)
(if (setq ss (ssget '((0 . "arc"))))
(progn
(setq i -1
lst '()
)
(while (setq s1 (ssname ss (setq i (1+ i))))
(setq pt(ArcBreakPoint s1)
a (list (cadr pt) (car pt) (dxf 40 s1))
a (mapcar '(lambda (x) (rtos x 2 3)) a)
lst (cons a lst)
)
)
(setq lst (cons '("X=" "Y=" "圓弧半徑") (reverse lst)))
(print lst)
)
)
(princ)
)
(setq ffn (getfiled "坐標寫入文本文件" "D:/" "TXT" 1))
(setq opf (open ffn "w"))
(setq ss (ssget '((0 . "*ARC"))))
(setq kg " ")
(setq txt (strcatkg "X坐標" kg "Y坐標" kg "圓弧半徑"))
(write-line txt opf)
;(princ (strcat kg "X坐標" kg "Y坐標" kg "圓弧半徑") opf)
(setq i -1)
(setq key 10)
(repeat (sslength ss)
(setq ent (entget (ssname ss (setq i (1+ i)))))
(setq count 1)
(foreach xy ent
(if (eq (car xyr) key)
(progn
(setq pe (cdr xyr))
(setq x (rtos(cadr pe)2 3))
(setq y (rtos(car pe)2 3))
(setq r (rtos(caddr pe)2 3))
(write-line (strcat (itoa count) kg x kg y kg r) opf)
;(princ "\n" opf)
;(princ (strcat (itoa count) kg x kg y kg r) opf)
(setq count (1+ count))
)
)
)
)
如何修改为图上标注编号并提
取圆弧首末坐标及交点坐标 半径
谢谢 没咋说清楚,红色小圆为交点,啥交点?那些圆弧与红色小圆哪有啥交点?既然都画好了,还需要求?直接导出就可以 guosheyang 发表于 2022-3-17 11:40
没咋说清楚,红色小圆为交点,啥交点?那些圆弧与红色小圆哪有啥交点?既然都画好了,还需要求?直接导出 ...
红色圈为圆弧交点,交点是未知, 圆弧与圆弧的交点?还是圆弧与啥的交点?
本帖最后由 song宋_74729 于 2022-3-17 12:16 编辑
guosheyang 发表于 2022-3-17 11:59
圆弧与圆弧的交点?还是圆弧与啥的交点?
单圆弧交点
本帖最后由 xyp1964 于 2022-3-17 13:10 编辑
(defun ArcBreakPoint (s1 / p0 p1 p1a p2 p2a pt) ;圆弧拐点函数
(setq p0(cdr (assoc 10 (entget s1)))
p1(vlax-curve-getStartPoint s1)
p2(vlax-curve-getEndPoint s1)
p1a (polar p1 (+ (angle p0 p1) (* pi 0.5)) 1)
p2a (polar p2 (+ (angle p0 p2) (* pi 0.5)) 1)
)
(inters p1 p1a p2 p2a nil)
)
本帖最后由 song宋_74729 于 2022-3-17 13:05 编辑
xyp1964 发表于 2022-3-17 12:38
(defun ArcPtR (s1 / p0 p1 p1a p2 p2a pt)
(setq p0(cdr (assoc 10 (entget s1)))
p ...
厉害 , 那圆圈的交点是未知的,我要求出圆弧及交点坐标和半径,汇出至execl 红色圆圈和圆弧是啥关系?为何称为交点? 哦懂了原来是两端点的切线交点 guosheyang 发表于 2022-3-17 13:12
哦懂了原来是两端点的切线交点
没错 就是两端点的切线交点