折线凸出转换?
大家好,我在计算膨胀系数时遇到了一些问题。。。
我有以下情况:
我设法得到了一个包含所有坐标的列表,并在正确的位置找到了凸出因子。
虽然。。。看来我的膨胀系数计算错了。。。
我设法得到所有长度的洋红线和匹配的坐标。
所以我的公式是:
其中arcbulge是到所需圆中心点的“垂直”线的长度。
(setq bulge (/ (tan arcbulge) 4))
但这会导致膨胀0.0571689,
而我在寻找一个值:0.71248。
以下是各点的坐标:
106357.129 507429.816起点
106362.918 507433.010弧上的随机点。
106366.580 507429.816终点
我哪里做错了? 我对肥胖因素没有任何经验,但这里有一个链接,与那些似乎有:
http://www.cadtutor.net/forum/showthread.php?43619-计算圆弧的凸出度&高光=凸出
gr.Rlx 查看附加的PNG。。。
谢谢你的回复,马尔科。
这就引出了另一个问题。。。。
我怎样才能得到角度?
因为有案例,我只得了3分。
开始,弧点,结束。
那么我没有任何参考来获得角度? 分析此链接:
http://www.lee-mac.com/bulgeconversion.html
经过长时间的搜索,我在网上找到了这个。
(DEFUN WIKI-3PTTOBULGE (PNT1 PNT2 PNT3 / ANG1 ANG2 ANG3 BULGE CHORD DELTA DELTA1 R)
(COND
((NOT PNT2)
0
)
(T
(SETQ CHORD (DISTANCE PNT1 PNT3))
(setq ANG2 (- (ANGLE PNT2 PNT1) (ANGLE PNT2 PNT3)))
(setq R (/ CHORD (* 2 (SIN ANG2))))
(setq DELTA1 (* 2 (WIKI-ASIN (/ CHORD (* 2 R)))))
(setq ANG1 (ABS (- (ANGLE PNT1 PNT3) (ANGLE PNT1 PNT2))))
(setq ANG1 (ABS (IF (> ANG1 PI)(- ANG1 (* 2 PI)) ANG1)))
(setq ANG3 (ABS (- (ANGLE PNT3 PNT1) (ANGLE PNT3 PNT2))))
(setq ANG3 (ABS (IF (> ANG3 PI)(- ANG3 (* 2 PI)) ANG3)))
(setq DELTA (* 2 (+ ANG1 ANG3)))
(setq BULGE (* (IF (MINUSP R) -1 1)(WIKI-TAN (/ DELTA 4.0))))
)
)
)
(DEFUN WIKI-TAN (X)
(/ (SIN X) (COS X))
)
(DEFUN WIKI-ASIN (X)
(ATAN X (SQRT (- 1 (* X X))))
)
似乎成功了。:-) 我认为这就足够了:
;; 3-Points to Bulge-Lee Mac
(defun LM:3p->bulge ( p1 p2 p3 )
((lambda ( a ) (/ (sin a) (cos a))) (/ (+ (- pi (angle p2 p1)) (angle p2 p3)) 2))
)
WCS示例:
(defun c:test ( / p1 p2 p3 )
(if (and (setq p1 (getpoint "\nSpecify 1st Point: "))
(setq p2 (getpoint "\nSpecify 2nd Point: " p1))
(setq p3 (getpoint "\nSpecify 3rd Point: " p2))
)
(entmake
(list
'(000 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
'(090 . 2)
'(070 . 0)
(cons 10 p1)
(cons 42 (LM:3p->bulge p1 p2 p3))
(cons 10 p3)
)
)
)
(princ)
) 李,你最好!
这就省去了大量的编码工作,并得到了相同的结果。 不客气!
页:
[1]
2