David Bethel 发表于 2022-7-6 07:27:08

弧小于180度

这比我想象的要复杂
 
已知数据:
[列表]
[*]弧中心点
[*]弧“p1”p2的起点和终点
[*]因此弧的半径(距离cen p1)'ra
[*]圆弧夹角始终小于180度
[/列表]
 

(entmake
(list
   (cons 0 "ARC")
   (cons 10 cen)
   (cons 40 ra)
   (cons 50 (angle cen p1_or_p2))
   (cons 51 (angle cen p2_or_p1))))

 
我尝试了各种测试,但似乎没有任何东西能正常工作。
 
有什么想法吗?TIA-David

Lee Mac 发表于 2022-7-6 07:47:51

(if (< pi (LM:IncludedAngle cen p1 p2))
   (setq tmp p1 p1 p2 p2 tmp)
)
(entmake
   (list
      '(0 . "ARC")
       (cons 10 cen)
       (cons 40 (distance cen p1))
       (cons 50 (angle cen p1))
       (cons 51 (angle cen p2))
   )
)

;; Included Angle-Lee Mac
;; Returns the included angle of an arc
;; with center cen and start & end points p1,p2

(defun LM:IncludedAngle ( cen p1 p2 )
   (rem (+ pi pi (- (angle cen p2) (angle cen p1))) (+ pi pi))
)

Stefan BMR 发表于 2022-7-6 08:10:28

假设WCS和2D点(因为在entmake中未使用trans和210标志-法向量)
(defun arc3p (c p1 p2 / r a1 a2 rev)
(setq r   (distance c p1)
       a1(angle c p1)
       a2(angle c p2)
       rev ((lambda (a1 a2 / u)
            (if (minusp (setq u (- a2 a1)))
                (setq u (+ u (* 2 pi)))
            )
            (= u (rem u pi))
            )
             a1
             a2
         )
)
(entmake
   (list
   '(0 . "ARC")
   (cons 10 c)
   (cons 40 r)
   (cons 50 (if rev a1 a2))
   (cons 51 (if rev a2 a1))
   )
)
)

David Bethel 发表于 2022-7-6 08:20:06

谢谢,两个都很好-大卫

Lee Mac 发表于 2022-7-6 08:31:28

不客气,大卫
页: [1]
查看完整版本: 弧小于180度