ベクトルを使用する必要があります。ポイントから始めて、ベクトルの方向に移動します。例えば:
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ユニットになりますsomeDirection
。someDirection
この方法で使用する前に正規化することをお勧めします。したがって、長さは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;
}