Линия разделения на равные части - PullRequest
3 голосов
/ 22 августа 2010

Это вопрос геометрии.

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

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

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

Ответы [ 2 ]

12 голосов
/ 22 августа 2010

Вам просто нужно средневзвешенное значение A и 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 = .25, вы на 25% пути от A до B
  • и т. Д.

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

1 голос
/ 31 августа 2010
    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. но ваш метод работает так что спасибо

...