Как нарисовать линию с помощью алгоритма Брезенхэма в haskell - PullRequest
0 голосов
/ 25 сентября 2018

Я нашел коды в вики Haskell "Алгоритма рисования линий Брезенхэма", однако я не могу легко понять часть начала, поэтому я переписал его.Но я не могу рисовать линии, когда уклон больше 1/2.Вот часть моих кодов.

line :: Point -> Point -> [Point]
line (x0,y0) (x1,y1)
| abs (y1-y0) > abs(x1-x0)  = line (y0,x0) (y1,x1)
| x0 > x1                   = line (x1,y1) (x0,y0)
| otherwise                 = plotLine x0 y0 0
  where

И в предложении where я определяю функцию plotLine так же, как "go" в вики Haskell.Так как остальные мои коды почти такие же, как коды в вики Haskell, поэтому я думаю, что проблема с самого начала.Но я не могу понять это.Кто-нибудь может мне помочь?

Кстати, вот сайт «Алгоритма рисования линий Брезенхэма» на вики Haskell: https://wiki.haskell.org/Bresenham%27s_line_drawing_algorithm

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Действительно, похоже, что вам не хватало функции maySwitch, как это указывал Пол.Вроде «бесстыдный плагин», но позвольте мне включить мою реализацию, которую я написал два года назад, когда пытался улучшить свои навыки на Haskell: https://github.com/Lucsanszky/soft-engine/commit/801e802f498bb9c19528cd074f169bc15cbd5191#diff-59f6fe8726905567287c68be078212a0R66

Надеюсь, увидев альтернативную реализацию в несколько ином контексте, вы будете лучше понимать алгоритм.

0 голосов
/ 25 сентября 2018

Вам не хватает только функции maySwitch.Алгоритм Брезенхема работает только на линиях с уклоном от 0 до 1 (т.е. 45 градусов).Для более крутых линий вам нужно поменять координаты x и y как на входе, так и на выходе.Это то, что делает функция maySwitch.Вы только поменяли их местами на входе.

...