5ο Μάθημα Αλγόριθμοι Σχεδίασης Βασικών Σχημάτων Γραφικα Τμήμα Πληροφορικής Πανεπιστήμιο Θεσσαλίας Ακ Έτος 2016-17
Εισαγωγή Ευθεία Κύκλος Έλλειψη Σύνοψη του σημερινού μαθήματος 1 Εισαγωγή 2 Ευθεία 3 Κύκλος 4 Έλλειψη
Εισαγωγή Εισαγωγή Οι διδιάστατες συσκευές απεικόνισης (πχ οθόνες) αποτελούνται από ένα διακριτό πλέγμα εικονοστοιχείων Καθένα από αυτά μπορεί να λάβει μια χρωματική τιμή Η σχεδίαση (rasterization) είναι η διαδικασία της μετατροπής διδιάστατων στοιχειωδών σχημάτων σε μια διακριτή παράσταση Με άλλα λόγια, πρέπει να βρεθούν τα εικονοστοιχεία που απαρτίζουν ένα στοιχειώδες σχήμα
Εισαγωγή Εισαγωγή Δεδομένου ότι θέλουμε να σχεδιάσουμε P στοιχειώδη σχήματα, για ένα συγκεκριμένο καρέ και υποθέτοντας ότι κάθε στοιχειώδες σχήμα αποτελείται από p εικονοστοιχεία, η πολυπλοκότητα της σχεδίασης είναι γενικά O(Pp) Άλλα (προηγούμενα) στάδια της σωλήνωσης γραφικών (μετασχηματισμοί και περικοπή) χρησιμοποιούν μόνο τις κορυφές των στοιχειωδών σχημάτων Γενικά, η πολυπλοκότητα αυτών των προηγούμενων σταδίων είναι O(Pn), όπου n το μέσο πλήθος κορυφών από ένα στοιχειώδες σχήμα Συνήθως, p n, οπότε πρέπει να εξασφαλιστεί ότι οι αλγόριθμοι σχεδίασης είναι ιδιαίτερα αποδοτικοί
Εισαγωγή Εισαγωγή Τα εικονοστοιχεία (pixels) μιας πλεγματικής οθόνης αποτελούν ένα διδιάστατο κανονικό πλέγμα Υπάρχουν δύο τρόποι θεώρησης του πλέγματος αυτού: Κέντρα σε ημίσειες συντεταγμένες (δεξιά): φανταστικές κάθετες και οριζόντιες γραμμές Κέντρα σε ακέραιες συντεταγμένες (αριστερά): πραγματικό πλέγμα
Εισαγωγή Εισαγωγή Θα θεωρήσουμε τα κέντρα σε ακέραιες συντεταγμένες Όταν αναφερόμαστε σε ένα εικονοστοιχείο σαν σημείο, θα εννοούμε το κέντρο του Μια σημαντική έννοια της σχεδίασης είναι αυτή της σύνδεσης: Πότε είναι συνδεδεμένο ένα σχήμα που αποτελείται από εικονοστοιχεία; Για παράδειγμα, αν ένας αλγόριθμος σχεδίασης μιας καμπύλης μεταβεί από ένα εικονοστοιχείο στο διαγώνιο γείτονά του, είναι συνδεδεμένη η καμπύλη, ή υπάρχει κενό;
Εισαγωγή Εισαγωγή Υπάρχουν δύο τύποι σύνδεσης, η τετραπλή (αριστερά) και η οκταπλή (δεξιά): Όποιο τύπο και αν επιλέξουμε, θα πρέπει να βεβαιωθούμε ότι τον υποστηρίζουν οι αλγόριθμοί μας Εδώ θα χρησιμοποιούμε οκταπλή σύνδεση
Εισαγωγή Εισαγωγή Η δημιουργία αλγορίθμων σχεδίασης για μια κλάση στοιχειωδών σχημάτων έχει δύο βασικούς στόχους: 01 επιλογή των εικονοστοιχείων που παριστάνουν ένα σχήμα με ακρίβεια 02 αποδοτικότητα Ο πρώτος στόχος είναι απαραίτητος για τη σωστή σύνδεση και συνεπάγεται ότιένας αλγόριθμος σχεδίασης: 01 επιλέγει τα εικονοστοιχεία που παριστάνουν καλύτερα το σχήμα 02 μεταβάλλει μόνο αυτά τα εικονοστοιχεία 03 μεταβάλλει τις χρωματικές τιμές αυτών των εικονοστοιχείων σωστά
Εισαγωγή Στο σημερινό μάθημα θα ασχοληθούμε με τις μαθηματικές αρχές και τους αλγορίθμους για τη σχεδίαση κοινών στοιχειωδών σχημάτων Ευθύγραμμα τμήματα, κύκλοι, γενικά πολύγωνα, τρίγωνα και κλειστές περιοχές Θα δούμε επίσης τις τεχνικές της προοπτικής διόρθωσης και της αντιταύτισης που σκοπό έχουν να βελτιώσουν την ποιότητα της σχεδίασης
Αλγόριθμοι Σχεδίασης Ευθειών Σχεδίαση Ευθείας Για να δημιουργήσουμε έναν καλό αλγόριθμο σχεδίασης ευθείας πρέπει πρώτα να καθορίσουμε ένα κριτήριο ορθότητας Γενικά δεν είναι δυνατό να επιλέξουμε εικονοστοιχεία ακριβώς πάνω στη μαθηματική ευθεία, λόγω του ότι το πλέγμα των εικονοστοιχείων έχει περιορισμένη ανάλυση Άρα θα πρέπει να κάνουμε μια προσέγγιση
Αλγόριθμοι Σχεδίασης Ευθειών Αλγόριθμοι Σχεδίασης Ευθειών Οι επιθυμητές ιδιότητες ενός αλγόριθμου σχεδίασης ευθείας είναι 01 επιλογή pixels που βρίσκονται όσο πιο κοντά γίνεται στη μαθηματική πορεία της ευθείας 02 όσο το δυνατόν σταθερό πάχος, ανεξάρτητο από μήκος/κλίση, ελάχιστο ίσο με 1 pixel 03 μη ύπαρξη κενών 04 αποδοτικότητα (οι αλγόριθμοι χρησιμοποιούνται συχνά)
Αλγόριθμοι Σχεδίασης Ευθειών Αλγόριθμος 1 Απλός αλγόριθμος, βασίζεται στην αλγεβρική εξίσωση της ευθείας Σχεδίαση ενός ευθύγραμμου τμήματος στο 1ο οκταμόριο Τα υπόλοιπα αντιμετωπίζονται με συμμετρία Για οποιοδήποτε σημείο P(x, y) ενός ευθύγραμμου τμήματος ισχύει: y = s x + b όπου: και: s = y n y 1 = y x n x 1 x b = y 1x n y n x 1 x n x 1
Αλγόριθμοι Σχεδίασης Ευθειών Αλγόριθμος 1 Με βάση τα παραπάνω, ο αλγόριθμος μπορεί να υλοποιηθεί ως: line1(x1,y1,xn,yn,colour) int x1,y1,xn,yn,colour float s,b,y; int x s=(yn-y1)/(xn-x1) b=(y1*xn-yn*x1)/(xn-x1) for (x=x1;x<=xn;x++) y=s*x+b setpixel(x,round(y),colour)
Αλγόριθμοι Σχεδίασης Ευθειών Αλγόριθμος 1 Μειονέκτημα Περιέχει πολλαπλασιασμό μέσα στην επανάληψη Λύση Μπορεί να αποφευχθεί παρατηρώντας ότι σε κάθε επανάληψη x i+1 = x i + 1 Άρα y i+1 = sx i+1 + b = sx i + b + s = y i + s Ο πολλαπλασιασμός μπορεί να αντικατασταθεί από πρόσθεση!
Αλγόριθμοι Σχεδίασης Ευθειών Αλγόριθμος 2 Αυξητικός αλγόριθμος, ο υπολογισμός στο βήμα i βασίζεται στο βήμα i 1, αποφεύγεται ο υπολογισμός του b line2 (x1,y1,xn,yn,colour) int x1,y1,xn,yn,colour float s,y; int x s=(yn-y1)/(xn-x1) y=y1 for (x=x1;x<=xn;x++) setpixel(x,round(y),colour) y=y+s
Αλγόριθμοι Σχεδίασης Ευθειών Αλγόριθμος 2 Μειονέκτημα Περιέχει πράξη στρογγύλευσης (round) Λύση Να χωριστεί η πραγματική μεταβλητή y σε ακέραιο και δεκαδικό μέρος Η νέα μεταβλητή y θα είναι ακέραια και το δεκαδικό μέρος φυλάσσεται στην error
Εισαγωγή Ευθεία Κύκλος Έλλειψη Αλγόριθμοι Σχεδίασης Ευθειών Αλγόριθμος 3 Θεωρώντας ότι έχει επιλεγεί το pixel (x i, y i ), η error καθορίζει την επιλογή μεταξύ του (x i + 1, y i ) και (x i + 1, y i + 1)
Αλγόριθμοι Σχεδίασης Ευθειών Αλγόριθμος 3 line3 (x1,y1,xn,yn,colour) int x1,y1,xn,yn,colour float s,error; int x,y s=(yn-y1)/(xn-x1) y=y1 error=0 for (x=x1;x<=xn;x++) setpixel(x,y,colour) error=error+s if (error>=05) y++ error--
Αλγόριθμοι Σχεδίασης Ευθειών Αλγόριθμος 4 - Bresenham Με κατάλληλη κλιμάκωση των s, error και της συνθήκης επιλογής του pixel οι πραγματικές μεταβλητές αντικαθίστανται από ακέραιες Αυτό δεν επηρεάζει την επιλογή του pixel Πολλαπλασιάζοντας με dx = x n x 1, τα s, error γίνονται ακέραιοι Θέτουμε s = dy Η σύγκριση για την επιλογή του επόμενου pixel γίνεται error dx/2
Αλγόριθμοι Σχεδίασης Ευθειών Αλγόριθμος 4 - Bresenham Το error είναι πάντα ακέραιο, άρα αντί για dx/2 χρησιμοποιείται το dx/2 Το dx/2 υπολογίζεται με ολίσθηση Το dx/2 αφαιρείται από την αρχική τιμή του error Η σύγκριση για την επιλογή του επόμενου pixel γίνεται error 0
Αλγόριθμοι Σχεδίασης Ευθειών Αλγόριθμος 4 - Bresenham Ο ακόλουθος αλγόριθμος είναι γνωστός ως αλγόριθμος του Bresenham line4 (x1,y1,xn,yn,colour) int x1,y1,xn,yn,colour int error,x,y,dx,dy dx=xn-x1; dy=yn-y1 error=-dx/2; y=y1 for (x=x1; x<=xn; x++) setpixel(x,y,colour) error=error+dy if (error>=0 y++ error=error-dx
Αλγόριθμοι Σχεδίασης Ευθειών Αλγόριθμος 4 - Bresenham Ο αλγόριθμος λειτουργεί για ευθύγραμμα τμήματα για τα οποία ισχύει x 1 < x n και έχουν κλίση μεταξύ 0 και 1 Τα ανωτέρω ευθύγραμμα τμήματα βρίσκονται στο 1ο οκταμόριο Ο αλγόριθμος εύκολα επεκτείνεται για τα υπόλοιπα οκταμόρια με εναλλαγές των x, y
Αλγόριθμοι Σχεδίασης Ευθειών Αλγόριθμος 4 - Bresenham Σχέση οκταμορίων-μεταβλητών κίνησης Το οκταμόριο προσδιορίζεται με μεταφορά του ευθύγραμμου τμήματος, ώστε το (x 1, y 1 ) να συμπέσει με την αρχή των αξόνων Τότε το ευθύγραμμο τμήμα θα βρίσκεται μέσα σε ένα οκταμόριο
Αλγόριθμος Σχεδίασης Κύκλου Αλγόριθμος Σχεδίασης Κύκλου O κύκλος χρησιμοποιείται σε πολλές εφαρμογές σαν στοιχειώδες σχήμα Κατά τη σχεδίαση κύκλου λαμβάνεται υπόψη η 8-πλή συμμετρία Αρκεί να εξεταστεί η σχεδίαση σε ένα οκταμόριο πχ το δεύτερο
Αλγόριθμος Σχεδίασης Κύκλου Αλγόριθμος Σχεδίασης Κύκλου Για κύκλο με κέντρο το O και ακτίνα r, αν προσδιοριστεί σημείο (x, y), σχεδιάζονται τα 8 συμμετρικά circlesymmetry (x,y,colour) int x,y,colour setpixel(x,y,colour) setpixel(y,x,colour) setpixel(y,-x,colour) setpixel(x,-y,colour) setpixel(-x,-y,colour) setpixel(-y,-x,colour) setpixel(-y,x,colour) setpixel(-x,y,colour)
Αλγόριθμος Σχεδίασης Κύκλου Αλγόριθμος Σχεδίασης Κύκλου Για τον υπολογισμό των pixels του κύκλου που βρίσκονται στο 2ο οκταμόριο χρησιμοποιείται ο αλγόριθμος του Bresenham Έστω ότι έχει επιλεγεί το (x i, y i ) ως το πλησιέστερο στην ιδεατή πορεία του κύκλου Στο 2ο οκταμόριο άξονας ταχύτερης κίνησης είναι ο x (x i + 1, y i ) ή (x i + 1, y i 1);
Αλγόριθμος Σχεδίασης Κύκλου Αλγόριθμος Σχεδίασης Κύκλου Ο Bresenham έδειξε ότι μια καλή μεταβλητή απόφασης για την επιλογή του κατάλληλου pixel στο βήμα i είναι η όπου e i = d 1 d 2 d 1 = y 2 i y 2 και d 2 = y 2 (y i 1) 2
Αλγόριθμος Σχεδίασης Κύκλου Αλγόριθμος Σχεδίασης Κύκλου Άν e i 0, επιλέγεται το (x i + 1, y i 1) διαφορετικά επιλέγεται το (x i + 1, y i ) e i = 2(x i + 1) 2 + y 2 i + (y i 1) 2 2r 2 και e i+1 = e i + 4x i + 6 + 2(y 2 i+1 y2 i ) 2(y i+1 y i ) Για τον υπολογισμό του e i+1 : Αν e i < 0 y i+1 = y i e i+1 = e i + 4(x i + 1) + 2 Αν e i 0 y i+1 = y i 1 e i+1 = e i + 4(x i + 1) + 2 4(y i 1) Η αρχική τιμή e 1 υπολογίζεται ως e 1 = 2 + r 2 + (r 1) 2 2r 2 = 3 2r
Αλγόριθμος Σχεδίασης Κύκλου Αλγόριθμος Σχεδίασης Κύκλου Για κέντρο το O χρησιμοποιείται η circlesymmetry Αν το κέντρο είναι διαφορετικό, πχ το (x c, y c ) τότε αρκεί να γίνει κλήση της ως circlesymmetry(x+xc,y+yc,colour) circle (r,colour) int r,colour int x,y,e x=0; y=r e=3-2*r while (x<=y) circlesymmetry(x,y,colour) x++ if (e>=0) y--; e=e-4*y e=e+4*x+2
Αλγόριθμοι Σχεδίασης Κωνικών Τομών Οι κωνικές τομές (έλλειψη, υπερβολή, παραβολή) είναι βασικά γεωμετρικά σχήματα Μετά την ευθεία και τον κύκλο έχουν αποτελέσει αντικείμενο έρευνας στα γραφικά Παρουσιάζεται η μεθοδολογία των Αγάθος-Θεοχάρη-Μπέμ Ακολουθείται το σκεπτικό του Bresenham Γρήγορος αλγόριθμος, απαιτεί μικρότερη ακρίβεια ακεραίων, εξασφαλίζει σωστές μεταβάσεις μεταξύ περιοχών σχεδίασης
Έστω έλλειψη με κέντρο (0, 0) και άξονες παράλληλους με X, Y Η εξίσωση της έλλειψης είναι x 2 a 2 + y2 b 2 = 1
Η έλλειψη έχει 4πλή συμμετρία Αρκεί να δημιουργηθεί το τόξο που βρίσκεται στο 1ο τεταρτημόριο Διακρίνονται δύο περιοχές που χωρίζονται από το σημείο όπου dy/dx = 1 Στην 1η περιοχή βασικός άξονας κίνησης είναι ο X Στη 2η περιοχή βασικός άξονας κίνησης είναι ο Y
Μεταβλητή Απόφασης Περιοχής 1 Έστω ότι ο αλγόριθμος ξεκινά από το (0, b) της 1ης περιοχής Σε κάθε βήμα η τιμή του x αυξάνεται κατά 1 ενώ για το y πρέπει να λαμβάνεται η απόφαση αν θα παραμένει ίδια ή θα μειώνεται κατά 1
Ορίζονται d1 = y 2 i y 2 και d2 = y 2 (y i 1) 2 Ορίζεται d = d1 d2 Έστω ε = y i y Η συνάρτηση απόφασης γίνεται d(ε) = 2ε 2 + 5y i ε + 1 2y i Η d(ε) είναι γνήσια αύξουσα στο [, y i ]
Για την τιμή απόφασης χρησιμοποιείται η τιμή του ε στη θέση ε = 1 2 και προκύπτει d( 1 2 ) = 1 2 Άρα αν d 1 2, επιλέγεται το pixel B διαφορετικά, επιλέγεται το pixel D
Οι υπολογισμοί διευκολύνονται αν d = a 2 (d1 d2) Η συνάρτηση απόφασης γίνεται d(ε) = 2a 2 ε 2 + 4a 2 y i ε + a 2 2a 2 y i Η απόφαση γίνεται αν d a2 2, επιλέγεται το pixel B διαφορετικά, επιλέγεται το pixel D
Η τιμή της μεταβλητής απόφασης στο βήμα i της περιοχής 1 είναι d 1,i = = 2a 2 b 2 + 2b 2 (x i + 1) 2 + a 2 (y i ) 2 + a 2 (y i 1) 2 Το d 1,i+1 ορίζεται με βάση το d 1,i ως αν d 1,i > a 2 /2 : d 1,i+1 = d 1,i + 2b 2 + 4b 2 (x i + 1) 4a 2 (y i 1) αν d 1,i a 2 /2 : d 1,i+1 = d 1,i + 2b 2 + 4b 2 (x i + 1) Η αρχική τιμή d 1,0 υπολογίζεται για το 1ο pixel της περιοχής 1, (0, b): d 1,0 = 2b 2 + a 2 (1 2b)
Μετάβαση από την Περιοχή 1 στην Περιοχή 2 Απαιτείται η ύπαρξη ενός κριτηρίου που να ανιχνεύει το τέλος της 1ης περιοχής Στο σημείο αυτό αλλάζει ο άξονας κύριας κατεύθυνσης και η μεταβλητή απόφασης Ένα τέτοιο κριτήριο είναι το εξής d(3/2) = 4a 2 (y i 1) + a 2 /2 Και το κριτήριο αλλαγής περιοχής είναι αν d 4a 2 (y i 1) + a 2 /2, παραμένει η περιοχή 1 διαφορετικά γίνεται μετάβαση στην περιοχή 2 Η αρχική τιμή της μεταβλητής απόφασης d 2,i για την περιοχή 2 υπολογίζεται ως d 2,i = d 1,i a 2 (2y i 1) b 2 (2x i + 1)
Εισαγωγή Ευθεία Κύκλος Έλλειψη Μεταβλητή Απόφασης Περιοχής 2 Αλλάζουν οι εκφράσεις για τα d1, d2: d1 = (x i + 1) 2 x 2 d2 = x 2 x 2 i
Έχοντας επιλέξει το pixel A στη γραμμή i, το κριτήριο απόφασης για το επόμενο pixel θα είναι αν d b 2 /2, επιλέγεται το pixel D διαφορετικά, επιλέγεται το pixel C Η μεταβλητή απόφασης για το βήμα i της περιοχής 2 είναι d 2,i = b 2 (d1 d2) = = 2a 2 b 2 +b 2 x 2 i +2a 2 (y i 1) 2 +b 2 (x i +1) 2
Εισαγωγή Ευθεία Κύκλος Έλλειψη Το d 2,i+1 υπολογίζεται ως αν d 2,i > b 2 /2, τότε d 2,i+1 = d 2,i + 2a 2 4a 2 (y i 1) διαφορετικά, d 2,i+1 = d 2,i + 2a 2 + 4b 2 (x i + 1) 4a 2 (y i 1)