2012-11-04 134 views
1

這是爲了找到位於特定線上的均勻分佈的點(從起始位置,線上的2個點和與水平線成的角度),然後經過第二個點,繪製一些東西,使其以固定的方式移動給定方向的速率。如何在一條線上找到均勻分佈的點?

我在考慮計算一個斜坡,這會讓我垂直移動到水平移動。但是,我甚至不知道如何確保他們在兩條不同線路上的速度相同。例如,如果有兩對不同的點,則繪圖在兩個方向上的移動距離相同。

我正在描述正確的想法? OpenGL中有什麼方法可以幫助我嗎?

enter image description here

回答

1

您應該使用的載體。從一個點開始,沿矢量方向行進。例如:

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; 
} 
+0

我不明白,什麼是「typedef結構」? C中的東西?我很確定沒有什麼和Java相同的。 – GlassZee

+1

是的。重點是它有x和y兩個浮點值。你可以讓它成爲一個類,或者任何適合Java的東西。我認爲'sqrt'會像'Math.sqrt'那樣。我有一段時間沒有做過任何Java,但數學仍然有效。 – user1118321