1

これは、特定の線上にある均等に分散された点(開始位置から、線上の2点、水平に対する角度)を見つけて、2番目の点を超えて、一定の速度で移動するように何かを描画することです。与えられた方向。

傾きを計算することを考えています。これにより、垂直方向の動きから水平方向の動きになります。ただし、2つの異なる回線で同じ速度になることを保証する方法すらわかりません。たとえば、2つの異なるポイントのペアがある場合、図面が両方で同じ距離を移動するのに同じ時間がかかる方法です。

私が説明していることは正しい考えですか?OpenGLに役立つメソッドはありますか?

ここに画像の説明を入力してください

4

1 に答える 1

1

ベクトルを使用する必要があります。ポイントから始めて、ベクトルの方向に移動します。例えば:

typedef struct vec2 {
    float x;
    float y;
} vec2;

これは、基本的な2Dベクトルタイプを定義します。(これは3Dで機能します。azcoordを追加するだけです。)

特定の方向に一定の距離を移動するには、開始点を取得し、スカラー量でスケーリングされた方向ベクトルを追加します。このような:

typedef struct point2D {
    float x;
    float y;
} point2D; //Notice any similarities here?

point2D somePoint = { someX, someY };
vec2 someDirection = { someDirectionX, someDirectionY };
float someScale = 5.0;
point2D newPoint;

newPoint.x = somePoint.x + someScale * someDirection.x;
newPoint.y = somePoint.y + someScale * someDirection.y;

newPoint方向に5ユニットになりますsomeDirectionsomeDirectionこの方法で使用する前に正規化することをお勧めします。したがって、長さは1.0です。

void normalize (vec2* vec)
{
    float mag = sqrt(vec->x * vec->x + vec->y * vec->y);
    // TODO: Deal with mag being 0
    vec->x /= mag;
    vec->y /= mag;
}
于 2012-11-04T17:21:08.910 に答える