home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C!T ROM 2
/
ctrom_ii_b.zip
/
ctrom_ii_b
/
PROGRAM
/
PASCAL
/
PARADIS1
/
FASTCIR1.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1992-03-28
|
3KB
|
159 lines
(5730) Mon 23 Mar 92 23:53
By: Joy Mukherjee
To: Dale Frakes
Re: Integer Graphics 1/2
St:
---------------------------------------------------------------------------
@MSGID: 1:387/255 77b8a9be
DF>Does anyone know of similar (no floating point math) algorythms for
DF>drawind arcs and circles?
Circles, yes. Posted by John Richardson.
{
Bresenham's circle drawing algro doesn't use any trig functions -
sin/cos/tan, etc.
Here is a Pascal 6.0 implementation of Bresenham's circle drawing algro
that I wrote in lowlevel assembler. (It's fast too!)
}
{ (C) Copyright 1991 by John Richardson }
{ Released into the public domain }
{ Fast circle drawing routine for Turbo Pascal v6.0. }
{ Several spots can still use optimizations. }
Program CircleDraw;
Uses Crt;
Const
VidBase:Pointer = Ptr($A000,0000);
Var I:Integer;
Procedure CircPnt(X,Y,Xc,Yc,Color:Integer; Page:Pointer); Assembler;
Var XXCp,XXCm,XYCp,XYCm,YXCp,YXCm,YYCp,YYCm:Integer;
ASM
MOV CX,X { store in registers for faster access }
MOV DX,Y { instead of accessing memory each time }
MOV BX,XC { store XC in BX - cut down on mem access }
MOV AX,BX { XXCp := XC+X; }
ADD AX,CX
MOV XXCp,AX
MOV AX,BX { XXCm := XC-X; }
SUB AX,CX
MOV XXCm,AX
MOV AX,BX { XYCp := XC+Y; }
ADD AX,DX
MOV XYCp,AX
MOV AX,BX { XYCm := XC-Y; }
SUB AX,DX
MOV XYCm,AX
MOV BX,YC { store YC in BX - cut down on mem access }
MOV AX,BX { YXCp := YC+X; }
ADD AX,CX
MOV YXCp,AX
MOV AX,BX { YXCm := YC-X; }
SUB AX,CX
MOV YXCm,AX
MOV AX,BX { YYCp := YC+Y; }
ADD AX,DX
MOV YYCp,AX
MOV AX,BX { YYCm := YC-Y; }
SUB AX,DX
MOV YYCm,AX
MOV BX,Color
MOV DX,XXCp
LES DI,Page
ADD DI,DX
MOV AX,YYCp
XCHG AL,AH
ADD DI,AX
SHR AX,1
SHR AX,1
ADD DI,AX
MOV AX,BX
STOSB
SUB DI,DI
ADD DI,DX
MOV AX,YYCm
XCHG AL,AH
ADD DI,AX
SHR AX,1
SHR AX,1
ADD DI,AX
MOV AX,BX
STOSB
MOV DX,XXCm
SUB DI,DI
ADD DI,DX
MOV AX,YYCp
XCHG AL,AH
ADD DI,AX
SHR AX,1
SHR AX,1
ADD DI,AX
MOV AX,BX
STOSB { Plot pixel }
SUB DI,DI
ADD DI,DX
MOV AX,YYCm
XCHG AL,AH
ADD DI,AX
SHR AX,1
SHR AX,1
ADD DI,AX
MOV AX,BX
STOSB { Plot pixel }
MOV DX,XYCp
SUB DI,DI
ADD DI,DX
MOV AX,YXCp
XCHG AL,AH
ADD DI,AX
SHR AX,1
SHR AX,1
ADD DI,AX
MOV AX,BX
STOSB { Plot pixel }
SUB DI,DI
ADD DI,DX
MOV AX,YXCm
XCHG AL,AH
ADD DI,AX
SHR AX,1
SHR AX,1
ADD DI,AX
MOV AX,BX
STOSB { Plot pixel }
MOV DX,XYCm
>>> Continued to next message
* SLMR 2.1a # * I've seen the truth, and it makes no sense.
--- MsgToss 2.0c! (r)
* Origin: Nul 512-615-NUL1 HST/V32b,615-NUL2, NUL3, 1.2Gig (1:387/255)
@PATH: 387/255 823 170/400 512/0 1007