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

Algorithm or code will work.

**- Chris**

Started by Sep 28 1999 12:00 PM

,
6 replies to this topic

Posted 28 September 1999 - 12:00 PM

Algorithm or code will work.

**- Chris**

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 - 07:25 AM

hi dear chris

Hope you'll be satisfied with one of the

circle drawing algos

But what is more important for you?

the speed of the drawing routine or precision

of the circle shape?

Hope you'll be satisfied with one of the

circle drawing algos

But what is more important for you?

the speed of the drawing routine or precision

of the circle shape?

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

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

Posted 28 September 1999 - 12:00 PM

**- Chris**