Распределить пиксели по прямому отрезку

Есть какой-нибудь прямой отрезок нечётной длины, например, 15px. Как равномерно распределить по нему некоторое количество пикселей таким образом, чтобы соблюдалась симметрия и точки распределялись вплоть до краёв?

Например, как здесь:

#   #     #   #

Или здесь:

# #   # #   # #

Ответы (2 шт):

Автор решения: Vlad Chapl

Считаем, что тебе нужно расположить точки на одинаковом расстоянии.

Вопрос разбиваем на два:

  1. Найти длину (расстояние) между результирующими точками. Это будет длина отрезка поделенная на N-1 (к примеру для трех точек 17px/2 = 8.5px, округлять тут не нужно!).

  2. Найти угол нашего отрезка; от первой точки отрезка под нужным углом "откладываем" расстояние 8.5px (запоминаем координаты как дробное число) и ставим точку (вот тут можно округлять). От последней запомненной координаты двигаемся нужное число раз.

Можно проще: dX/(N-1) и dY/(N-1) - это будет наш шаг по X и Y (который может быть и отрицательным), а дальше как пункт 2.

Если требуется именно симметрия и разный шаг, то идем зеркально - какое расстояние от первой точки, такое же расстояние откладываем от последней точки (только знак меняем).

→ Ссылка
Автор решения: MBo

Алгоритм простой.

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

Если покажется не совсем симметрично, то вторую половину можно генерировать как отражение первой

→ Ссылка