Aftertouch 发表于 2022-7-5 15:42:55

折线凸出转换?

大家好,
 
我在计算膨胀系数时遇到了一些问题。。。
 
我有以下情况:

 
我设法得到了一个包含所有坐标的列表,并在正确的位置找到了凸出因子。
虽然。。。看来我的膨胀系数计算错了。。。
 
我设法得到所有长度的洋红线和匹配的坐标。
所以我的公式是:
 
其中arcbulge是到所需圆中心点的“垂直”线的长度。

(setq bulge (/ (tan arcbulge) 4))

但这会导致膨胀0.0571689,
而我在寻找一个值:0.71248。
 
以下是各点的坐标:
106357.129 507429.816起点
106362.918 507433.010弧上的随机点。
106366.580 507429.816终点
 
我哪里做错了?

rlx 发表于 2022-7-5 15:50:19

我对肥胖因素没有任何经验,但这里有一个链接,与那些似乎有:
 
 
http://www.cadtutor.net/forum/showthread.php?43619-计算圆弧的凸出度&高光=凸出
 
 
gr.Rlx

marko_ribar 发表于 2022-7-5 15:52:14

查看附加的PNG。。。

rlx 发表于 2022-7-5 16:00:56

 
 

Aftertouch 发表于 2022-7-5 16:04:56

谢谢你的回复,马尔科。
这就引出了另一个问题。。。。
 
我怎样才能得到角度?
因为有案例,我只得了3分。
开始,弧点,结束。
那么我没有任何参考来获得角度?

marko_ribar 发表于 2022-7-5 16:07:40

分析此链接:
http://www.lee-mac.com/bulgeconversion.html

Aftertouch 发表于 2022-7-5 16:13:37

经过长时间的搜索,我在网上找到了这个。

(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))))
)

 
似乎成功了。:-)

Lee Mac 发表于 2022-7-5 16:18:58

我认为这就足够了:
;; 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)
)

Aftertouch 发表于 2022-7-5 16:21:54

李,你最好!
这就省去了大量的编码工作,并得到了相同的结果。

Lee Mac 发表于 2022-7-5 16:28:53

不客气!
页: [1] 2
查看完整版本: 折线凸出转换?