From 871a48d2c83b06d652f88ae97b5d4d0b86c01942 Mon Sep 17 00:00:00 2001 From: otya128 Date: Mon, 19 Dec 2016 23:37:49 +0900 Subject: [PATCH] Implement GCIRCLE (1) --- SMILEBASIC/graphic.d | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/SMILEBASIC/graphic.d b/SMILEBASIC/graphic.d index 288c8b6..73be101 100644 --- a/SMILEBASIC/graphic.d +++ b/SMILEBASIC/graphic.d @@ -991,9 +991,44 @@ class Graphic2 : Graphic color = convertColor(color); } - override void gcircle(int page, int x, int y, int r, uint color) + override void gcircle(int page, int x0, int y0, int r, uint color) { color = convertColor(color); + /*== http://fussy.web.fc2.com/algo/algo2-1.htm ==*/ + int x = r; + int y = 0; + int F = -2 * r + 3; + + void pset(int x, int y, int color) + { + auto wa = writeArea[petitcom.displaynum]; + int cx2 = wa.x + wa.w; + int cy2 = wa.y + wa.h; + if (x >= wa.x && y >= wa.y && x < cx2 && y < cy2) + { + buffer[y * width + x] = color; + } + } + while (x >= y) + { + pset(x0 + x, y0 + y, color); + pset(x0 - x, y0 + y, color); + pset(x0 + x, y0 - y, color); + pset(x0 - x, y0 - y, color); + pset(x0 + y, y0 + x, color); + pset(x0 - y, y0 + x, color); + pset(x0 + y, y0 - x, color); + pset(x0 - y, y0 - x, color); + if (F >= 0) + { + x--; + F -= 4 * x; + } + y++; + F += 4 * y + 2; + } + /*== http://fussy.web.fc2.com/algo/algo2-1.htm ==*/ + df = true; } override void gcircle(int page, int x, int y, int r, int startr, int endr, int flag, uint color)