How to resolve the algorithm Bitmap/Bresenham's line algorithm step by step in the Clojure programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Bitmap/Bresenham's line algorithm step by step in the Clojure programming language

Table of Contents

Problem Statement

Using the data storage type defined on the Bitmap page for raster graphics images, draw a line given two points with Bresenham's line algorithm.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Bitmap/Bresenham's line algorithm step by step in the Clojure programming language

Source code in the clojure programming language

(defn draw-line
  "Draw a line from x1,y1 to x2,y2 using Bresenham's, to a java BufferedImage in the colour of pixel." 
  [buffer x1 y1 x2 y2 pixel]
  (let [dist-x (Math/abs (- x1 x2))
   dist-y (Math/abs (- y1 y2))
   steep (> dist-y dist-x)]
    (let [[x1 y1 x2 y2] (if steep [y1 x1 y2 x2] [x1 y1 x2 y2])]
      (let [[x1 y1 x2 y2] (if (> x1 x2) [x2 y2 x1 y1] [x1 y1 x2 y2])]
  (let  [delta-x (- x2 x1)
     delta-y (Math/abs (- y1 y2))
     y-step (if (< y1 y2) 1 -1)]

    (let [plot (if steep 
       #(.setRGB buffer (int %1) (int %2) pixel) 
       #(.setRGB buffer (int %2) (int %1) pixel))]
          
      (loop [x x1 y y1 error (Math/floor (/ delta-x 2)) ]
        (plot x y)
        (if (< x x2)
    ; Rather then rebind error, test that it is less than delta-y rather than zero
    (if (< error delta-y) 
      (recur (inc x) (+ y y-step) (+ error (- delta-x delta-y)))
      (recur (inc x) y            (- error delta-y)))))))))))


  

You may also check:How to resolve the algorithm Faulhaber's formula step by step in the Visual Basic .NET programming language
You may also check:How to resolve the algorithm Ordered partitions step by step in the Java programming language
You may also check:How to resolve the algorithm Remove lines from a file step by step in the C++ programming language
You may also check:How to resolve the algorithm Magic 8-ball step by step in the AWK programming language
You may also check:How to resolve the algorithm Integer comparison step by step in the ALGOL W programming language