簡體   English   中英

使用貝塞爾曲線進行圓近似

[英]Circle approximations using Bezier curves

我有2個關於貝塞爾曲線的問題,並使用它們來近似圓的部分。

  1. 給定單位圓弧(1,0) - >(cos(a),sin(a)),其中0 <a <pi / 2,它將導致該弧的良好近似,以找到貝塞爾曲線的控制點p1 ,p2通過求解要求B(1/3)=(cos(a / 3),sin(a / 3))和B(2/3)=(cos(2a / 3),sin(圖2a / 3))。 (換句話說,要求貝塞爾曲線穿過弧中兩個均勻間隔的點)。

  2. 如果我們有一個仿射變換A,它將圓弧轉成橢圓弧,變換后的控制點Ap0,Ap1,Ap2,Ap3是否定義了橢圓弧的良好貝塞爾近似?

當然,p0和p3是曲線的起點和終點:(1,0)和(cos(a),sin(a))。

謝謝

這是任何橢圓弧作為三次貝塞爾曲線的一般解

誤差最大程度上取決於起始角度和結束角度的差異。 通過將角度差限制在60°,我取得了很大的成功。 也就是說,我每隔60°(或其一部分)制作一個單獨的立方體片段並將它們鏈接在一起。

你的問題基本上問“這是半圓形/橢圓弧的良好近似”。

您可能想要嘗試計算B_y(a) - sin(a) (當然,將參數化方程式設置為兩端以(-1,0)結束於a的相同值)對於曲線B(a) ,在圖形上諸如Wolfram Alpha之類的實用程序可以對其進行繪圖 ,並查看差異的大小,以及它是否適合您的目的。

如果您想要更精確和非直觀的答案,您可以計算

Integral (from 0 to K) [B_y(a) - sin(a)]^2 da / 2

其中K是兩個參數化曲線最終為(-1,0)a的值。

該積分與標准偏差的某些測量值相關/比例(稍微),並且將很好地用作數值分析。 如果它在您期望的准確度范圍內,那么您就是好的。

如果你的轉換基本上是線性的,你的第二個問題,你提到一個圓與一個橢圓的仿射變換,將給你一個與你的原始誤差成比例的誤差。 如果沒有,您可以嘗試使用轉換的雅可比行列式來查看錯誤的變化情況。

我還發現了一個很好的半圓形Bezier逼近分析,作者發現了一個非常性感的近似值:

貝齊爾半圓

鑒於:

xValueInset = Diameter * 0.05
yValueOffset = radius * 4.0 / 3.0

P0 = (0,0)
P1 = (xValueInset, yValueOffset)
P2 = (Diameter - xValueInset, yValueOffset)
P3 = (Diameter, 0)

P1和P2是你的控制點。 請注意,這近似於半圓:

B(a) = [ (d/2)*cos(a)+d/2 , (d/2)*sin(a) ]

暫無
暫無

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

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