Распределить пиксели по прямому отрезку
Есть какой-нибудь прямой отрезок нечётной длины, например, 15px. Как равномерно распределить по нему некоторое количество пикселей таким образом, чтобы соблюдалась симметрия и точки распределялись вплоть до краёв?
Например, как здесь:
# # # #
Или здесь:
# # # # # #
Ответы (2 шт):
Считаем, что тебе нужно расположить точки на одинаковом расстоянии.
Вопрос разбиваем на два:
Найти длину (расстояние) между результирующими точками. Это будет длина отрезка поделенная на N-1 (к примеру для трех точек 17px/2 = 8.5px, округлять тут не нужно!).
Найти угол нашего отрезка; от первой точки отрезка под нужным углом "откладываем" расстояние 8.5px (запоминаем координаты как дробное число) и ставим точку (вот тут можно округлять). От последней запомненной координаты двигаемся нужное число раз.
Можно проще: dX/(N-1) и dY/(N-1) - это будет наш шаг по X и Y (который может быть и отрицательным), а дальше как пункт 2.
Если требуется именно симметрия и разный шаг, то идем зеркально - какое расстояние от первой точки, такое же расстояние откладываем от последней точки (только знак меняем).
Алгоритм простой.
X[i] = Round(i*D/(N-1))
D = 19
N = 4
for i in range(N):
print(round(i*D / (N-1)))
0
6
13
19
Если покажется не совсем симметрично, то вторую половину можно генерировать как отражение первой