Я пытаюсь нарисовать кривую между двумя точками, в частности, я оставляю картину того, что я хочу:
Это изображение было взято из этого PDF на страница 10.
Я понимаю, что применяется концепция Bresenham algorithm
но не знаю, как реализовать концепцию для рисования кривой.
На страница 11 из PDF pseudocode algorithm
показано, но не понимаю понятие «ошибка«для реализации. Пожалуйста, если кто-нибудь может помочь мне понять это. Я работаю с C ++ и OpenGL.
псевдокод:
set up x, y to x0, y0
set up error variable exy for P(x0+1,y0+1)
loop
set pixel x, y
if ex + exy > 0 then increment x, sub difference error
if ey + exy < 0 then increment y, add difference error
loop until end pixel
Спасибо вам всем.
Эта статья, которую вы цитировали, рисует кривые из низкого уровня абстракции, чтобы попытаться повысить производительность. Обычно, когда вы идете рисовать кривые, вы должны использовать более высокую абстракцию, такую как Безье с Алгоритм де кастеляу который упоминает ваш PDF на стр. 22. Я сделал это на C ++, и это совсем не сложно. Помакс имеет потрясающий гид это хорошо объясняет Вы в основном делите свою кривую, пока много прямых линий не выглядят изогнутыми. Затем вы рисуете все прямые линии.
Идея этого алгоритма состоит в том, что вы определяете свою кривую с помощью функции f(x, y) = 0
, То есть функция f(x, y)
должен вернуть ноль для (x, y)
координаты любой точки, которая лежит на кривой. Для любой точки, которая не лежит на кривой, функция должна возвращать ненулевое значение, величина и знак которого должны указывать расстояние и направление, соответственно, данной точки от кривой. Это значение называется «ошибка».
Таким образом, значение «ошибки» для любого пикселя можно вычислить, просто вызвав f(x, y)
для (x, y)
координаты рассматриваемого пикселя.