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
|
||
|
}
|
||
|
}
|
||
|
}
|