簡體   English   中英

如何在Haskell中使用Bresenham算法繪制一條線

[英]How to draw a line with Bresenham's algorithm in haskell

我在“ Bresenham的線條繪制算法”的Haskell Wiki中找到了代碼,但是,我不能輕易理解開頭的部分,因此我重寫了它。 但是當斜率超過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函數,就像Haskell Wiki中的“ go”一樣。 由於我的其余代碼與Haskell Wiki中的代碼幾乎相同,因此我認為問題是從頭開始的。 但我無法弄清楚。 誰能幫我?

順便說一下,這是Haskell Wiki上“ Bresenham的線條繪制算法”的網站: https : //wiki.haskell.org/Bresenham%27s_line_drawing_algorithm

您缺少的是maySwitch函數。 Bresenham的算法僅適用於斜率介於0到1(即45度)之間的線上。 對於較陡的線,您需要在輸入和輸出上交換x和y坐標。 這就是maySwitch函數的作用。 您僅在輸入上交換了它們。

確實,就像Paul指出的那樣,您似乎缺少了maySwitch函數。 有點“無恥的插件”,但讓我包括我兩年前試圖提高Haskell技能時編寫的我的實現: https : //github.com/Lucsanszky/soft-engine/commit/801e802f498bb9c19528cd074f169bc15cbd5191#diff-59f6fe8726905567287c68be078212a0R66

希望通過在稍有不同的上下文中看到替代實現,您將對算法有更好的了解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM