1

私は元々、はるかに単純な (そしてあまり役に立たない) 質問を投稿し、これを編集してより具体的にしました。

ウィキペディアのこのアニメーションは、基本的に私が達成したいことを示していますが、それを反転させて、目的地に向かって「上」(この画像) に進み、その後、より直接的に最後まで弧を描くことを望んでいます。点。ただし、私は開始点と終了点にしかアクセスできません。私が望んでいるのは、「高さ」(または幅、あなたがそれを呼びたいものは何でも)を指定して他の点を決定し、どのくらい高いかを決定できることです。アークは実際に進みます。 http://en.wikipedia.org/wiki/File:Bezier_3_big.png (担当者が少ないため画像を投稿できません)

開始点と終了点、および高さを指定して関数を呼び出し、曲線の途中にあるすべての点を返すようにしたいと考えています。

ヘルプまたは指示をいただければ幸いです。

4

5 に答える 5

2

ベジェ曲線の角度を計算し、そのさまざまなポイントをブログで決定するためのブログをまとめましたhttp://johnexalt.wordpress.com/2011/05/21/bezier-curve-angle-calculation-silverlight/

以下のコードは、任意のtの値でベジェ曲線ポイントを計算する方法を示しています(tの範囲は0〜100%で、0-1で表されます。

x =((1-t)*(1-t)* p0.X)+(2 * t *(1-t)* p1.X)+(t * t * p2.X); //このステートメントは、曲線のx座標を決定するために使用されます。

y = ((1 - t) * (1 - t) * p0.Y) + (2 * t * (1 - t) * p1.Y) + (t * t * p2.Y);
//this statement is used to determine the y coordinate of the curve. 

x = Math.Round(x, 3);
y = Math.Round(y, 3);
angle = Math.Round(Angle(xold, yold, x, y), 3);

2点間の角度を計算するのに役立つCarlosFemmerによる以前の記事がありました。http://www.carlosfemmer.com/post/2006/02/Calculate-Angle-between-2-points-using-C.aspx

于 2011-05-22T04:29:04.363 に答える
1

あなたを助けることができる.NETのメカニズムがあるようです: Graphics.DrawCurve

指定された Point 構造体の配列を介してカーディナル スプラインを描画します

また、簡単なGoogle検索でこれらが見つかりました

于 2010-10-27T14:17:16.943 に答える
1

一般性を失うことなく、終点が x 軸上にあり、始点が終点の左上にあるとします。

始点が崖の上にあり、終点が崖の下にあると想像してください。開始点から水平にボールを投げると、重力によってボールが引き下げられ、正確に終了点にぶつかると想像してください。

その曲線には、必要なプロパティがあるようです。最初は浅く、ボールが加速するにつれて垂直に向かって増加します。

投げ始めの角度を変えることで、最初のカーブを浅くすることができます。重力の強さを変えることで、最後に急勾配にすることができます。

その曲線はあなたのニーズに合っていますか? その曲線を見つけることは、かなり基本的な物理の問題です。

于 2010-10-27T14:26:49.477 に答える
0

始点と終点とは別に、円弧の「角度」または曲率を記述する必要があります。ベジエ曲線は適切ですが、通常はより長い一連の点で実装されます (円弧の曲率は線の他の点によって定義されるため)。http://en.wikipedia.org/wiki/B%C3%A9zier_curveを見てください。下部に「二次曲線」に関する情報があります。簡単なグーグル検索でいくつかの実装例が得られるに違いありません。

于 2010-10-27T14:25:25.270 に答える
0

基本的には、開始点、終了点、およびその間の別の点の 3 つの制御点を持つベジェ曲線が必要です。

始点 1 が( x1, y1 )で終点 2 が である( x2, y2 )場合、点 1 から点 2 へのベクトルは です( dx = x2-x1, dy = y2-y1 )

along0 から 1 の間の線に沿った点は( x1 + along * dx, y1 + along * dy )です。

ベクトル( -dy, dx )は線に対して直角であるため、線から少し離れたい場合aboveは、中間点は になります( x1 + along * dx - above * dy, y1 + along * dy + above * dx)

必要な種類の歪んだ曲線が見つかるまで、[long] と [above] の値を変更します。

于 2010-10-27T14:25:52.830 に答える