[英]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/6
到t = pi/3
? 如何選擇控制點?
要使用單個三次圓弧近似四分之一圓,通常所做的是使中點正好在圓上並使用相切的起點和終點方向。
這不是任何合理度量中的正式“最佳”近似值,但很容易計算……例如,四分之一圓的幻數是0.5522847498
。 有關詳細信息,請參閱此頁面...
要繪制橢圓弧,您只需拉伸圓弧的控制點(再一次在數學上不能稱為“最佳近似值”)。
可以使用以下方法計算此定義下通用角度的最佳弧(即貝塞爾曲線的中點在弧的中間)...
考慮到如何使用 De Casteljau 算法或我關於顯式計算貝塞爾曲線的答案來計算貝塞爾三次的中點,這一點應該很清楚; 另見下圖:
y_mid = ((0+H)/2 + (H+H)/2) / 2 = 3/4 H
請參閱任何基本幾何文本以獲取證明。
L
命名為極值之間的距離, S
(未知)控制 arm 的對稱貝塞爾曲線, 2*alpha
為近似的圓角,我們可以計算出
這是從上述方程和一些計算得出的; 見下圖的描述。
我認為你應該使用整條曲線的控制點。 一種方法是確定貝塞爾曲線的參數方程版本 - 請參閱如何找到定義貝塞爾曲線的數學 function 。
接下來,找出參數方程中0 <= t <= 1
的哪一部分,由角度p1/6 <= ө <= pi/3
定義的部分代表,然后通過它運行該值范圍。
有一些方法可以沿着某種參數定義的曲線計算每個點,這些曲線適用於此,並且應該使虛線圖案的繪制相當直接和快速。
這個鏈接對貝塞爾曲線有很好的解釋。 它涵蓋了基本的數學原理,還提供了示例代碼。
因為貝塞爾曲線通常使用參數方程來實現,所以您只需在每個采樣點之間繪制線段。 如果您以這種方式繪制曲線,您的步長將影響曲線的平滑度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.