現在の角度を指定して、円(または円の一部)の抽出されたセクションを表す新しいベクトル位置または宛先ベクトル位置を作成する方法を見つけようとしています。具体的には、アニメーションのフレームごとにxとyをインクリメントして、現在のベクトルから目的のベクトルに到達するために必要な合計フロート値を計算する必要があります-(この部分はすでにいくつかの背景情報で行われています)。私はすでに私のプログラムで次の情報を決定しました...ここにサンプルがあります:
- ベクトル開始:x 1.000000 y 0.000000 z 0.200000
- ベクトル終了:0.406737 y 0.913545 z 0.200000
- 外積。x 0.182709、y 0.118653、z -0.913545
- 開始角度(度):0.000000
- 度単位の終了角度:66.000000
- ベクトルの開始と終了の間の角度(度単位):33
以下の方法で位置をインクリメント/デクリメントしてみました
float distanceX = (crossProduct.x > 0) ? crossProduct.x + 0.5 : crossProduct.x - 0.5;
float distanceY = (crossProduct.y > 0) ? crossProduct.y + 0.5 : crossProduct.y - 0.5;
次に適用します:
translationX = cosf(distanceX) * 1;
translationY = sinf(distanceY) * 1;
translationX /= 10;
translationY /= 10;
取得する:translationX:0.077587 translationY:0.057994
最後に、新しい座標が次の場所に渡されます。
glTranslatef(translationX, translationY, 0.0);
このコードはある程度は機能しますが、円のさまざまな部分、つまり一部のセクターが共有象限にある象限に適用すると、問題が発生します。
すべての回答をありがとう。@MarkOblakによって提案された実装コードは 次のとおりです。
GLKVector4 normalizedVectorStart = GLKVector4Normalize(vStart);
GLKVector4 normalizedVectorEnd = GLKVector4Normalize(vEnd);
GLKVector4 vectorOffset = GLKVector4Add(normalizedVectorStart, normalizedVectorEnd);
GLKVector4 normalizedVectorOffset = GLKVector4Normalize(vectorOffset);
NSLog(@"normalizedVectorOffset x %f y %f z%f", normalizedVectorOffset.x, normalizedVectorOffset.y, normalizedVectorOffset.z);
normalizedVectorOffset x 0.532707 y 0.345944 z0.151473
float sign = GLKVector4DotProduct(normalizedVectorOffset, vStart);
float distanceFromCenter = 0.2;
sign = (sign > 0.0) ? 1.0 : -1.0;
GLKVector4 normalizedVectorOffsetWithSign = GLKVector4MultiplyScalar(normalizedVectorOffset, sign * distanceFromCenter);
NSLog(@"normalizedVectorOffset (sign) x %f y %f z%f", normalizedVectorOffsetWithSign.x, normalizedVectorOffsetWithSign.y, normalizedVectorOffsetWithSign.z);
normalizedVectorOffset(sign)x 0.106541 y 0.069189 z0.030295