簡體   English   中英

繪制貝塞爾曲線的截面

[英]Drawing sections of a Bezier curve

我正在編寫代碼以將四分之一橢圓近似為Bézier 曲線

現在已經這樣做了,我在繪制這條曲線的部分時遇到了麻煩。 我需要一些幫助來選擇控制點。

最初,我將控制點的距離與曲線起點的距離之比設為 0.51。

編輯:

pseudo code
import cairo [...]
ctx.moveto(0,y1)
ctx.curveto(0,y1/2,x1/2,0,x1,0)

這將導致從 (0,y1) 到 (x1,0) 的近似橢圓曲線,橢圓中心位於 (x1,y1)。

請注意,掃描的參數角度是pi/2 如果假設我希望將它繪制成更像虛線圖案的部分,那么我該怎么做呢? 例如,從t = pi/6t = pi/3 如何選擇控制點?

要使用單個三次圓弧近似四分之一圓,通常所做的是使中點正好在圓上並使用相切的起點和終點方向。

這不是任何合理度量中的正式“最佳”近似值,但很容易計算……例如,四分之一圓的幻數是0.5522847498 有關詳細信息,請參閱此頁面...

要繪制橢圓弧,您只需拉伸圓弧的控制點(再一次在數學上不能稱為“最佳近似值”)。

通用角度案例

可以使用以下方法計算此定義下通用角度的最佳弧(即貝塞爾曲線的中點在弧的中間)...

1. 對稱三次貝塞爾弧的最大高度為 3/4 H,其中 H 是控制點的高度

考慮到如何使用 De Casteljau 算法或我關於顯式計算貝塞爾曲線的答案來計算貝塞爾三次的中點,這一點應該很清楚; 另見下圖:

對稱貝塞爾三次圓弧的中點高度

y_mid = ((0+H)/2 + (H+H)/2) / 2 = 3/4 H


2.圓繩中心的角度是底部角度的兩倍

請參閱任何基本幾何文本以獲取證明。


最后將L命名為極值之間的距離, S (未知)控制 arm 的對稱貝塞爾曲線, 2*alpha為近似的圓角,我們可以計算出

3. S = L (2/3) (1-cos(alpha)) / (sin(alpha)**2)

這是從上述方程和一些計算得出的; 見下圖的描述。

控制點距離計算

我認為你應該使用整條曲線的控制點。 一種方法是確定貝塞爾曲線的參數方程版本 - 請參閱如何找到定義貝塞爾曲線的數學 function

接下來,找出參數方程中0 <= t <= 1的哪一部分,由角度p1/6 <= ө <= pi/3定義的部分代表,然后通過它運行該值范圍。

有一些方法可以沿着某種參數定義的曲線計算每個點,這些曲線適用於此,並且應該使虛線圖案的繪制相當直接和快速。

這個鏈接對貝塞爾曲線有很好的解釋。 它涵蓋了基本的數學原理,還提供了示例代碼。

因為貝塞爾曲線通常使用參數方程來實現,所以您只需在每個采樣點之間繪制線段。 如果您以這種方式繪制曲線,您的步長將影響曲線的平滑度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM