**Does anybody know of a fairly fast way to draw cirlces in DX?**

Algorithm or code will work.

**- Chris**

Started by bit, Sep 28 1999 12:00 PM

6 replies to this topic

Posted 27 September 1999 - 08:15 AM

First pick a point where you'll draw around a circle.

Then there are 2 ways:

-Using cosine and sine

calculate the pixels in 360 degrees (for a smooth circle) and draw lines between them.

Then there are 2 ways:

-Using cosine and sine

calculate the pixels in 360 degrees (for a smooth circle) and draw lines between them.

-Using square root

Try drawing sqrt(9) in a graph and you know what I mean.

If you want examples E-mail me at bosjoh@fcmail.com.

Posted 28 September 1999 - 01:56 AM

hi,

It's simple there is an API function

called Ellipse which gets a HDC and some

parameters and draws a circle or ellipse,

there is also a DX function which returns

a HDC to a surface !! So it's simple to

draw circles in DX surfaces, Get a HDC to

your DX surface and pass it to the Ellipse

API function...

It's simple there is an API function

called Ellipse which gets a HDC and some

parameters and draws a circle or ellipse,

there is also a DX function which returns

a HDC to a surface !! So it's simple to

draw circles in DX surfaces, Get a HDC to

your DX surface and pass it to the Ellipse

API function...

If you want to draw with your own routine,

there's a fast circle drawing algo called

Middle Point Algorithm which uses only

addition to draw a circle (no mul or divs).

------------------

--Ali Seyedof (It's all dark !)

Posted 28 September 1999 - 03:47 AM

I finally settled on mid-point ... but I am still not very satisfied with the circle I get. Just hoping there was something out there that I hadn't found, that would work better.

**- Chris**

Posted 28 September 1999 - 05:37 AM

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

Posted 28 September 1999 - 12:00 PM

**- Chris**