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:
Binary file not shown.
@@ -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) {
|
export fn line(x1: f32, y1: f32, x2: f32, y2: f32, col: i32) {
|
||||||
let swapTmp: f32;
|
let swapTmp: f32;
|
||||||
if x1 > x2 {
|
if x1 > x2 {
|
||||||
|
|||||||
Reference in New Issue
Block a user