42 lines
544 B
Go
42 lines
544 B
Go
package main
|
|
|
|
import (
|
|
"math"
|
|
)
|
|
|
|
func Bresenham2(fb *Framebuffer, color uint, x0 int, y0 int, x1 int, y1 int) {
|
|
dx := int(math.Abs(float64(x1 - x0)))
|
|
sx := -1
|
|
if x0 < x1 {
|
|
sx = 1
|
|
}
|
|
dy := -int(math.Abs(float64(y1 - y0)))
|
|
sy := -1
|
|
if y0 < y1 {
|
|
sy = 1
|
|
}
|
|
err := dx + dy
|
|
|
|
for {
|
|
fb.SetSafe(uint(x0), uint(y0), color)
|
|
if x0 == x1 && y0 == y1 {
|
|
break
|
|
}
|
|
e2 := 2 * err
|
|
if e2 >= dy {
|
|
if x0 == x1 {
|
|
break
|
|
}
|
|
err += dy
|
|
x0 += sx
|
|
}
|
|
if e2 <= dx {
|
|
if y0 == y1 {
|
|
break
|
|
}
|
|
err += dx
|
|
y0 += sy
|
|
}
|
|
}
|
|
}
|