Patric Ljung
<5455>
· Text 470 · w6 · kommentar
1985-04-05 00:43
Ärende: Grafik i assembler
Jag hoppas att det duger om jag förklarar i Basic?
DEF FNCircle(Orx,Ory,Radie) LOCAL Orx,Ory,Radie ! Origo för x,y samt
radien
R2=Radie*Radie : Radie=Radie*.7
FOR I=0 TO Radie
X=SQR(R2-I*I)
FGPOINT Orx+X,Ory+I,Color : FGPOINT Orx+X,Ory-I
FGPOINT Orx-X,Ory-I : FGPOINT Orx-X,Ory+I
FGPOINT Orx+I,Ory+X : FGPOINT Orx+I,Ory-X
FGPOINT Orx-I,Ory-X : FGPOINT Orx-I,Ory+X
NEXT I
RETURN -1
FNEND
Som du ser så är det inte mycket uträkningar,vilket du förstår fördelen
av. Dessutom följer denna metod helt och fullo en pixel,dvs ju mindre
cirkel desto snabbare går det därför att den inte behöver räkna ut så
mycket. Problemet är detta: En pixel är inte kvadratisk,cirkeln blir
en elips. Botemedlet på detta är räkna om y koordinaten,du får då två
nya y-värden ett som motsvarar I och för X; I2=I*Adj. : X2=X*Adj.
Adj. får räknas ut med hjälp av storleken på en pixel. Det blir en liten
skillnad mellan färg- och gulskärmen.
Du kan ta och mäta längden på 100 x-koordinater resp 100 y-koor.
Ja,hur man sen räknar ut får du klara själv,det är ju inte svårt.
Jag vill dra mig till minnes att för färg blir det Adj.=.66 och för gult
blir det Adj.=.7.
Jag hoppas du förstår min enkla redovisning,du får ta och pröva,jag kan
ha glömt nåt. Förhoppningsvis skall denna metod lämpa sig bra för maskinkod
bättre än cos,sin,hehe!
Jo,man kan inte göra hur stora cirklar som helst för då blir R2 för stort
dvs över 65535 gränsen ligger någonstan vid Radie=190,men det är ju nästan
litet väl stor cirkel.
Rutinen är snabbare än cos,sin,men ändå mer "exakt",ritar aldrig samma
punkt fler gånger.
Notera även att du inte får multiplicera y-korrdinaten med tal över 1
för då blir den inte sammanhängande.
mvh TMG
Ps. Hoppas det blir nåt (snabbt,mumsmums) Den duger bra i Basic,testa!!