您應該使用的載體。從一個點開始,沿矢量方向行進。例如:
typedef struct vec2 {
float x;
float y;
} vec2;
定義了一個基本的2D矢量類型。 (這將以3D形式工作,只需添加z座標。)
要移動給定方向上的固定距離,只需取一些起點並添加按標量數量縮放的方向矢量。像這樣:
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;
}
我不明白,什麼是「typedef結構」? C中的東西?我很確定沒有什麼和Java相同的。 – GlassZee
是的。重點是它有x和y兩個浮點值。你可以讓它成爲一個類,或者任何適合Java的東西。我認爲'sqrt'會像'Math.sqrt'那樣。我有一段時間沒有做過任何Java,但數學仍然有效。 – user1118321