There is a way to draw DDA "circles" (really, they are not circles, but very close to...)
The circle equation is x^2+y^2=r^2
We take derivative: (real coders don't afraid of math! )
dx/dy=1/(2*sqrt(R^2 - x^2) * (-2*x) = -x/y
(sqrt is changed to y)
Then think that dx is delta_x and dy is delta_y.
This way we can draw 1/8 of circle, other 7/8 can be founded easily by mirroring calculated points. Here is the sample code:
; Digital Difference Algorithm demonstration
.386
a segment byte public use16
assume cs:a, ds:a
org 100h
start:
mov ax,13h
int 10h
push 0A000h
pop es
next: mov di,281
sub di,word ptr R+2 ; screen addr starting
;===== 8< ===========================================
xor ecx,ecx ; y starting
mov ebx,R ; x starting
mov bp,bx
circ: mov al,color
mov byte ptr es:[di],al
mov eax,ecx
cdq
shld edx,eax,16
div ebx ; delta x
sub ebx,eax ; next x
sub bp,ax ; looking 4 CF
adc di,320
add ecx,10000h
cmp ecx,ebx
jb circ
;===== 8< ===========================================
dec color
sub R,17935 ; just a number
ja next
xor ah,ah
int 16h
mov ax,3
int 10h
retn
R dd 281*65536
color db ?
a ends
end start
-------------------------------------------
This example was taken from DemoDesign FAQ and translated to english by me
------------------
FlyFire/CodeX
http://codexorg.webjump.com