2012-02-28 14 views
9

Convert a quadratic bezier to a cubic?を見ると、プログラミングの教師がいつも数学がとても重要だと私に言った理由を最後に理解することができます。悲しいことに、私は聞いていませんでした。2次曲線を3次曲線に変換する

二次曲線を三次曲線に変換するために、より具体的な、たとえばコンピュータ言語-y-公式を提供できる人はいますか?可能な丸め誤差があることを理解してください。これは問題ありません。同じままに

StartX, StartY 
ControlX, ControlY 
EndX, EndY 

そしてstartxを、startYととENDXを希望、ENDYが、今三次曲線のControl2Y、Control1X、Control1YとControl2Xを持っていた:

は、変数によって表されるクワッド曲線を考えます。

はControl1YとControl2Yを計算するのに使用したのと同じ基本的な機能を持つこと...

Control1X = StartX + (.66 * (ControlX - StartX)) 
Control2X = EndX + (.66 * (ControlX - EndX)) 

ですか?

+0

http://stackoverflow.com/questions/3162645/convert-a-quadratic-bezier-to-a-cubicも参照してください。 – lhf

答えて

7

0.66の代わりに2.0/3.0を使用してください。様々な種類の混合複雑な経路を変換するとき

Control1 = Start 
Control2 = End 

これは便利であることができる:

0

あなたはその線分を使用して立方ベジェ曲線にも変換可能である

Control1 = (Start + 2 * Control)/3 
Control2 = (End + 2 * Control)/3 

ノートを使用して、最も丸め誤差を回避します曲線の(線形、二次、立方体)

楕円弧を立方体に変換するための基本的な変換もあります(軽微な目立たない誤差楕円が四角形の場合は、最初に楕円を2つの直交軸上で切断するか、楕円が円であれば中心を通る任意の直交軸上で切断し、次に各弧を表す必要があります。楕円が楕円形の場合、2つの焦点は同じ点、つまり円の中心で混同されます)。

多くのSVGレンダリングでは、2つの主軸が通過する点だけでなく、2つの対角軸についても正確な位置を得るために、オクタントに追加の分割を追加することでこれを行います(楕円(楕円は円ではなく、小さな軸に沿った線形変換で平らになった円として同化する、同じ計算をする)、オクタントも非常に正確に配置されているため(cos(pi/4)= sin(π/ 4)= sqrt(2)/ 2〜0.71であり、この追加の分割は円の45度の対角線を横切る点の接線の正確なレンダリングを可能にするため):完全な楕円は8つの立方体の円弧(楕円上の8点と16個の制御点):これらの楕円弧と立方体円弧の違いに気付かないでしょう(tを使うアルゴリズムを作ることができますベジェを線分のリストに分割するときに計算される同じ「平坦化誤差」があり、線分のために古典的な高速Bresenhamアルゴリズムを使用して描画されます)。任意のパスの変換は、このような


あなたはこれらのパスをして、「ストローク」に変換する必要があり、特にとき、与えられた距離でパスから他の曲線、「バッファ」の顕著な曲線を導出したい場合に便利です「内側」と「外側」の2つのカーブを計算してからミッター/ハッチング/四角/丸みのあるコーナーを変換する方法に集中し、その後、長い距離のマイターを便利な距離にカットする必要があります( "マイターリミット "と"ストローク幅 "を掛け合わせたもの)。2つの円弧の代わりに、二つのセグメント(これはかわいい地理マップを描画するために有用である)との間の角があるとき

より高度なレンダラはまた、セグメントを混合する任意のパスを変換...

を接線円で表さmitersを使用します、楕円形やベジエ円弧のみをキュービックにすることは、ズームイン時に過剰な欠陥を表示することなく正確な画像を計算するために必要なステップです。これは、「ストローク」バッファーが何らかの効果(ダッシュの計算など)を取らなければならない場合、半透明のピクセルまたはサブピクセルでレンダリングされたストロークを滑らかにします(スムージングは​​、すべてが線分にフラット化されたときにのみ計算が簡単です。また、cubのみを含むパスを管理するだけであれば簡単に開発できます) icベジエ:必要に応じて簡単に並列化でき、ハードウェアで高速化できます)。