使用THREE.JS中的凸起在折线内绘制圆弧

时间:2014-03-07 19:54:39

标签: javascript math three.js cad

我正在读取dxf中的cad文件,我需要能够在两个具有凸出值的任意点之间绘制弧。我正在使用THREE.Line绘制弧段。

This page描述了lisp中的一些必要计算,但没有很好地解释中心点计算。我也不知道angle函数在示例代码中做了什么(也许是使用0,0作为原点的两点之间的角度?)。这是代码:

;; Bulge to Arc  -  Lee Mac
;; p1 - start vertex
;; p2 - end vertex
;; b  - bulge
;; Returns: (<center> <start angle> <end angle> <radius>)

(defun LM:Bulge->Arc ( p1 p2 b / a c r )
    (setq a (* 2 (atan b))
          r (/ (distance p1 p2) 2 (sin a))
          c (polar p1 (+ (- (/ pi 2) a) (angle p1 p2)) r)
    )
    (if (minusp b)
        (list c (angle c p2) (angle c p1) (abs r))
        (list c (angle c p1) (angle c p2) (abs r))
    )
)

我理解如何计算a(即theta)和r(半径),但我不理解中心点计算,我需要它(我认为)来计算细分为我的弧线。任何人都可以帮助解释数学和/或提供一些JavaScript代码吗?

1 个答案:

答案 0 :(得分:1)

一位同事能够弄明白该做什么:

在lisp代码中,角度a(又名theta)刚刚简化为2atan(b)而不是4atan(b),因为稍后我们只需要角度的一半来进行中心的某些计算点c和半径r,而不是整个角度。

lisp angle函数找到向量的角度(在本例中为p1 -> p2),其中0是正x轴,pi / 2是正y轴,依此类推。该和弦的角度加上绳索和矢量p1 -> c之间的角度(pi - pi/2 - a),使我们足以进行极坐标计算以找到中心点c的坐标