mirror of
https://github.com/irmen/prog8.git
synced 2025-12-19 20:17:17 +00:00
fix monogfx.disc() inaccurracy
This commit is contained in:
@@ -1,42 +1,16 @@
|
||||
%import graphics
|
||||
%import monogfx
|
||||
|
||||
main {
|
||||
sub start() {
|
||||
graphics.enable_bitmap_mode()
|
||||
monogfx.lores()
|
||||
|
||||
uword radius
|
||||
for radius in 1 to 10 {
|
||||
graphics.circle(30*radius, 100, lsb(radius))
|
||||
graphics.disc(30*radius, 130, lsb(radius))
|
||||
mydisc(30*radius, 160, lsb(radius))
|
||||
monogfx.circle(30*radius, 100, lsb(radius), true)
|
||||
monogfx.disc(30*radius, 130, lsb(radius), true)
|
||||
monogfx.safe_disc(30*radius, 160, lsb(radius), true)
|
||||
}
|
||||
|
||||
repeat {}
|
||||
}
|
||||
|
||||
sub mydisc(uword xcenter, ubyte ycenter, ubyte radius) {
|
||||
; Warning: NO BOUNDS CHECKS. Make sure circle fits in the screen.
|
||||
; Midpoint algorithm.
|
||||
if radius==0
|
||||
return
|
||||
ubyte @zp ploty
|
||||
ubyte @zp yy = 0
|
||||
word @zp decisionOver2 = (1 as word)-radius
|
||||
|
||||
while radius>=yy {
|
||||
graphics.horizontal_line(xcenter-radius, ycenter+yy, radius*2+1)
|
||||
graphics.horizontal_line(xcenter-radius, ycenter-yy, radius*2+1)
|
||||
graphics.horizontal_line(xcenter-yy, ycenter+radius, yy*2+1)
|
||||
graphics.horizontal_line(xcenter-yy, ycenter-radius, yy*2+1)
|
||||
|
||||
yy++
|
||||
if decisionOver2>=0 {
|
||||
radius--
|
||||
decisionOver2 -= radius*$0002
|
||||
}
|
||||
decisionOver2 += yy*$0002
|
||||
decisionOver2++
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user