Γραφικά με Η/Υ Αλγόριθμοι σχεδίασης βασικών 2D σχημάτων (ευθεία)
Σχεδίαση ευθείας θί με σάρωση (παρουσίαση προβλήματος) σχεδίαση ευθείας AB, με σάρωση, όπου A=(0,1) και B=(5,4) ποιο είναι το επόμενο pixel που θα πρέπει να ενεργοποιήσουμε μεταξύ των Α και Β; 2/ 37
Σχεδίαση ευθείας με σάρωση (εύρεση επόμενου pixel) οριζόντια ευθεία: ενεργοποίηση πρώτου pixel και αύξηση της τετμημένης κατά 1. κάθετη ευθεία: ενεργοποίηση πρώτου pixel και αύξηση της τεταγμένης κατά 1. διαγώνια ευθεία: ενεργοποίηση πρώτου pixel και αύξηση των συντεταγμένων x και y κατά 1. Τι θα πρέπει να κάνουμε στη γενική περίπτωση; 3/ 37
Σχεδίαση ευθείας θί με σάρωση (γενική περίπτωση, εύρεση επόμενου pixel) αυξάνουμε τη τετμημένη x κατά 1 και επιλέγουμε το pixel που είναι πλησιέστερο στην ευθεία AB. αλλά πως βρίσκουμε το πλησιέστερο ; (x 1, y 1 ); A (x 2, y 2 ); B 4/ 37
Σχεδίαση ευθείας θί με σάρωση (πραγματικές αποκλίσεις) (x 1, y 1 ); οι κάθετες αποστάσεις (μπλε) είναι ανάλογες των πραγματικών αποκλίσεων (μαύρο). «όμοια τρίγωνα» B A (x 2, y 2 ); 5/ 37
Κριτήρια σωστού αλγορίθμου (σχεδίασης ευθειών) να φαίνονται ευθείες στην οθόνη (pixels όσοτοδυνατόν πλησιέστερα στην μαθηματική πορεία της ευθείας) να τελειώνουν ακριβώς να έχουν σταθερή φωτεινότητα φωτεινότητα ανεξάρτητη του μήκους κλίσης να σχεδιάζονται γρήγορα ελάχιστο πάχος ένα pixel 6/ 37
Βασικός αλγόριθμος (εξίσωση ευθείας) 7/ 37
Εξίσωση ευθείας θί ίδονται οι συντεταγμένες των σημείων Α(x 1,y 1 )&Β(x 2,y 2 ). η εξίσωση της ευθείας ΑΒ, δίνεται από την σχέση: όπου m b = = Δ = y y y 2 1 Δ x x 2 x 1 1 m * x 1 y : κλίση ευθείας : σημείο τομής της ΑΒμε τον άξονα x ΑΒμε τον άξονα y 8/ 37
Περιγραφή Βασικού Αλγόριθμου σχεδίαση ευθείας από αριστερά προς τα δεξιά με κλίση m(0 < m 1) Για να προσδιορίσουμε τα ενδιάμεσα pixels χρησιμοποιούμε την εξίσωση της ευθείας, ήτοι: 1. εισάγουμε τις συντεταγμένες (x 1,y 1 ) & (x 2,y 2 ) των άκρων 2. θέτουμε: m b = = 3. θέτουμε: (στρογγυλοποίηση) y 2 y 1 x 2 x 1 y y y1 * x x 2 1 * x1 2 x1 4. επαναλαμβάνουμε το «βήμα 3» x 2 -x 1 φορές 9/ 37
Παράδειγμα 1 Να σχεδιαστεί ευθεία ΑΒ χρησιμοποιώντας τον αλγόριθμο της εξίσωσης, όπου Α(0,0) & Β(5,6). Λύση Τότε: m = (6-0)/(5-0)= 1.2 και b=0,όπου 1<m (2o οκτ.) Άρα : y = 1.2*x+0 θα χρησιμοποιούμε μ λοιπόντην εξίσωση y = 1.2*x+ x+0 για να ενεργοποιήσουμε τα pixels που αντιστοιχούν σε αυτήν 10 / 37
Παράδειγμα 1 (συνέχεια) χ ψ ψ στρ 0 0 0 1 1.2 1 2 2.4 2 3 3.6 4 4 4.8 5 5 6 6 6 5 4 3 2 1 0 0 1 2 3 4 5 11 / 37
Παρατηρήσεις Ο βασικός αλγόριθμος ή αλγόριθμος της εξίσωσης είναι αλγόριθμος σάρωσης παράγει πολλαπλασιασμούς χρονοβόρες στρογγυλοποιήσεις και 12 / 37
Επαναληπτικός (αυξητικός) 13 / 37
Επαναληπτικός Αλγόριθμος DDA Έστω ότι θέλουμε να σχεδιάσουμε μια ευθεία ΑΒ (από αριστερά ρ προς τα δεξιά,, χ 2 >χχ 1 ) με κλίση 0<m 1,, όπου Α(x 1,y 1 ), B(x 2,y 2 )&x 2 >x 1 για την οποία ισχύει: m b = = y x 2 2 y x 1 1 = y1 m * x 1 Δ Δ y x 14 / 37
Επαναληπτικός Αλγόριθμος DDA ποιο είναι το επόμενο pixel; υπολογίζουμε το επόμενο pixel (x i+1, y i+1 ) λαμβάνοντας υπόψη το προηγούμενό του (x i, y i ), αποφεύγοντας τον πολλαπλασιασμό, σε κάθε επανάληψη αυξάνοντας το χ i κατά χ s =1 το y i μεταβάλλεται κατά y s =m x y i+ 1 i+ 1 = = x i + x m* x s i+ 1 = x i + b + 1 = m* x i + b + m* x s = y i + y s = y i + m γενικά ο αλγόριθμος DDA βασίζεται στις συντεταγμένες των άκρων διαφορές x & y & μεταβολές χ s &y s, όπου x s = x /step&y s = y /stepμε step=max{ χ, y } 15 / 37
Επαναληπτικός Αλγόριθμος DDA ποιο είναι το επόμενο pixel; Κλίση x s y s Κλίση x s y s τα δεξιά: ά προς τ αριστερά από α 1 ο 1 m ογδοημόριο 0 < m 1 2 ο ογδοημόριο 1 < m 3 ο ογδοημόριο 1 < m 4 ο ογδοημόριο 0 < m 1 1/m 1 1/m -1 1 -m 1 ο -1 -m ογδοημόριο 0 < m 1 2 ο ογδοημόριο 1 < m 3 ο ογδοημόριο 1 < m 4 ο ογδοημόριο 0 < m 1-1/m -1-1/m 1-1 m από δε εξιά προ ςτα αρι στερά: 16 / 37
Περιγραφή Επαναληπτικού Αλγόριθμου DDA 1. Εισάγουμε τις συντεταγμένες των άκρων 2. Υπολογίζουμε τα x και y 3. Αν abs( x ) > abs( y ) τότε step = abs( x ) αλλιώς step = abs( y ) 4. Καθορίζουμε την μετατόπιση για το επόμενο pixel, x s = x / step & y s = y / step 5. Ενεργοποιούμε το πρώτο pixel: x=x 1,y=y 1 6. Θέτουμε x=x+x s &y=y+y s, για τον υπολογισμό των ενδιάμεσων pixels και στρογγυλοποιούμε 7. Επαναλαμβάνουμε το «βήμα 6» step φορές 17 / 37
Παράδειγμα 2 Να σχεδιαστεί ευθεία ΑΒ (από αριστερά προς δεξιά, χ 2 >χ 1 ) χρησιμοποιώντας τον αλγόριθμο DDA, όπου Α(0,0) & Β(5,6) Λύση m=1.2>1 1 2 ο ογδοημόριο m >1 m>1 (b=0 & y=1.2x+0) x = 5 y =6 abs( y )>abs( x ) step = abs( y )=6 x s = 1/m=0.833 y s = 1 m 1 m 1 18 / 37
Παράδειγμα 2 (συνέχεια) έ ε χ Χ στρ ψ x 1 =0 0 y 1 =0 x 2 =x 1 +1/m=0.833 1 y 2 =1 x 3 =x 2 +1/m=1.666 2 y 3 =2 x 4 =x 3 +1/m=2.499 2 y 4 =3 x 5 =x 4 +1/m=3.332 3 y 5 =4 x 6=x 5+1/m=4.165 4 y 6 =5 x 7 =x 6 +1/m=4.998 5 y 7 =6 6 5 4 3 2 1 0 0 1 2 3 4 5 19 / 37
Παρατηρήσεις Ο αλγόριθμος DDA, είναι αλγόριθμος σάρωσης περιορίζει αισθητά τους πολλαπλασιασμούς παράγει χρονοβόρες στρογγυλοποιήσεις δεν χρησιμοποιεί μεταβλητές απόφασης 20 / 37
Σύγκριση: Εξίσωσης & DDA 6 6 5 5 4 4 3 3 2 2 1 1 0 0 0 1 2 3 4 5 0 1 2 3 4 5 21 / 37
Bresenham 22 / 37
Επαναληπτικός Αλγόριθμος Bresenham ο αλγόριθμος του Bresenham (επαναληπτικός), είναι ένας αλγόριθμος σάρωσης ευθείων και χρησιμοποιεί μόνο πρόσθεση ακεραίων, αφαίρεση και πολλαπλασιασμό επί δύο, πράξεις που γίνονται ταχύτατα στον υπολογιστή. είναι σχεδιασμένος, ώστε κάθε επανάληψη να μεταβάλλει μια από τις τιμές των συντεταγμένων κατά μία μονάδα. Η άλλη συντεταγμένη μπορεί να μεταβληθεί, αλλά μπορεί και όχι, γεγονός που εξαρτάται από μια μεταβλητή απόφασης ρ k. η απόφαση για το ποιο είναι το επόμενο pixel; εξαρτάται αποκλειστικά από το πρόσημο αυτής μεταβλητής. 23 / 37 της
Αλγόριθμος Bresenham Έστω ότι θέλουμε να σχεδιάσουμε μια ευθεία ΑΒ (από αριστερά ρ προς τα δεξιά,, χ 2 >χχ 1 ) με κλίση 0 m 1,, όπου Α(x 1,y 1 )&B(x 2,y 2 ) για την οποία ισχύει: m = b = y x 2 2 y 1 x 1 = y1 m * x 1 Δ Δ y x 24 / 37
Αλγόριθμος Bresenham ποιο είναι το επόμενο pixel; Βρισκόμαστε στο pixel (x k,y k ) και πρέπει να αποφασίσουμε αν θα μετακινηθούμε στo pixel (x k+1, y k ) ή στo pixel (x k+1, y k+1 ) Ισχύει: x k+1 =x k +1 & y k+1 = y k ή y k + 1 Στην θέση x κ+1 συμβολίζουμε με d 1 και d 2 τις κατακόρυφες αποκλίσεις. Άρα θα έχουμε: y = mx κ +1 + b = m(x κ + 1) + b d 1 = y y κ d 2 = (y κ +1) y =m(x κ + 1) + b - y k = y κ + 1 - m(x κ + 1) - b d 1 -d 2 =2m(x κ + 1) - 2y κ + 2b - 1 y 25 / 37
Υπολογισμός της ρ k Η μεταβλητή ρ κ δίδεται από την σχέση ρ κ = x (d 1 d 2 )= 2 y x κ -2 x y κ + c όπου d 1 -d 2 = 2m(x κ + 1) - 2y κ + 2b 1 & x = x k+1 -x k >0 y Αν το pixel (x k+1,y k ) είναι πιο μακριά από την ευθεία y απ ότι το pixel (x k+1, y k+1 ) (δηλαδή d 1 >d 2 ), τότε η μεταβλητή απόφασης ρ κ είναι θετική, οπότε σχεδιάζουμε το πλησιέστερο pixel (x k+1, y k+1 ) ως προς την ευθεία y. 26 / 37
ιαδικασία επιλογής επόμενου pixel Για κάθε (x k, y k ), το επόμενο σημείο είναι (x k +1, y k +1) όταν ρ k 0 (d1>d2) & ρ k+1 = ρ k +2( y x ) (x k +1, y k ) όταν ρ k <0 (d1<d2) & ρ k+1 = ρ k +2 y μεταβλητή εκκίνησης ρ 0 = 2 y - x 27 / 37
Περιγραφή αλγόριθμου Bresenham σχεδίαση ευθείας από αριστερά προς τα δεξιά με κλίση m(0 < m 1) 1. Εισάγουμε τις συντεταγμένες των άκρων της ευθείας 2. Υπολογίζουμε τις σταθερές x, y και την ρ 0 =2 y x 3. Ενεργοποιούμε το πρώτο σημείο (x 0,y 0) και στην συνέχεια 4. Για κάθε x κ κατά μήκος της ευθείας, ξεκινώντας από κ =0, κάνουμε το τέστ: Αν ρκ<0 το επόμενο σημείο είναι το (x κ+1,y κ ) και ρ κ+1 = ρ κ +2 y Αν ρ κ 0 το επόμενο σημείο είναι (x κ+1,y κ+1 ) και ρ κ+1 = ρ κ +2( y - x) 5. Επαναλαμβάνουμε το «βήμα 4» x φορές 28 / 37
Αλγόριθμος Bresenham Αν m>1 έχουμε εναλλαγή των x, y μετακινούμαστε κατά τον άξονα y κατά μοναδιαία βήματα και υπολογίζουμε το x στην περίπτωση που η σχεδίαση γίνεται από δεξιά προς τα αριστερά τα x&y μειώνονται 29 / 37
Παρατηρήσεις Ο αλγόριθμος Bresenham, είναι επαναληπτικός αλγόριθμος σάρωσης δεν χρησιμοποιεί πολλαπλασιασμούς και διαιρέσεις χρησιμοποιεί προσθέσεις και αφαιρέσεις δεν παράγει χρονοβόρες στρογγυλοποιήσεις χρησιμοποιεί μεταβλητή απόφασης όταν χρησιμοποιεί ακεραίους έχει πολύ καλή προσέγγιση της ευθείας και σχεδιάζει κύκλους - καμπύλες 30 / 37
Παράδειγμα 3 Έστω ότι θέλουμε να σχεδιάσουμε το ευθύγραμμο τμήμα με αρχή στο (20,10) & τέλος στο (30,18) κλίση: m = 0,8 < 1 μεταβλητή εκκίνησης: ρ 0 = 2 y - x = 6, επίσης x = 10, y = 8 & 2 y = 16 & 2 x = 20. 31 / 37
Παράδειγμα 3 (συνέχεια) τέλος 6 (21,11) 11) 2 αρχή 32 / 37
Παράδειγμα 3 (συνέχεια) Αρχίζοντας από το σημείο (x 0,y 0 )=(20,10) οι ακόλουθες θέσεις των pixels είναι: 9 8 7 6 5 4 3 2 1 Αν ρκ<0 το επόμενο σημείο είναι το (x κ+1, y κ ) και ρ κ+1 = ρ κ +2 y Αν ρ κ 0 το επόμενο σημείο είναι (x κ+1, y κ+1 ) και ρ κ+1 = ρ κ +2( y - x) ρ 0 =2 y- x=6 >0 ρ 1 > ρ 0 + 2( y - x) ) 33 / 37
Παράδειγμα 3 (συνέχεια) τελικά: 34 / 37
Αλγόριθμοι σχεδίασης ευθείας Αλγόριθμοι σχεδίασης Βασικός Επαναληπτικός ευθείας (Εξίσωσης) (αυξητικός) DDA Bresenham (αυξητικός) σάρωσης πολλαπλασιασμοί ή διαιρέσεις (αρκετοί) (ελάχιστοι) - στρογγυλοποιήσεις - μεταβλητή απόφασης - - 35 / 37