Уравнение прямой линии между двумя точками

Мне нужно нарисовать линию, которая соединяет две точки.

Я делаю это на Java. Я получаю две точки в качестве параметров, и мне нужно вычислить, находится ли прямая линия между ними внутри черной фигуры.

Я разработал свое собственное решение, используя уравнение прямой линии, но мои результаты отличаются от результатов использования «профессиональных» программ (таких как GIMP или даже MS Paint).

Вот пример того, что я хочу:

замещающий текст http://img411.imageshack.us/img411/788/img1q.png< /а>

Но мой алгоритм делает это:

замещающий текст http://img267.imageshack.us/img267/1908/img2d.png< /а>

*Зеленая точка находится за пределами рисунка, и это невозможно.

Любые идеи? Кто-нибудь знает, какой код используется для этого в «профессиональных» приложениях?

Спасибо! Даниэль.

РЕДАКТИРОВАТЬ: изображения


person dafero    schedule 14.06.2010    source источник
comment
Даниэль. На этот вопрос нельзя ответить. Вы не дали нам достаточно информации, и этот вопрос, вероятно, будет закрыт. Чтобы предотвратить это, вы можете отредактировать свой вопрос и сообщить нам, какую технологию вы используете (операционную систему и средства разработки), а также сообщить нам точно чего вы пытаетесь достичь (например, как вы определяете линия, которую нужно нарисовать? как список точек?)   -  person Binary Worrier    schedule 14.06.2010
comment
Кроме того, какой алгоритм вы используете?   -  person Binary Worrier    schedule 14.06.2010


Ответы (4)


Похоже, вы усекаете вместо округления до ближайшего пикселя. Трудно увидеть на этих маленьких черных чернильных пятнах. Не могли бы вы опубликовать код?

person Peter Tillemans    schedule 14.06.2010
comment
Верно. Похоже, ваш алгоритм ожидает, что будет 2 сегмента линии вместо 3 сегментов. Ваш dx/dy правильный? (Учитывая, что вы округляете, а не усекаете). - person berkus; 14.06.2010
comment
ВАУ! Питер ты гений!!! Я использовал целые числа, и это было проблемой! Спасибо!! :D - person dafero; 14.06.2010

"Профессиональные" программы, скорее всего, используют линейный алгоритм Брезенхэма.

person Seth    schedule 14.06.2010

Посмотрите на алгоритм рисования линий Брезенхема

person Lie Ryan    schedule 14.06.2010

Прямые линии обычно рисуются с использованием алгоритма Брезенхема. Я не понял вашего мнения о том, что зеленая точка находится вне фигуры - есть отсечение, чтобы не тратить время на рисование за пределами видимой области.

person berkus    schedule 14.06.2010