Задать вопрос
ptitca_zu
@ptitca_zu
Programmer. Reader. Introvert

В чем проблема с использованием алгоритма Брезенхэма?

Здравствуйте!

Есть задача: попиксельно соединить точки, заданные координатами.
Для решения использую вышеуказанный алгоритм вот так:

def print_bres(a, b):
	x1, x2, y1, y2 = a[0], b[0], a[1], b[1]
	delta_x = abs(x2 - x1)
	delta_y = abs(y2 - y1)

	sign_x = 1 if x1 < x2 else -1
	sign_y = 1 if y1 < y2 else -1	

	error = delta_x - delta_y	

	print ("%d %d" %(x2, y2))

	while (x1 != x2) or (y1 != y2):
		print ("%d %d" %(x1, y1))
		error2 = error*2
		if error2 > -delta_y:
			error -= delta_y
			x1 += sign_x
		
		if error2 < delta_x:
			error += delta_x
			y1 += sign_y


Потом применяю эту функцию к точкам, заданным списком. Вот так:

counter = 0
while counter != len(v) - 1:
	for i in range(counter, len(v)-1):
		print_bres(v[counter], v[i])
	counter += 1


Результаты загоняю в текстовый файл, который гружу в Octave, чтобы посмотреть картинку.
На картинке же получается, что каждая линия рисуется дважды, при чем разными способами...

Всю голову сломал, что не так?
  • Вопрос задан
  • 2929 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
А в Octave рисуются отдельные точки или линии между точками? Ваша реализация алгоритма, для отрезка (0, 0) - (2,3) выводит:
2 3
0 0
1 1
1 2

То есть, если задана отрисовка отрезков, то сначала отрезок (2, 3) - (0, 0), затем (0, 0) - (1, 1) и т.д.
Для нормального вывода перенесите в конец программы строку
print ("%d %d" %(x2, y2))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы