2010-08-22 48 views
2

這是一個幾何問題。分成等份的線

我在兩點A和B之間有一條直線,並且希望將它分成k個相等的部分。我需要劃分A和B之間的線的點的座標。

任何幫助都非常感謝。

非常感謝!

回答

11

你只需要一個的加權平均值和B.

C(t) = A * (1-t) + B * t 

,或者在2-d

Cx = Ax * (1-t) + Bx * t 
Cy = Ay * (1-t) + By * t  
  • T = 0時,你會得到A.
  • 當t = 1,你得到B.
  • 當t = 0.25時,你從A點到B點的25%點

因此,將線劃分爲k個相等部分,做一個循環,找到C,對於t = 0/k,t = 1/k,t = 2/k,...,t = K/K

+0

工程就像一個魅力,謝謝! – sebp 2010-08-22 18:33:02

1
for(int i=0;i<38;i++) 
    { 
     Points[i].x = m_Pos.x * (1 - (i/38.0)) + m_To.x * (i/38.0); 
     Points[i].y = m_Pos.y * (1 - (i/38.0)) + m_To.y * (i/38.0); 
     if(i == 0 || i == 37 || i == 19) dbg_msg("CLight","(%d)\nPos(%f,%f)\nTo(%f,%f)\nPoint(%f,%f)",i,m_Pos.x,m_Pos.y,m_To.x,m_To.y,Points[i].x,Points[i].y); 
    } 

打印:

[4c7cba40][CLight]: (0) 
Pos(3376.000000,1808.000000) 
To(3400.851563,1726.714111) 
Point(3376.000000,1808.000000) 
[4c7cba40][CLight]: (19) 
Pos(3376.000000,1808.000000) 
To(3400.851563,1726.714111) 
Point(3388.425781,1767.357056) 
[4c7cba40][CLight]: (37) 
Pos(3376.000000,1808.000000) 
To(3400.851563,1726.714111) 
Point(3400.851563,1726.714111) 

看起來很好,但隨後我的程序不起作用:d。 但你的方法很有效,所以謝謝

+0

您可能想在循環中使用「i <= 38」。這將給你39分,你的線分成38個相同的分段。而且,你確定你的代碼產生了這個輸出嗎?我很懷疑 – 2010-08-31 15:00:04