2009-11-25 111 views
15

尋找來計算坐落在一條線上 給定距離的線的終點遠點的最快方法:給定一個起點和終點,和距離,計算點沿着一條線

void calculate_line_point(int x1, int y1, int x2, int y2, int distance, int *px, int *py) 
{ 
    //calculate a point on the line x1-y1 to x2-y2 that is distance from x2-y2 
    *px = ??? 
    *py = ??? 
} 

感謝您的答覆,不,這不是功課,只是一些黑客出於 我正常的專業領域。

這是以下建議的功能。它並不接近工作。如果我 計算點每隔5度上的 的圓作爲起點的右上90度的部分,並調用下面與圓的中心爲X2,Y2爲4的距離的函數的結束點是完全錯誤的。它們位於中心的右下方,長度與中心點一樣長。任何人有任何建議?

void calculate_line_point(int x1, int y1, int x2, int y2, int distance) 
{ 

//calculate a point on the line x1-y1 to x2-y2 that is distance from x2-y2 

    double vx = x2 - x1; // x vector 
    double vy = y2 - y1; // y vector 

    double mag = sqrt(vx*vx + vy*vy); // length 

    vx /= mag; 
    vy /= mag; 

// calculate the new vector, which is x2y2 + vxvy * (mag + distance). 

    px = (int) ((double) x2 + vx * (mag + (double)distance)); 
    py = (int) ((double) y2 + vy * (mag + (double)distance)); 

}

我發現在計算器this解決方案,但不完全理解它,任何人都可以澄清?

+4

也許你應該使用花車/雙打,因爲你會得到roundi ng錯誤。這可能是一個問題。 – Lucas

+1

盧卡斯說什麼。此外,您可能在我有錯別字時閱讀我的​​文章。如果x1y1是原點,則需要x1y1 + vxvy *(mag +距離),而不是x2y2。也就是說,從原點出發,要行進的距離_TO x2y2_加上額外的距離,使用方向X1Y1到X2Y2。雖然我認爲你可能想要重述你的問題。你到底想做什麼?現在的問題似乎更像是一箇中間問題。 – 2009-12-05 02:19:23

+0

[幾何:沿着距離另一點一定距離的線找到一個點!](http://math.stackexchange.com/questions/175896/finding-a-point-along-a-line-a-certain-距離外之另一點/ 1630886#1630886) –

回答

33

我認爲這屬於上MathOverflow,但我會回答,因爲這是你的第一篇文章。 首先,計算矢量從X1Y1到X2Y2:

float vx = x2 - x1; 
float vy = y2 - y1; 

然後計算長度:

float mag = sqrt(vx*vx + vy*vy); 

規範化矢量到單位長度:

vx /= mag; 
vy /= mag; 

最後計算新的載體,這是x2y2 + vxvy *(mag +距離)。

*px = (int)((float)x1 + vx * (mag + distance)); 
*py = (int)((float)y1 + vy * (mag + distance)); 

您可以省略一些計算結果乘以distance/mag代替。

+16

不幸的是,mathoverflow是太勢利招待這樣的問題;它屬於這裏。 –

+0

這很不幸。 – 2009-11-25 21:54:53

+1

對不起,如果它太簡單的傢伙,完全超出了我的正常領域的能力。謝謝您的幫助。 – amanda

1

這些方程是錯誤的:

px = (int) ((double) x2 + vx * (mag + (double)distance)); 

py = (int) ((double) y2 + vy * (mag + (double)distance)); 

正確的公式是:

px = (int) ((double) x2 + vx * (double)distance); 

py = (int) ((double) y2 + vy * (double)distance); 

湯姆

相關問題