2010-08-22 2 views
2

Это вопрос геометрии.Линия разделения на равные части

У меня есть линия между двумя точками A и B и хочу разделить ее на k равных частей. Мне нужны координаты точек, которые разделяют линию между A и B.

Любая помощь очень ценится.

Большое спасибо!

ответ

11

Вам просто нужно взвешенное среднее значение A и B.

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

или, в 2-D

Cx = Ax * (1-t) + Bx * t 
Cy = Ay * (1-t) + By * t  
  • При т = 0, вы получите A.
  • When t = 1, вы получаете B.
  • Когда t = .25, вы попадаете в 25% пути от А до В
  • и т. Д.

Итак, чтобы разделить линию на k равных частей, сделайте петлю и найдите C, для t = 0/k, t = 1/k, t = 2/k, ..., t = K/k

+0

Работает как очарование, спасибо! – sebp

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 равных сегментов. И, вы уверены, что ваш код производит этот вывод? Я сомневаюсь –

Смежные вопросы