Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdNele de Wit Laatst gewijzigd meer dan 9 jaar geleden
1
Recursie: het cirkel algoritme van Bresenham
Cirkels tekenen op een monitor… Onmogelijk vanwege het discrete karakter van monitoren. Derhalve: genoegen nemen met een benadering.
2
De cirkel: een definitie
Een cirkel = een verzameling punten die allemaal op een gegeven afstand r liggen van een centraal punt. r y x
3
De cirkel: eigenschappen
De relatie tussen een punt op de rand en het centrum: Pythagoras r
4
Een cirkel tekenen… Loop over de x- as en bereken de bijbehorende y- coördinaat op basis van de straal:
5
Een cirkel tekenen… Problemen:
De cirkel wordt niet mooi gesloten getekend… Ieder punt kost nogal wat rekenkracht. Gebroken getallen zijn niet zo netjes en leiden mogelijk tot afrondingsfouten.
6
Een cirkel tekenen… Een andere methode: poolcoördinaten. r
7
Een cirkel tekenen… Poolcoördinaten: problemen:
Hoekberekening vormt een gebroken getal. Gebruik van goniometrische functies…
8
Goniometrie in een computer
Goniometrische functies volgens Taylor:
9
Een cirkel tekenen: Bresenham
Een cirkel is symmetrisch… Teken 1/8 deel van de cirkel en construeer de rest volgens herhaald spiegelen.
10
Een cirkel tekenen: Bresenham
Definieer een cirkelfunctie: Punt (x,y) op cirkel met straal r? functiewaarde=0 Punt (x,y) binnen de cirkel? functiewaarde <0 Punt (x,y) buiten de cirkel? functiewaarde >0
11
Bresenham: recursie… 2 mogelijkheden voor het volgende pixel…
evaluatiepunt
12
Bresenham: recursie… Hebben we getekend: Dan wordt de volgende: OF
13
Bresenham: recursie… Evalueer de cirkelfunctie op het evaluatiepunt teneinde de y- coördinaat van de opvolger te kunnen berekenen:
14
Bresenham: recursie… Evaluatiepunt binnen cirkel? Teken:
Evaluatiepunt buiten cirkel? Teken:
15
Bresenham: recursie… Evalueer cirkelfunctie voor “de opvolger van de opvolger”:
16
Bresenham: recursie… Ofwel:
17
Bresenham: recursie code
int circlemid(int xc,int yc,int r) { int x=0,y=r; axis(); putpixel(convertxc(xc),convertyc(yc),5); plotpoint(xc,yc,x,y); double p=1-r; while(x<y) { if(p<0) { x=x+1; p=p+2*x+1; } else{ y=y-1; p=p+2*(x-y)+1;} return(0);
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.