60
Γραφικά με υπολογιστές 1 Ιόνιο Πανεπιστήμιο Τ μήμα Πληροφορικής Χειμερινό εξάμηνο (Για το 2021) Δημήτρης Ρίγγας Γραφικά με Υπολογιστές [email protected] (Βασισμένο σε δομή & υλικό) Φοίβος Μυλωνάς [email protected] [email protected] Διδάσκων (για το 2021): Δημήτρης Ρίγγας Διαλέξεις #05 & #06 Αλγόριθμος Σχεδίασης Κύκλου Αλγόριθμος Σχεδίασης Έλλειψης

Διαλέξεις #05 & #06

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Γραφικά με υπολογιστές

1

Ιόνιο Πανεπιστήµιο Τµήµα Πληροφορικής Χειµερινό εξάµηνο

(Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

[email protected] Διδάσκων (για το 2021): Δηµήτρης Ρίγγας

Διαλέξεις #05 & #06

✔ Αλγόριθµος Σχεδίασης Κύκλου

✔  Αλγόριθµος Σχεδίασης Έλλειψης

2 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Σχεδίαση Κύκλου - Γενικά

◆ Υπάρχουν πολλοί αλγόριθµοι για κωνικές τοµές.

◆ Κύρ ι ο µ έ λ ηµα ε ί ν α ι η αποφυγή τριγωνοµετρικών πράξεων.

◆ Εκµετάλλευση της κεντρικής συµµετρίας. ●  Υπολογίζεται η καµπύλη για ένα µόνο οκταµόριο (π.χ. το 2ο) και τα υπόλοιπα pixels χρωµατίζονται συµµετρικά.

3 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Σχεδίαση Κύκλου - Γενικά

◆ Εξίσωση κύκλου: όπου r είναι η ακτίνα του κύκλου. ◆ Ένας απλός αλγόριθµος σχεδίασης κύκλου θα µπορούσε να προκύψει λύνοντας την εξίσωση ως προς y (για κάθε τιµή του x, υπολογίζεται η αντίστοιχη τιµή του y).

4 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Σχεδίαση Κύκλου - Γενικά

◆ Για ακτίνα κύκλου r =20 έχουµε:

5 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Σχεδίαση Κύκλου - Γενικά ◆  Δεν είναι έξυπνη/αποδοτική λύση! ◆ Πρώτον, ο κύκλος που προκύπτει έχει µεγάλα κενά όπου η κλήση προσεγγίζει την κάθετο.

◆  Δεύτερον, οι υπολογισµοί δεν είναι πολύ αποτελεσµατικοί. ●  Η πράξη πολ/σµού (τετράγωνο). ●  Η πράξη τετραγωνικής ρίζας – πρέπει να αποφεύγουµε αυτή την πράξη.

◆  Χρειαζόµαστε µια πιο αποτελεσµατική και ακριβέστερη λύση.

6 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Σχεδίαση Κύκλου – Πολικές Συντεταγµένες

Εξίσωση κύκλου: X=r*cosθ+xc

Y=r*sinθ+yc

όπου: 0º≤θ≤360º ή 0 ≤ θ ≤ 6.28 (2*π) Προβλήµατα:

●  Να πάρουµε απόφαση για την αύξηση σε θ! ●  Υπολογισµοί cos, sin

7 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Σχεδίαση Κύκλου - Συµµετρία

◆ Εκµετάλλευση 8-πλης συµµετρίας ●  Αρκεί ο υπολογισµός σε 1 οκταµόριο (π.χ. 2ο) ●  Τα υπόλοιπα οκταµόρια υπολογίζονται µε βάση τη συµµετρία

8 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Σχεδίαση Κύκλου - Συµµετρία ◆  Σχεδιασµός των 8 συµµετρικών σηµείων του κύκλου, άπαξ και προσδιοριστεί 1 σηµείο (x,y) του 2ου οκταµορίου:

circle_symmetry(int x, y, colour c) { setpixel(x, y, c); setpixel(y, x, c); setpixel(y, -x, c); setpixel(x, -y, c); setpixel(-x, -y, c); setpixel(-y, -x, c); setpixel(-y, x, c); setpixel(-x, y, c); }

9 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

◆ Ο Jack Bresenham εργάστηκε για 27 χρόνια στην IBM πριν γίνει πανεπιστηµιακός, όπου και ανέπτυξε τους διάσηµους πλέον αλγόριθµους του στις αρχές του 1960.

Αλγόριθµος Bresenham για Κύκλο

10 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Αλγόριθµος Bresenham για Κύκλο (2ο) ◆  r: η ακτίνα του κύκλου ◆  Το κέντρο του είναι το pixel (0,0) ◆  Ο αλγόριθµος ξεκινάει από το pixel (0,r) και σχεδιάζει µόλις κάτω από το ιδεατό τόξο του κύκλου

11 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Αλγόριθµος Bresenham για Κύκλο ◆  Σχεδιάζει ένα κυκλικό τόξο στο 2ο οκταµόριο ◆  Η µεταβλητή x αυξάνεται σε κάθε βήµα. ◆  Όταν η τιµή της συνάρτησης του κύκλου γίνει θετική (το pixel βρίσκεται εκτός κύκλου), το y µειώνεται

12 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Αλγόριθµος Bresenham για Κύκλο

◆ Έστω ότι βρισκόµαστε στο σηµείο (xi,yi). ◆ Το επόµενο θα είναι (xi+1,yi) ή (xi+1,yi-1)

πλησιέστερο σηµείο στην ιδεατή πορεία του κύκλου

13 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Αλγόριθµος Bresenham για Κύκλο

◆  Η απόφαση στηρίζεται στην απόσταση της αναµενόµενης τιµής του y επί της τροχιάς του κύκλου από τα δυο υποψήφια pixels.

◆  Προσπαθούµε να υπολογίσουµε την επόµενη θέση µε µοναδικά στοιχεία την τρέχουσα θέση και την ακτίνα του κύκλου.

14 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Αλγόριθµος

Μεταβλητή απόφασης: ei = d1 − d2

όπου: d1 = yi

2 -y2 και

d2 = y2 - (yi - 1)2

Αν ei≥0, επιλέγεται το σηµείο (xi+1, yi-1) αλλιώς επιλέγεται το σηµείο (xi+1, yi)

15 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Υπολογισµός του ei

(Α)

◆ Επειδή για x=xi+1 ισχύει ότι: y2=r2-(xi+1)2 , έχουµε: ei = d1 − d2 = yi

2- y2 – y2 + (yi-1)2 Άρα: ei = yi

2- r2 + (xi+1)2 + (yi-1)2 - r2 + (xi+1)2 ei = 2 (xi+1)2 + yi

2 + (yi-1)2 – 2 r2

16 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Αναδροµικός υπολογισµός ei+1

ei+1 = 2 (xi+1+1)2 + yi+1

2 + (yi+1-1)2 - 2 r2 = 2 (xi+2)2 + yi+1

2 + (yi+1-1)2 - 2 r2 = 2xi

2+ 8xi+ 8+ yi+12+ yi+1

2- 2 yi+1+1 -2r2 = 2(xi+1)2 + 4xi+ 6+ 2yi+1

2- 2yi+1 + 1- 2r2 = ei - 2yi

2 + 2yi -1 + 2r2 + 4xi+ 6 + 2yi+12- 2yi+1

+ 1 - 2r2 = ei + 4xi+ 6 + 2(yi+1

2- yi2) - 2(yi+1 - yi)

◆ To σφάλµα για την επόµενη θέση ei+1

υπολογίζεται επαναληπτικά ως εξής:

{xi+1 = xi + 1}

{ από εξ. (Α) }

το µόνο άγνωστο!

17 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Τελικός τύπος υπολογισµού

Αν ei < 0 _ yi+1 = yi _ ei+1= ei + 4(xi+1) + 2 Αν ei ≥ 0 _ yi+1 = yi – 1,

_ ei+1 = ei + 4xi+ 6 + 2((yi -1)2 - yi2)

– 2(yi-1- yi) _ ei+1= ei + 4(xi+1) + 2 – 4(yi – 1)

◆ Το yi+1 εξαρτάται από το ei, οπότε: ◆ Τέχνασµα υπολογισµού ei+1 :

(B.1)

(B.2)

κοινό µέρος

18 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Παρατηρήσεις

◆ Θεωρώντας σαν πρώτο σηµείο του 2ου οκταµορίου το σηµείο (x,y)=(0,r): Από (Α): ei = 2 (xi+1)2 + yi

2 + (yi-1)2 – 2 r2 ð e1 = 2+ r2 + (r –1)2 – 2r2 = 3 – 2r

◆ Για µεταφορά του κύκλου από το (0,0) στο

(x0,y0) αρκεί να αντικατασταθεί η κλήση circle_symmetry(x,y,colour); από: circle_symmetry(x-x0,y-y0,colour);

αρχική τιµή µεταβλ. απόφασης:

19 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Υλοποίηση

circle(int r, colour c) {

int x, y, e; x = 0; y = r; e = 3–2*r; // αρχική τιµή e while (x <= y){ circle_ symmetry(x, y, colour); x++; if (e >= 0) { y--; e = e+4*x+2 -4*y } //B.2 else { e = e+4*x+2 }; //B.1

} }

το x έχει ήδη αυξηθεί το y έχει ήδη µειωθεί

ei

ei+1

20 Φοίβος Μυλωνάς Γραφικά µε υπολογιστές [email protected]

r=10e0=3–2r=-17Αρχικόσημείο(x0,y0)=(0,10)

Παράδειγµα 1

21 Φοίβος Μυλωνάς Γραφικά µε υπολογιστές [email protected]

r=10e0=3–2r=-17Αρχικόσημείο(x0,y0)=(0,10)

e1 = -17+ 4*0 + 6 = -11

e2 = -11+ 4*1 + 6 = -1

e3 = -1+ 4*2 + 6 = 13

e4 = 13 + 4(3 – 10) + 10 = -5

Παράδειγµα 1

Αν ei < 0 _ yi+1 = yi _ ei+1= ei+4(xi+1)+2

Αν ei ≥ 0 _ yi+1 = yi–1, _ ei+1= ei+4(xi+1)+2–4(yi–1)

22 Φοίβος Μυλωνάς Γραφικά µε υπολογιστές [email protected]

10 ! ! ! !

9 ! !

8 !

7 !

6 !

5 !

4 !

3 !

2 !

1 !

0 !

0 1 2 3 4 5 6 7 8 9 10

i ei xi, yi

0 -17 (0, 10)

1 -11 (1, 10)

2 -1 (2, 10)

3 13 (3, 10)

4 -5 (4, 9)

5 17 (5, 9)

6 13 (6, 8)

7 (7,7)

r=10e0=3–2r=-17Αρχικόσημείο(x0,y0)=(0,10)

Παράδειγµα 1

23 Φοίβος Μυλωνάς Γραφικά µε υπολογιστές [email protected]

r=6e0=3–2r=-9Αρχικόσημείο(x0,y0)=(-2,4)

Γιαυπολογισμούς:(x0,y0)=(0,r)=(0,6)

Παράδειγµα 2

Αν ei < 0 _ yi+1 = yi _ ei+1= ei+4(xi+1)+2

Αν ei ≥ 0 _ yi+1 = yi–1, _ ei+1= ei+4(xi+1)+2–4(yi–1)

24 Φοίβος Μυλωνάς Γραφικά µε υπολογιστές [email protected]

r=6e0=3–2r=-9Αρχικόσημείο(x0,y0)=(-2,4)

Γιαυπολογισμούς:(x0,y0)=(0,r)=(0,6)

e1 = -9+ 4*0 + 6 = -3

e2 = -3+ 4*1 + 6 = 7

e3 = 7 + 4(2 – 6) + 10 = 1

e4 = 1 + 4(3 – 5) + 10 = 3

Παράδειγµα 2

Αν ei < 0 _ yi+1 = yi _ ei+1= ei+4(xi+1)+2

Αν ei ≥ 0 _ yi+1 = yi–1, _ ei+1= ei+4(xi+1)+2–4(yi–1)

25 Φοίβος Μυλωνάς Γραφικά µε υπολογιστές [email protected]

10 ! ! !

9 !

8 !

7 !

6

5

4

3

2

1

0

-1

-2

-2 -1 0 1 2 3 4

i ei xi, yi

0 -9 (-2, 10)

1 -3 (-1, 10)

2 7 (0, 10)

3 1 (1, 9)

4 3 (2, 8)

5 (3, 7)

6

7

Παράδειγµα 2 r=6e0=3–2r=-9Αρχικόσημείο(x0,y0)=(-2,4)

Γιαυπολογισμούς:(x0,y0)=(0,r)=(0,6)

26 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

◆  Αλγόριθµος Σχεδίασης Κύκλου

◆  Αλγόριθµος Σχεδίασης Έλλειψης

27 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Σχεδίαση Έλλειψης - Γενικά

◆  Απλοϊκά, µια έλλειψη είναι ένας επιµηκυµένος κύκλος!

◆  Εποµένως, οι ελλειπτικές καµπύλες µπορούν να παραχθούν µε την τροποποίηση των διαδικασιών για το σχεδιασµό κύκλων έλλειψης κατά µήκος του µικρού και του µεγάλου άξονα.

28 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Σχεδίαση Έλλειψης - Γενικά ◆  Έλλειψη – Ένας τροποποιηµένος κύκλος του οποίου η ακτίνα λαµβάνει τιµές µεταξύ µιας µέγιστης τιµής σε µία κατεύθυνση (µεγάλος άξονας) και µιας minimum τιµής στην perpendicular κατεύθυνση (µικρός άξονας).

P=(x,y) F1

F2

d1

d2

w  Το άθροισµα των δύο αποστάσεων d1 και d2, µεταξύ των σταθερών σηµείων F1 και F2 (που ονοµάζονται foci της έλλειψης) προς οποιοδήποτε σηµείο P επάνω στην έλλειψη, είναι σταθερό:

d1 + d2 = constant

29 Φοίβος Μυλωνάς Γραφικά µε υπολογιστές [email protected]

Σχεδίαση Έλλειψης - Γενικά ◆  Αν εκφράσουµε τις αποστάσεις d1 και d2 σε focal συντεταγµένες θα έχουµε: F1 = (x1, x2) και F2 = (x2, y2):

◆  Καρτεσιανές συντεταγµένες:

◆  Πολικές συντεταγµένες:

2 2 2 21 1 2 2( ) ( ) ( ) ( ) constantx x y y x x y y− + − + − + − =

ry rx

22

1c c

x y

x x y yr r

⎛ ⎞⎛ ⎞− −+ =⎜ ⎟⎜ ⎟ ⎜ ⎟⎝ ⎠ ⎝ ⎠

cossin

c x

c y

x x ry y r

θ

θ

= +

= +

30 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Σχεδίαση Έλλειψης - Γενικά

◆  Υπάρχουν πολλοί αλγόριθµοι για κωνικές τοµές. ◆  Κύριο µέληµα είναι η αποφυγή τριγωνοµετρικών πράξεων.

◆  Αλγόριθµος Αγάθου-Θεοχάρη-Μπεµ (1998) ●  Γρήγορος ●  Μικρή απαίτηση ακρίβειας ακεραίων ●  Σωστή µετάβαση περιοχής ●  Επιδέχεται αντι-ταύτισης

31 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Σχεδίαση Έλλειψης - Γενικά

◆ Εξίσωση έλλειψης µε κέντρο (0,0): ●  x2/a2 + y2/b2 = 1 ●  4-πλή συµµετρία: δηµιουργούµε µόνο περιοχές 1, 2 ●  χωρίζονται από το σηµείο όπου dy/dx= −1

Κλίση: dy/dx = -2b2x/2a2y

32 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Σχεδίαση Έλλειψης - Γενικά ◆  Επεξεργαζόµαστε το 1ο τεταρτηµόριο παίρνοντας µοναδιαία βήµατα κατά την διεύθυνση των x, όταν η κλίση της καµπύλης είναι µεγαλύτερη του -1, ενώ παίρνουµε µοναδιαία βήµατα κατά τη διεύθυνση των y, όταν η κλίση της καµπύλης είναι µικρότερη του -1.

Κλίση: dy/dx = -1 => 2b2x = 2a2y

dy/dx>-1

dy/dx<-1

33 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Σχεδίαση Έλλειψης - Γενικά

◆  Θα βρούµε: 1.  Επαναληπτικές εκφράσεις για τον υπολογισµό των

µεταβλητών απόφασης στις 2 περιοχές ●  dΙ,i και dΙ,i+1 / dΙΙ,i και dΙΙ,i+1

2.  Αρχικές τιµές των µεταβλητών απόφασης •  dΙ,0 / dΙΙ,0

3.  Μία συνθήκη που να σηµατοδοτεί την µετάβαση από την περιοχή Ι στην περιοχή ΙΙ.

34 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Μεταβλητή απόφασης περιοχής Ι

◆ Έστω αρχικό σηµείο: (0,b) της περιοχής Ι ●  Περιοχή Ι: άξονας κύριας κίνησης ο X

•  Εκκίνηση από το (0, b) •  Τέλος περιοχής όταν dy/dx = -1

35 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Μεταβλητή απόφασης περιοχής Ι

◆ Ορίζουµε: ●  d1 = yi

2 – y2

●  d2 = y2 – (yi – 1)2 και θέτουµε: ●  d = d1 − d2 = (yi

2 − y2) − (y2 – (yi – 1)2 )

Η σύγκριση του d µε το 0 καθορίζει την επιλογή B ή D

36 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

◆ Κάνουµε πράξεις & θέτουµε: ε = yi – y, οπότε:

●  d = d1 − d2 = (yi2 − y2) − (y2 – (yi – 1)2 )

= yi2 − y2 − y2 + (yi – 1)2

= yi2 − y2 − y2 + yi

2 − 2yi + 1 = 2yi

2 − 2y2 − 2yi + 1 = 4yi

2 − 2yi2 − 2y2 + 4yiy − 4yiy − 2yi + 1

= − 2yi2 − 2y2 + 4yiy + 4yi

2 − 4yiy − 2yi + 1 = − 2(yi

2 + y2 − 2yiy) + 4yi(yi − y) − 2yi + 1

= − 2(yi − y)2 + 4yi(yi − y) − 2yi + 1

= − 2ε2 + 4yiε − 2yi + 1 = d(ε)

Μεταβλητή απόφασης περιοχής Ι

37 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

◆ Θέτουµε: ε = yi – y, οπότε:

●  d(ε) = -2ε2 + 4yiε + 1 − 2yi

◆ Η τιµή του d(ε) στη θέση ε = ½: d(1/2) = ½ ð τιµή απόφασης: ●  Αν d ≤ 1/2 επιλέγουµε pixel B, αλλιώς pixel D.

Μεταβλητή απόφασης περιοχής Ι Τελικά: συνάρτηση απόφασης d(ε)

38 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Μεταβλητή απόφασης περιοχής Ι – νέα d(ε)

◆ Διευκολύνουµε περαιτέρω τον αυξητικό υπολογισµό παίρνοντας d = a2(d1-d2): ●  d(ε) = -2a2ε2 + 4a2yiε + a2 − 2a2yi, οπότε: (Α)

•  Αν d ≤ a2/2 επιλέγουµε pixel B, αλλιώς pixel D (Β) Νέα συνάρτηση απόφασης d(ε)

39 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Υπολογισµός µεταβλ. απόφασης στο βήµα i

◆ Αυξητικός υπολογισµός

●  dΙ,i = a2 (d1-d2) = a2(yi2 + (yi −1)2 − 2y2)

= a2yi2 + a2(yi −1)2 − 2a2y2 (από ορισµό d1, d2)

◆ Όµως από την εξίσωση της έλλειψης για το σηµείο (xi+1,y) έχουµε: a2y2 = a2b2 − b2(xi+1)2 , οπότε:

●  dΙ,i = -2a2b2 + 2b2(xi+1)2 + a2yi2 + a2(yi −1)2 (Γ)

x2/a2 + y2/b2 = 1

40 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Υπολογισµός µεταβλ. απόφασης στο βήµα i+1

◆ Στη συνέχεια ορίζουµε το dΙ,i+1 ως προς το dΙ,i:

●  dΙ,i+1 = -2a2b2 + 2b2(xi+1+1)2 + a2yi+12 + a2(yi+1 −1)2

= -2a2b2 + 2b2((xi+1)+1)2 + a2yi+12 + a2(yi+1 −1)2

= -2a2b2 + 2b2(xi+1)2 + 2b2 + 4b2(xi+1) + a2yi+12 +

a2(yi+1 −1)2

Από (Γ): -2a2b2 + 2b2(xi+1)2 = dΙ,i − a2yi2 − a2(yi −1)2

Άρα: dΙ,i+1 = dΙ,i + a2yi+12 + a2(yi+1 −1)2 − a2yi

2 − a2(yi −1)2

+ 2b2 + 4b2(xi+1)

41 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Σχεδίαση Έλλειψης

◆ dΙ,i+1 = dΙ,i + a2yi+12 + a2(yi+1 −1)2 − a2yi

2 − a2(yi −1)2

+ 2b2 + 4b2(xi+1)

◆ Αν dΙ,i > a2/2, τότε yi+1= yi − 1 από (Β), οπότε:

●  dΙ,i+1 = dΙ,i + 2b2 + 4b2(xi+1) − 4a2(yi −1)

◆  Αν dΙ,i ≤ a2/2, τότε yi+1= yi από (Β), οπότε:

●  dΙ,i+1 = dΙ,i + 2b2 + 4b2(xi+1)

42 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Αρχική τιµή – περιοχή Ι

◆ Εύρεση αρχικής τιµής: dΙ,0

●  βρίσκεται αντικαθιστώντας τις συντεταγµένες του

1ου pixel της περιοχής Ι (0,b) για τα (xi,yi)

στην εξίσωση (Γ):

◆ dΙ,0 = -2a2b2 + 2b2(0+1)2 + a2b2 + a2(b −1)2

= -2a2b2 + 2b2 + a2b2 + a2(b2 – 2b + 1)

= 2b2 + a2(1-2b)

43 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Συνθήκη µετάβασης ◆  Κριτήριο αλλαγής περιοχής

●  Στηρίζεται στην τιµή της συνάρτησης d για το σηµείο (xi+1,yi–3/2)

●  Αν πραγµατική έλλειψη περνάει κάτω από αυτό ð αλλαγή περιοχής

◆  Θέτοντας ε = 3/2 στην (Α):

d(3/2) = -2a2(3/2)2 + 4a2yi(3/2) + a2 − 2a2yi

= 4a2(yi − 1) + a2/2

Αν d ≤4a2(yi −1) + a2/2, τότε παραµένουµε στην περιοχή Ι,

διαφορετικά µεταβαίνουµε στην περιοχή ΙΙ.

44 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Μεταβλητή απόφασης περιοχής ΙΙ

◆  Παροµοίως βρίσκουµε τη µεταβλητή απόφασης της περιοχής ΙΙ: dΙΙ,i ●  Περιοχή ΙΙ: άξονας κύριας κίνησης ο Υ ●  Ορίζουµε: d1=(xi2+1)-x2, d2=x2-xi2

και θέτουµε: d=d1–d2 ●  Με επιλογή του pixel Α στη γραµµή i, η d=b2(d1-d2) καθορίζει την επιλογή στην επόµενη γραµµή µεταξύ των C και D:

•  Αν d <= b2/2, τότε επιλέγουµε το pixel D •  Αν d > b2/2, τότε επιλέγουµε το pixel C

45 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Μεταβλητή απόφασης περιοχής ΙΙ

◆ Αν dΙΙ,i > b2/2, τότε xi+1= xi, οπότε:

●  dΙI,i+1 = dΙI,i + … … … … …

◆  Αν dΙI,i ≤ b2/2, τότε xi+1= xi +1, οπότε:

●  dΙI,i+1 = dΙI,i + + … … … … … ◆  Η αρχική τιµή: dΙI,0 βρίσκεται αντικαθιστώντας τις συντεταγµένες του 1ου pixel της περιοχής IΙ = τελευταίο pixel της περιοχής Ι.

46 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Υλοποίηση 1/3

Ellipse (a,b,colour) int a,b,colour; { int a_sqr,b_sqr,a22,b22,a42,b42; int x_slope,y_slope,d,mida,midb,x,y; x=0; y=b; a_sqr=a*a; b_sqr=b*b; a22 = a_sqr + a_sqr; b22 = b_sqr + b_sqr; a42 = a22+a22; b42 = b22+b22; x_slope = b42*(x+1); /* x_slope==(4*b^2)*(x+1) πάντα */ y_slope = a42*(y-1); /* y_slope==(4*a^2)*(y-1) πάντα */

47 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Υλοποίηση 2/3

mida=a_sqr>>1; midb=b_sqr>>1; d=b22-a_sqr-(y_slope>>1)-mida; /* αφαιρούµε a^2/2 για βελτιστοποίηση */ /* περιοχή Ι */ while (d<=y_slope) { setpixel(x,y,colour); if (d>0) {d=d-y_slope; y--; y_slope=y_slope-a42;} d=d+b22+x_slope; x++; x_slope=x_slope+b42;}

48 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Υλοποίηση 3/3

/*Αλλαγή περιοχής*/ d=d-(x_slope+y_slope)>>1+(b_sqr-

a_sqr)+(mida-midb); /* περιοχή ΙΙ */ while (y>=0) {setpixel (x,y,colour); if (d<=0) { d=d+x_slope; x++; x_slope=x_slope+b42;} d=d+a22-y_slope; y--; y_slope=y_slope-a42;} }

49 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Παράδειγµα

◆  Έστω έλλειψη µε κέντρο την αρχή των αξόνων (0,0) και τις παραµέτρους: a=8, b=6

●  Τότε, έχουµε: dy/dx = -1 = -2b2x/2a2y ●  => 2b2=72, 2a2=128, a2/2=32 ●  => αρχικό σηµείο (x0,y0)=(0,b)=(0,6)

50 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Παράδειγµα

◆  Για την περιοχή Ι, το αρχικό σηµείο της έλλειψης θα είναι το (x0, y0) = (0, 6)

◆  και η αρχική τιµή της παραµέτρου απόφασης:

dΙ,0 = 2b2 + a2(1-2b)

= 2*36+64-2*6*64 = -632

51 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Παράδειγµα ◆  Αν dΙ,i > a2/2=32, τότε yi+1= yi − 1 από (Β), οπότε:

●  dΙ,i+1 = dΙ,i + 2b2 + 4b2(xi+1) − 4a2(yi −1) = dΙ,i + 72 + 144(xi+1) − 256(yi −1)

◆  Αν dΙ,i ≤ a2/2=32, τότε yi+1= yi από (Β), οπότε: ●  dΙ,i+1 = dΙ,i + 2b2 + 4b2(xi+1) = dΙ,i + 72 + 144(xi+1)

i dI,i (xi+1, yi+1) dI,i+1

0 -632 (1, 6) -416

1 -416 (2, 6) -56

2 -56 (3, 6) 448

3 448 (4, 5) -184

4 -184 (5, 5) 607

5 607 (6, 4) 519

6 519 (7, 3) …

52 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Παράδειγµα

◆  Σε αυτό το σηµείο φεύγουµε από την περιοχή Ι, γιατί: ●  2b2x > 2a2y, αφού: (2*36*7 =) 504 > 384 (= 2*64*3)

◆  Για την περιοχή ΙΙ, το αρχικό σηµείο θα είναι το: ●  (x0, y0) = (7, 3)

◆  …οπότε υπολογίζουµε την αρχική παράµετρο απόφασης dII,0 και στην συνέχεια επαναληπτικά τις τιµές των υπόλοιπων pixels της περιοχής ΙΙ. Τελικά:

53 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Παράδειγµα

6 ! ! ! !

5 ! !

4 !

3 !

2 !

1 !

0 !

0 1 2 3 4 5 6 7 8

i dIΙ,i (xi+1, yi+1) dIΙ,i+1

0 … (8, 2) … 1 ... (8, 1) … 2 … (8, 0) - Stop όταν y = 0

54 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Σχεδίαση Έλλειψης - Γενικά

◆ Μέχρι τώρα η υπόθεση εργασίας µας ήταν ότι η έλλειψη είχε κέντρο το (0,0).

◆ Εν γένει, η εξίσωση έλλειψης µε κέντρο (h,k) δίνεται από την εξίσωση:

(x - h)2 + (y - k)2 = 1 a2 b2

55 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

όπου: (h, k) = το κέντρο της έλλειψης a = µήκος του κύριου άξονα b = µήκος του µικρού άξονα

k

h

y

x

κέντρο (h, k)

b a

Σχεδίαση Έλλειψης - Γενικά

(x - h)2 + (y - k)2 = 1 a2 b2

56 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

◆  Αν ακολουθήσουµε πιστά την πολυωνυµική µέθοδο, η τιµή του x θα αυξάνει κατά µία µονάδα από το h στο a. Για κάθε βήµα αύξησης του x, κάθε τιµή του y προκύπτει από την εξίσωση:

y = b 1 – (x – h)2 + k a2 ◆  Αυτή η µέθοδος δεν είναι υπολογιστικά αποδοτική, διότι πρέπει να υπολογιστούν τα τετράγωνα του a και της ποσότητας (x – h), καθώς και η ακριβή υπολογιστικά πράξη της διαίρεσης.

Σχεδίαση Έλλειψης - Γενικά

57 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

◆ Εναλλακτικά µπορούµε να θεωρήσουµε την τριγωνοµετρική µέθοδο.

◆ Οι ακόλουθες εξισώσεις ορίζουν µία έλλειψη µε τριγωνοµετρικό τρόπο:

x = a cos(θ) + h και y = b sin(θ) + k όπου: (x, y) = οι τρέχουσες συντεταγµένες a = το µήκος του κύριου άξονα b = το µήκος του µικρού άξονα θ = τρέχουσα γωνία

Σχεδίαση Έλλειψης - Γενικά

58 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

◆  Η τιµή της θ ποικίλλει µεταξύ 0 και π/2 radians. ◆  Τα υπόλοιπα σηµεία βρίσκονται µέσω συµµετρίας.

θ

h

k a b

(acos(θ)+h, bsin(θ)+k)

x

y

Σχεδίαση Έλλειψης - Γενικά

59 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

◆ Ο αλγόριθµος που µάθαµε εφαρµόζεται µόνο στην ειδική περίπτωση που: ●  η έλλειψη είναι κεντραρισµένη στο (0,0) και ●  ο µεγάλος και ο µικρός άξονάς της είναι παράλληλοι στους άξονες του συστήµατος συντεταγµένων.

Σχεδίαση Έλλειψης - Γενικά

60 (Για το 2021) Δηµήτρης Ρίγγας Γραφικά µε Υπολογιστές [email protected] (Βασισµένο σε δοµή & υλικό) Φοίβος Μυλωνάς [email protected]

Ερωτήσεις - Απορίες