A wkleiłem wcześniej gotowy kod.... co prawda był bez numerów linii i w Turbo Basicu.... ale działał.
Przepisałem więc do zwykłego basica i też działa:
10 GRAPHICS 8:COLOR 1
20 INPUT R
30 XCIRCLE=150:YCIRCLE=100
40 REM
50 XC=0:YC=R
60 FX=0:FY=8*R:FS=4*R+3
70 REM GLOWNA PETLA
80 GOSUB 200
90 XC=XC+1:FX=FX+8
100 IF FS>0 THEN FS=FS-FX-4:GOTO 120
110 YC=YC-1:FY=FY-8:FS=FS-FX-4+FY
120 IF FX<=FY THEN GOTO 80
130 END
199 REM PROCEDURA SPLOT
200 PLOT XCIRCLE+XC,YCIRCLE+YC
210 PLOT XCIRCLE+XC,YCIRCLE-YC
220 PLOT XCIRCLE-XC,YCIRCLE-YC
230 PLOT XCIRCLE-XC,YCIRCLE+YC
240 PLOT XCIRCLE+YC,YCIRCLE+XC
250 PLOT XCIRCLE+YC,YCIRCLE-XC
260 PLOT XCIRCLE-YC,YCIRCLE-XC
270 PLOT XCIRCLE-YC,YCIRCLE+XC
280 RETURN
Wszystko liczy się tutaj na liczbach całkowitych, nie ma sinusów, dzieleń itp., mnożenia tylko przez potęgi 2, więc łatwo przerobić na assembler można. A do tego szybkie jest.
Przypomnij sobie twierdzenie Pitagorasa, załóż, że przeciwprostokątna się nie zmienia (promień), zmieniaj jedną z przyprostokątnych od 0 do promienia (współrzędna X np.) i wyliczaj drugą (czyli Y)..... i masz narysowaną 1/4 okręgu. W zasadzie to przyprostokątna może się zmieniać tylko do zrównania się z drugą przyprostokątną - stąd końcowy warunek pętli (bo ta ćwiartka jest także symetryczna i wystarczy odpowiednio stawiać dwa punkty jednocześnie) i masz gotowy algorytm :)
Procedura "splot" jest wyciągnięta na zewnątrz pętli ot tak sobie :), można wstawić te 8 plotów zamiast GOSUB i będzie jeszcze trochę szybciej.
Ostatnio edytowany przez Pecus (2010-01-06 09:31:15)
Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.