ベジエ曲線を使用して、作成中のプログラムで曲線をプロットしています。5点あります。これは、作成しようとしている曲線の大まかなスケッチです。A、B、C、D を通る曲線を作ろうとしています。ただし、C は明確な点ではなく、曲線がフレンチ カーブのように見えるように通過する必要がある場所の提案です。C は E から 45 度で出ます。
それらのポイントを通過するフランスの曲線を近似する方法について誰か提案がありますか?
ベジエ曲線を使用して、作成中のプログラムで曲線をプロットしています。5点あります。これは、作成しようとしている曲線の大まかなスケッチです。A、B、C、D を通る曲線を作ろうとしています。ただし、C は明確な点ではなく、曲線がフレンチ カーブのように見えるように通過する必要がある場所の提案です。C は E から 45 度で出ます。
それらのポイントを通過するフランスの曲線を近似する方法について誰か提案がありますか?
Cubic Bezier を使用する必要があります。Cubic Bezier は 4 つのポイントで定義されますが、中央の 2 つのポイントを通過せず、 Bezier のベクトルを指定するだけです。残念なことに、4 点を「通過」できる Cubic Bezier 曲線は無数にあります。
Don Lancaster はこれに関する文書(pdf) を書いています。これは、彼が使用するアルゴリズムに関する非常に興味深い詳細につながります. それはあなたが使用しているとは思えない追記にありますが、少なくともプリンシパルはそこにあります。
これは、C# でやろうとしていることを行うためのライブラリを作成した CodeProjectに関する記事です。
ベジェ曲線は指定された最初と最後の制御点を通過し、内部の制御点が形状を決定します。ABCDEを使用して曲線を作成すると、点Cを通過しません。ただし、2つの異なる曲線に分割して、Cの前後に制御点を導入すると、ABB'CとCC'DEになります。B'を作成します。曲線が一次連続性を持つように、CとC'は同一線上にあります。
同一線上にない 3 つの点 (A、B、D) があれば、それらを結ぶ円弧を描くことができます。
任意の 3 つまたは 4 つのポイントを指定すると、それらを結ぶベジエ曲線を作成できます。(カーブをきれいに見せるためだけにポイント C を追加する必要はないかもしれませんが、必要に応じて追加することもできます。)
これを行う正確な方法は、使用しているグラフィック ライブラリによって異なります。では、どのライブラリを使用していますか?
上で述べたことはすべて真実ですが、最近見つけた小さなトリックがあります.ベジエ曲線は制御点を通過しません.p0とpn(最初と最後)を除きます.しかし、ベジエを構築できる式があります.与えられた点を通る曲線.新しい「虚数」制御点を計算することによってそれを行います.悲しいことに、私は2次曲線の式しか持っていませんが、それは一般化できると確信しています.ここでは: NEWPOINT(X)=P1(x)* 2-(P0(x)+P2(x))/2 Y も同様
この式は、「新しい」P1 ポイント (p0 と p2 が開始点と終了点であるため) を与え、曲線は「元の」P1 を通過します。