私は wpf のカスタム アニメーションを書いていますが、数学が苦手なのでいくつか質問があります...
From と To の 2 つの Point3D が与えられ、原点が 0,0,0 にあると仮定すると、2 つの点の間の曲線をどのように計算すればよいでしょうか?
そして、曲線を「プロット」し、その長さを知ったら(どうやってそれを行うのですか?)、線に沿った特定の距離でx、y、z座標を計算するにはどうすればよいですか?
ありがとう!
点 A から点 B への直線ベクトルを取得するには:
B - A
これは次のように変換されます。
vector.x = b.x - a.x;
vector.y = b.y - a.y;
vector.z = b.z - a.z;
長さは次のとおりです。
length = Math.Sqrt(vector.x * vector.x +
vector.y * vector.y +
vector.z * vector.z);
ベクトルに沿って特定の距離の点を取得するには、ベクトルを単位ベクトル (長さ 1) にする必要があります。
vector.x = vector.x / length;
...
次に、距離を掛けます。
vector.x = distance * vector.x;
...
これはすべてメモリからのものであるため、すぐにコンパイルできない場合があります。
CodeProject には C# 用の Vector Type があり、これで多くのことができます。
曲線が必要な場合は、次のものが必要です。
a) 必要な曲線のタイプ (円弧、スプラインなど) を定義する
b) より多くのポイント (センター、コントロール ポイントなど)
したがって、私は自分の解決策をフォローアップしたかっただけです-無限の数の曲線があるのは事実ですが-私の(言葉が不十分な)質問は、曲線上の2点間をプロットする方法でした-原点を0と仮定した最短距離、 0,0 と 2 つの 3D ポイント。私がしたことは、ポイントをデカルト座標から極座標に変換し、特定の時点で球面ポイントを計算してから、そのポイントをデカルト座標に変換することでした。誰かが私に実際の C# コードを投稿してほしい場合はお知らせください。
おそらく、曲線を他の変数のパラメトリック関数のセットとして表現したいと思うでしょう:
x = f(t)
y = g(t)
z = h(t)
where 0 <= t <= 1, and
f(0) = from.x, f(1) = to.x
g(0) = from.y, g(1) = to.y
h(0) = from.z, h(1) = to.z
任意の 2 点を結ぶ曲線は無数にあるため、f(t)、g(t)、および h(t) がどのような形式を取るかを決定するには、さらに多くの情報が必要になります。曲線に沿ってポイントを移動するには、t を 0 から 1 の間で変化させ、x、y、および z 座標を計算します。1 つの方法は、曲線が通過する (または近くにある) 一連の制御点を定義してから、パラメトリック方程式を スプライン関数で表現することです。これを行うために、曲線の弧の長さを知る必要はありません。