2017-01-11 15 views
1

enter image description here開始点p0が(0,0)で、終了点p4が(100,0)であるベジェ曲線があるとします。今は基本的にはまだカーブのないラインになります。次に、与えられた角度に基づいて2つの欠けているコントロールポイント(p1 p2)を計算したいと仮定します。これを達成する最良の方法は何ですか?与えられた角度のベジェ曲線制御点を計算する

は私が望んでいたと仮定します。このような何か:私はそれがある種の三角形を形成して制御点の位置によって意味

https://1.bp.blogspot.com/_W3ZUYKgeEpk/SDcAerq1xkI/AAAAAAAAAAc/W9OnovkzgPI/s400/RectanglularControlPoly.jpg

その可能ならば、私は思っていた理由、それはです。

+1

これは数学の問題です。 [stackexchange](http://math.stackexchange.com)に投稿できます –

+0

どの角度ですか?ポイント/ラインの間の角度を指定できますか? 1の角度または2? –

+0

@ S.Serpは、基本的に両方の制御点で45度の角度を言うことができるので、ちょうど1つの角度です。 – Asperger

答えて

1

与えられた角度のベジェ点を通過するコントロール点は、その角度の接線上にあります。

得曲げがより柔らかいが遠いコントロールポイントが選択されるので、同じ角度と異なる曲率を有する多くの異なる解決策が存在するであろう..

enter image description here

は均等でコントロールポイントを見つけるために2つのベジェ点のソフト曲率は、2つの接線の交点を見つけるだけです!両方のセグメントの共通の制御点として交差点を使用します。つまり、C1 = C2です。全体的な形状のものを最適化するためにも、隣接するポイントを見てする必要があることをあなたが横切る対称からの偏差を維持するために必要な対称カーブの任意の並べ替え、などすなわち、50%、10%...

場合注

;一般に、提供されたGDI関数は良い仕事をします。シェイプを制御するためにベジェ点を追加するだけの方法があります。もちろん、コントロールポイントの完全なセットを使用することは、最も経済的な解決策です。

更新:this interesting postには、円(橙色)を近似する方法の例が追加されています。

ショートバージョン:正確な解決策は実際にはありませんが、1/4円に最適なのは、コントロールポイントを交差点の〜0.55%に移動することです。 (d=r*4*(sqrt(2)-1)/3)。時々代わりのところで..コードポイントとコントロールポイントのLabelsを使用

..

private void button_Click(object sender, EventArgs e) 
{ 
    int w = Math.Abs(P2.Left - P1.Left); 
    int h = Math.Abs(P2.Top - P1.Top); 
    C2.Left = (int) (P2.Left + w * 0.5523f); 
    C2.Top = P2.Top; 
    C1.Left = P1.Left; 
    C1.Top = (int) (P1.Top + h * 0.5523f); 
    C1.Parent.Invalidate(); 
} 

8セグメント溶液をさらに近い近似するために使用される4セグメント溶液を使用して:に楕円/円を追加GraphicsPathは、ちょうどそのように近似されるように見えるベジェ曲線を作成します。

+0

完璧なサークルが欲しいのですが?または、円の四分の一と言うことができます。これをどのように計算するのですか?私は実際に両方のコントロールポイントが対称になるように物を計算しようとしています。その結果、偶数の曲線になります(私がそれを呼び出すことができれば)。 – Asperger

+0

私はちょうどあなたが言った読んで:2つの接線の交差。面白い。あなたはそのことについて詳しく説明できますか?私はもちろんそれはGoogleのことができますが、あなたがそれを言及して以来、クールだ。 – Asperger

+0

四分の一円の場合、コントロールポイントは接線の交差点から約半分後ろに移動する必要があります。そうしないと、結果が尖って見えます。もちろん、通常の方法は、楕円形のセグメントのDrawArcを使用することです。私は正確なソリューションatmのための数学を提供することはできません..任意の種類のsymmwtricalソリューションは、交差対称、つまり50% 10%など。全体的な形状を最適化するためには、隣接点を見る必要があることに注意してください。一般に、提供される関数は良い仕事をします。ベジェ点を追加して制御するだけで十分です。 – TaW

関連する問題