2013-11-30 3 views
0

Предполагая, что у меня есть линия с координатами x1, y1 и x2, y2, и я знаю длину гипотенузы, соединяющей эти две точки (таким образом, также зная угол поворота линии через триггер), если линия равна 1 пикселю насколько я могу найти каждый пиксель на этой линии и сохранить его в списке?Как я могу найти каждый пиксель на линии с pygame?

Сначала я предложил простой векторный расчет, указав x1, y1 и выполнив строку/z * math.cos (angle), line/z * math.sin (angle) (для x1 и y1 соответственно), пока не достигнут точка x2, y2, но проблема с этим заключается в нахождении переменной «z», так что каждый пиксель покрыт без дублирующих пикселей.

Так что было бы лучшим способом расчета этого?

+0

Используя 'float', вы должны получить все очки. Используя 'int', вы всегда получаете дубликаты -' int (0.1) == int (0.2) == int (0.3) == etc.'. Поэтому вам нужно проверить, находится ли точка в вашем списке – furas

ответ

0

Используя float, вы должны получить все очки без дублирования - но вам нужно int.

Использование int Вы всегда получаете дубликаты - int(0.1) == int(0.2) == int(0.3) == etc..

Итак, вы должны проверить, находится ли точка в вашем списке.

0

Это то, что Bresenham's line algorithm для. Чтобы правильно использовать его, вы должны сначала выяснить, какая из них ваша основная ось (длина линии больше Y или X). Затем для каждого целого местоположения вдоль главной оси вы вычисляете, остается ли значение для вспомогательной оси одинаковым или увеличивается (+1 или -1, в зависимости от наклона).

Существует несколько пояснений к этому вопросу - this one находится в Python.

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