mirror of
https://github.com/exoticorn/microw8.git
synced 2026-01-20 11:16:42 +01:00
implement circle_outline function
This commit is contained in:
@@ -136,6 +136,58 @@ export fn circle(cx: f32, cy: f32, radius: f32, col: i32) {
|
||||
}
|
||||
}
|
||||
|
||||
export fn circle_outline(cx: f32, cy: f32, radius: f32, col: i32) {
|
||||
let prev_w: f32;
|
||||
let y = clamp(nearest(cy - radius) as i32, -1, 241);
|
||||
let maxY = clamp(nearest(cy + radius) as i32, -1, 241);
|
||||
|
||||
loop lines {
|
||||
let lazy dy = y as f32 - cy + 0.5;
|
||||
let inline q = radius * radius - dy * dy;
|
||||
let w = sqrt(max(0 as f32, q));
|
||||
|
||||
let xlp = nearest(cx - prev_w) as i32;
|
||||
let xl = nearest(cx - w) as i32;
|
||||
let xrp = nearest(cx + prev_w) as i32;
|
||||
let xr = nearest(cx + w) as i32;
|
||||
if w >= prev_w {
|
||||
if xl < xlp {
|
||||
hline(xl, xlp, y, col);
|
||||
} else {
|
||||
if xl < xr {
|
||||
setPixel(xl, y, col);
|
||||
}
|
||||
}
|
||||
if xr > xrp {
|
||||
hline(xrp, xr, y, col);
|
||||
} else {
|
||||
if xl < xr {
|
||||
setPixel(xr - 1, y, col);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if xl > xlp {
|
||||
hline(xlp, xl, y - 1, col);
|
||||
} else {
|
||||
if xlp < xrp {
|
||||
setPixel(xlp, y - 1, col);
|
||||
}
|
||||
}
|
||||
if xr < xrp {
|
||||
hline(xr, xrp, y - 1, col);
|
||||
} else {
|
||||
if xlp < xrp {
|
||||
setPixel(xrp - 1, y - 1, col);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
y = y + 1;
|
||||
prev_w = w;
|
||||
branch_if y <= maxY: lines;
|
||||
}
|
||||
}
|
||||
|
||||
export fn line(x1: f32, y1: f32, x2: f32, y2: f32, col: i32) {
|
||||
let swapTmp: f32;
|
||||
if x1 > x2 {
|
||||
|
||||
Reference in New Issue
Block a user