63
ΠΑΝΕΠΙΣΤΗΜΙO ΠΕΙΡΑΙΩΣ UNIVERSITY OF PIRAEUS ΤΜΗΜΑ ΔΙΔΑΚΤΙΚΗΣ ΤΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ DEPARTMENT OF TECHNOLOGY EDUCATION AND DIGITAL SYSTEMS Γραφικά Υπολογιστικών Συστημάτων και Εικονική Πραγματικότητα Σημειώσεις Μαθήματος Αναπλ. Καθηγ. Νικήτας-Μαρίνος Σγούρος ΣΥΓΧΡΗΜΑΤΟΔΟΤΗΣΗ από την Ευρωπαϊκή Ένωση, Ευρωπαϊκό Κοινωνικό Ταμείο, Επιχειρησιακό Πρόγραμμα «Κοινωνία της Πληροφορίας» Έργο EΠΙΚΟΥΡΟΣ «Σχεδιασμός, ανάπτυξη και παροχή τηλεματικών υπηρεσιών για την εκπαιδευτική διαδικασία στο Πανεπιστήμιο Πειραιώς» Κωδικός MIS: 103485, Μέτρο 1.2 Πειραιάς, 2006

Σημειωσεις Γραφικα Υπολογιστων

Embed Size (px)

Citation preview

Page 1: Σημειωσεις Γραφικα Υπολογιστων

ΠΑΝΕΠΙΣΤΗΜΙO ΠΕΙΡΑΙΩΣ

UNIVERSITY OF PIRAEUSΤΜΗΜΑ ΔΙΔΑΚΤΙΚΗΣ ΤΗΣ

ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

DEPARTMENT OF TECHNOLOGY EDUCATION AND DIGITAL

SYSTEMS

Γραφικά Υπολογιστικών Συστημάτων και Εικονική Πραγματικότητα

Σημειώσεις Μαθήματος Αναπλ. Καθηγ. Νικήτας-Μαρίνος Σγούρος

ΣΥΓΧΡΗΜΑΤΟΔΟΤΗΣΗ από την Ευρωπαϊκή Ένωση, Ευρωπαϊκό Κοινωνικό Ταμείο, Επιχειρησιακό Πρόγραμμα «Κοινωνία της Πληροφορίας»

Έργο EΠΙΚΟΥΡΟΣ «Σχεδιασμός, ανάπτυξη και παροχή τηλεματικών υπηρεσιών

για την εκπαιδευτική διαδικασία στο Πανεπιστήμιο Πειραιώς» Κωδικός MIS: 103485, Μέτρο 1.2

Πειραιάς, 2006

Page 2: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

1.1. Εισαγωγή

Τα Γραφικά µε Υπολογιστές (Computer Graphics) αποτελούν τον κλάδο της Πληροφορικής που ασχολείται µε τη γεωµετρική σύνθεση και ανάλυση εικόνων στον υπολογιστή. Σε αντίθεση µε παρεµφερείς κλάδους, όπως η Επεξεργασία Εικόνων, η αναπαράσταση των εικόνων στα Γραφικά γίνεται µε βάση τα πρωτογενή γεωµετρικά αντικείµενα (π.χ. ευθείες, κύκλους, πολύγωνα) από τα οποία αποτελούνται. Σκοπός του παρόντος µαθήµατος θα είναι η παρουσίαση βασικών τεχνικών σύνθεσης εικόνων µε τα χαρακτηριστικά που αναφέραµε. Για τη µελέτη των τεχνικών που θα εξετάσουµε θα χρησιµοποιηθεί η γλώσσα προγραµµατισµού Java. Στην τρέχουσα ενότητα θα εξετάσουµε τον τρόπο υλοποίησης πρωτογενών γεωµετρικών αντικειµένων στη γλώσσα αυτή. Ενα σηµαντικό µερος του κώδικα που θα χρησιµοποιηθεί κατά τη διάρκεια του µαθήµατος θα στηρίζεται στο βιβλίο: Leen Ameraal, "Computer Graphics for Java Programmers", John Wiley & Sons 1998.

1.2. Σχεδιασµός Ευθυγράµων Τµηµάτων & Ψηφίδων (Pixels) στη Java

Η βασική βιβλιοθήκη που παρέχεται στη Java για την σχεδίαση γραφικών αντικειµένων ονοµάζεται Abstract Window Toolkit (AWT). Η συγκεκριµένη βιβλιοθήκη περιέχει την κλάση Graphics που προσφέρει µεθόδους µε τις οποίες µπορούν να σχεδιαστούν πρωτογενή γεωµετρικά αντικείµενα (ευθείες, ορθογώνια κλπ). Επιπλέον στη Java ορίζεται και η κλάση Canvas η οποία παρέχει ένα χώρο σχεδίασης στον οποίο µπορούν να εφαρµοστούν οι µέθοδοι της κλάσης Graphics.

Ενα ευθύγραµµο τµήµα στη Java ορίζεται µε βάση τις συντεταγµένες των δύο άκρων του. Πιο συγκεκριµένα, αν g είναι ένα αντικείµενο της κλάσης Graphics το αντικείµενο αυτό θα περιέχει τη µέθοδο drawLine η οποία µπορεί να κληθεί ως ακολούθως:

g.drawLine(xA, yA, xB, yB) όπου Α (xA, yA) και Β (xB, yB) τα άκρα του συγκεκριµένου ευθύγραµµου τµήµατος.

Ενα ορθογώνιο παραλληλεπίπεδο σχεδιάζεται µε τη χρήση της µεθόδου drawRect. Η µέθοδος µπορεί να κληθεί ως ακολούθως:

g.drawRect(xA, yA, width, height) όπου το σηµείο Α (xA, yA) καθορίζει την άνω αριστερή κορυφή του παραλληλεπιπέδου και width (xA+w) και height (yA+w) καθορίζουν το πλάτος και το ύψος του συγκεκριµένου σχήµατος.

ΠΑΡΑ∆ΕΙΓΜΑ

Το παρακάτω πρόγραµµα σχεδιάζει ένα ορθογώνιο στο µέσο της οθόνης.

import java.awt.*; import java.awt.event.*;

public class MiddleRect extends Frame public static void main(String[] args)new MiddleRect();

12/11/2003 2

Page 3: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

MiddleRect() super("Ορθογώνιο στη Μέση"); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e)System.exit(0);); setSize(200, 100); add("Center", new CvMiddleRect()); show();

class CvMiddleRect extends Canvas public void paint(Graphics g) Dimension d = getSize(); int maxX = d.width - 1, maxY = d.height - 1; g.setColor(Color.red); g.drawRect(maxX/4, maxY/4, maxX/2, maxY/2); // (*)

Το παραπάνω πρόγραµµα θα µπορούσε να χρησιµοποιεί τη µέθοδο drawLine αν η γραµµή (*) είχε αντικατασταθεί από την ακολουθία εντολών

g.drawLine(maxX/4, maxY/4, 3*maxX/4, maxY/4); g.drawLine(3*maxX/4, maxY/4, 3*maxX/4, 3*maxY/4); g.drawLine(3*maxX/4, 3*maxY/4, maxX/4, 3*maxY/4); g.drawLine(maxX/4, 3*maxY/4, maxX/4, maxY/4);

Οσο παράξενο και αν φαίνεται η Java δεν µας προσφέρει κάποια ειδική συνάρτηση µε την οποία µπορούµε να σχεδιάζουµε µεµονωµένες ψηφίδες. Ενας τρόπος για να αντιµετωπίσουµε τη συγκεκριµένη έλλειψη είναι να καλέσουµε τη µέθοδο drawLine ως εξής:

g.drawLine(x, y, x, y) Πέρα από τις µεθόδους που σχεδιάζουν γραµµές, η Java περιέχει και µία σειρά από µεθόδους µε τις οποίες µπορεί να γεµίσει µε ένα συγκεκριµένο χρώµα κάποια περιοχή της οθόνης. Η πιο ενδιαφέρουσα από τις συναρτήσεις είναι η fillRect της κλάσης Graphics. Η κλήση της µεθόδου αυτής µε την παρακάτω µορφή:

g.fillRect(x, y, w, h)

θα έχει σαν αποτέλεσµα να γεµίσει µε το χρώµα που έχει οριστεί νωρίτερα στο πρόγραµµα το ορθογώνιο παραλληλεπίπεδο που περικλείεται από τα σηµεία (x, y) πάνω αριστερά και (x+w-1, y+h-1) κάτω δεξιά.

1.3. Λογικές Συντεταγµένες και Συντεταγµένες Συσκευής

Κάθε ψηφίδα στην οθόνη του υπολογιστή ταυτοποιείται µε τη χρήση δύο ακέραιων συντεταγµένων που ορίζουν τη θέση της ψηφίδας κατά την οριζόντια (x) και την κάθετη (y) διεύθυνση. Το ζεύγος των συντεταγµένων αυτών αναφέρεται ως

12/11/2003 3

Page 4: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

συνεταγµένες συσκευής (device coordinates). Συνήθως όµως κατά τη διάρκεια του υπολογισµού των γεωµετρικών χαρακτηριστικών µίας εικόνας προκύπτουν τιµές για τα σηµεία της που περιγράφονται από ζεύγη πραγµατικών τιµών. Τα ζεύγη αυτά αναφέρονται ως λογικές συντεταγµένες (logical coordinates). Κάθε σύστηµα γραφικών θα πρέπει να περιέχει µεθόδους µε τις οποίες οι λογικές συντεταγµένες που υπολογίζονται κατά τη διάρκεια της σύνθεσης µετατρέπονται σε συντεταγµένες συσκευής.

Στο µάθηµα αυτό θα ορίσουµε ένα σύστηµα λογικών συντεταγµένων που θα έχει σαν αρχή των αξόνων του το κέντρο του Canvas που θα χρησιµοποιείται για την απεικόνιση των δεδοµένων µας κάθε φορά. Στο σύστηµα αυτό ο οριζόντιος άξονας (x) θα αυξάνεται από αριστερά προς τα δεξιά και ο κατακόρυφος άξονας (y) θα αυξάνεται από κάτω προς τα πάνω.

Ενα σύστηµα συντεταγµένων ονοµάζεται ισοτροπικό (isotropic) όταν η κλίµακα µέτρησης που χρησιµοποιείται στους άξονες x και y είναι κοινή. Σε αντίθετη περίπτωση το σύστηµα ονοµάζεται ανισοτροπικό (anisotropic). Το παράδειγµα που ακολουθεί περιγράφει τον ορισµό ενός ισοτροπικού συστήµατος συντεταγµένων και τις µεθόδους µετατροπής από λογικές συντεταγµένες σε συντεταγµένες συσκευής και αντίστροφα.

ΠΑΡΑ∆ΕΙΓΜΑ

Το παρακάτω πρόγραµµα σχεδιάζει ένα τρίγωνο στη µέση της οθόνης. Οι συντεταγµένες των κορυφών του τριγώνου δίνονται σε λογικές συντεταγµένες.

import java.awt.*; import java.awt.event.*;

public class Tri extends Frame public static void main(String[] args)new Tri();

Tri() super("Triangle"); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e)System.exit(0);); setSize(600, 400); add("Center", new CvTri()); show();

class CvTri extends Canvas int maxX, maxY, xCenter, yCenter; float pixelSize, rWidth = 10.0F, rHeight = 10.0F;

void initgr() Dimension d = getSize(); maxX = d.width - 1; maxY = d.height - 1; pixelSize = Math.max(rWidth/maxX, rHeight/maxY); xCenter = maxX/2; yCenter = maxY/2; // Απο λογικές συντεταγµένες σε συντεταγµένες συσκευής

12/11/2003 4

Page 5: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

int iX(float x)return Math.round(xCenter+x/pixelSize); int iY(float y)return Math.round(yCenter-y/pixelSize);

// Απο συντεταγµένες συσκευής σε λογικές συντεταγµένες float fX(int x)return (x-xCenter)*pixelSize; float fY(int y)return (yCenter-y)*pixelSize;

public void paint(Graphics g) initgr(); float side = 0.95F * Math.min(rHeight, rWidth), h = side/2.0F * (float)Math.sqrt(3), xA, yA, xB, yB, xC, yC; xA = - side/2.0F; yA = - 0.5F * h; xB = side/2.0F; yB = yA; xC = 0.0F; yC = 0.5F * h;

g.drawLine(iX(xA), iY(yA), iX(xB), iY(yB)); g.drawLine(iX(xB), iY(yB), iX(xC), iY(yC)); g.drawLine(iX(xC), iY(yC), iX(xA), iY(yA));

Ασκηση: Μετατρέψτε τον παραπάνω κώδικα ώστε να µπορεί να χειριστεί και ανισοτροπικό σύστηµα συντεταγµένων.

12/11/2003 5

Page 6: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

2.1. Αλγόριθµοι Σχεδίασης ∆ιδιάστατων Γεωµετρικών Μορφών

Στην τρέχουσα ενότητα θα ασχοληθούµε µε την µαθηµατική αναπαράσταση και τον προγραµµατισµό αλγορίθµων για τη σχεδίαση διαφόρων οικογενειών διδιάστατων γεωµετρικών µορφών. Τα σχήµατα που θα εξετάσουµε θα περιλαµβάνουν κανονικά πολύγωνα, πολυσπειροειδή, παραµετρικά και αναδροµικά ορισµένες όπως και µορφοκλασµατικές µορφές (fractals).

2.2 Κανονικά Πολύγωνα

Κανονικά ονοµάζονται τα πολύγωνα στα οποία όλες οι πλευρές είναι ισοµήκεις και όλες οι γωνίες µεταξύ διαδοχικών πλευρών είναι ίσες µεταξύ τους. Ορίζουµε σαν ν-γωνο ένα πολύγωνο που αποτελείται από Ν πλευρές. Ο τρόπος µε τον οποίο µπορούµε να σχεδιάσουµε ένα ν-γωνο είναι αρκετά απλός, αρκεί να υπολογίσουµε και να αποθηκεύσουµε τις συντεταγµένες των κορυφών του και στη συνέχεια να τις συνδέσουµε κατάλληλα µε ευθύγραµµα τµήµατα.

Πιο συγκεκριµένα, αν αριθµήσουµε τις κορυφές και υποθέσουµε ότι η πρώτη κορυφή ενός ν-γώνου βρίσκεται στο θετικό άξονα x και στο σηµείο (radius, 0), όπου radius η ακτίνα του περιγεγραµµένου κύκλου του πολυγώνου, τότε οι υπόλοιπες κορυφές θα βρίσκονται σε ακέραια πολλαπλάσια της γωνίας 2π/Ν, όπου Ν ο αριθµός των κορυφών του πολυγώνου. Η ακριβής θέση της κάθε κορυφής ni θα δίνεται από τον τύπο:

ni = ( radius * cos(2π(i-1)/N), radius * sin(2π(i-1)/N) )

Οι κορυφές ενός ν-γώνου µπορούν να χρησιµοποιηθούν για τη σχεδίαση µίας σειράς από ενδιαφέροντα γεωµετρικά σχήµατα όπως οι ροζέττες. Οι ροζέττες είναι ν-γωνα στα οποία κάθε κορυφή συνδέεται µε κάθε άλλη κορυφή του ν-γώνου. Το σχήµα που προκύπτει χρησιµοποιείται συχνά για τον έλεγχο της ποιότητας σε οθόνες γραφικών αφού το πλήθος των γραµµών που χρησιµοποιούνται και η συµµετρία του σχήµατος βοηθάει στον εντοπισµό της ευκρίνειας και των παραµορφώσεων που εισάγονται κατά τη διάρκεια της σχεδίασης στις συσκευές αυτές.

Αξίζει εδώ να σηµειώσουµε ότι το σχήµα που προκύπτει αν σχεδιάσουµε τη ροζέττα που αντιστοιχεί σε ένα κανονικό πεντάγωνο είχε αποκτήσει µεταφυσική σηµασία κατά την αρχαιότητα. Το σχήµα είναι γνωστό σαν πεντάγραµµο και έχει το χαρακτηριστικό ότι κάθε ευθύγραµµο τµήµα του σχήµατος είναι φ (= 1.61803989...) φορές µεγαλύτερο από το αµέσως µικρότερό του ευθύγραµµο τµήµα. Ο συγκεκριµένος αριθµός αντιστοιχεί στο χρυσό κανόνα ο οποίος καθορίζει το λόγο (περίπου 5:3) µεταξύ πλάτους και ύψους σε ένα ορθογώνιο που πετυχαίνει το βέλτιστο εικαστικό αποτέλεσµα (π.χ. ο Παρθενώνας, η Τζοκόντα όπως και πολλοί πίνακες του Escher υπακούουν σε αυτό τον λόγο). Ενα άλλο χαρακτηριστικό του πενταγράµµατος είναι ότι στο εσωτερικό του µπορεί να οριστεί µία άπειρη ακολουθία από πενταγράµµατα µιάς και στο εσωτερικό του σχήµατος σχηµατίζεται ένα πεντάγωνο στο οποίο µπορούµε να εγγράψουµε ένα µικρότερο πεντάγραµµο κ.ο.κ.

ΠΑΡΑ∆ΕΙΓΜΑ

12/11/2003 6

Page 7: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Στο παρακάτω παράδειγµα κάθε φορά που ο χρήστης ενεργοποιεί το ποντίκι το πρόγραµµα σχεδιάζει µια ροζέττα µε αριθµό πλευρών που επιλέγεται τυχαία µεταξύ 3 και 28. Το χρώµα µε το οποίο σχεδιάζονται οι γραµµές του σχήµατος επιλέγεται και αυτό τυχαία. Παραδείγµατα σχηµάτων που παράγονται από το πρόγραµµα περιέχονται εδώ.

import java.awt.*; import java.awt.event.*;

class DrawRosette extends Frame public static void main(String[] args) new DrawRosette();

DrawRosette() super("Draw Rosette Pattern"); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); setSize(500, 400); add("Center", new Rosette()); setCursor(Cursor.getPredefinedCursor(CROSSHAIR_CURSOR)); show();

class Rosette extends Canvas float pixelSize; final float rWidth = 50.0F, rHeight = 50.0F; int centerX, centerY;

final float TWOPI=6.283185308F; int numOfVertices = 10; float radius, angle, delang; Point2D[] vertices = null; Color black = new Color(0, 0, 0); float dang = 0.0F;

Rosette() initgr(); addMouseListener(new MouseAdapter() public void mousePressed(MouseEvent evt) repaint(); );

void initgr() Dimension d = getSize(); int maxX = d.width - 1, maxY = d.height - 1; pixelSize = Math.max(rWidth/maxX, rHeight/maxY); centerX = maxX/2; centerY = maxY/2; radius = Math.min(rWidth, rHeight)/2.0F;

int iX(float x) return Math.round(centerX+x/pixelSize); int iY(float y) return Math.round(centerY-y/pixelSize);

12/11/2003 7

Page 8: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

float fx(int X) return (X-centerX)*pixelSize; float fy(int Y) return (centerY - Y) * pixelSize;

int rand()return (int)(Math.random() * 256);

int random(int maxVal)return (int)(Math.random() * maxVal);

public void paint(Graphics g) setBackground(black); Color curColor = new Color(rand(), rand(), rand()); initgr(); int left = iX(-rWidth/2), right = iX(rWidth/2), bottom = iY(-rHeight/2), top = iY(rHeight/2); do numOfVertices = random(28); while (numOfVertices < 3); vertices = new Point2D[numOfVertices]; delang = TWOPI/numOfVertices; for (int i=0; i<numOfVertices; i++) angle = i*delang + dang; vertices[i] = new Point2D((float)(radius*Math.cos(angle)), (float)(radius*Math.sin(angle))); for (int i = 0; i < numOfVertices; i++) for (int j = numOfVertices-1; j >= 0; j--) if (j > i) g.setColor(curColor); g.drawLine(iX(vertices[i].x), iY(vertices[i].y), iX(vertices[j].x), iY(vertices[j].y)); else break;

// Point2D.java: Class for points in logical coordinates.

class Point2D float x, y; Point2D(float x, float y)this.x = x; this.y = y;

Ασκηση: Μετατρέψτε τον παραπάνω κώδικα έτσι ώστε να σχεδιάζει µία ροζέττα µε σταθερό αριθµό πλευρών η οποία θα περιστρέφεται κατά 150 κάθε φορά που ο χρήστης ενεργοποιεί το ποντίκι.

2.3 Πολυσπειροειδή

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

αλγόριθµος δέχεται σαν είσοδο µία αρχική γωνία init_angle και ένα αρχικό µήκος init_dist και µεταβάλλει τόσο τη γωνία όσο και το µήκος του ευθυγράµµου τµήµατος το οποίο σχεδιάζει κάθε στιγµή κατά δύο σταθερές, την dangle για τη γωνία και την incr για το µήκος. Πιο συγκεκριµένα ο αλγόριθµος αποτελείται από τα εξής βήµατα:

1. cur_angle = init_angle, cur_dist = init_dist

12/11/2003 8

Page 9: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

2. Από τη θέση στην οποία βρίσκεσαι ζωγράφισε ένα ευθύγραµµο τµήµα µε µήκος cur_dist και µε διεύθυνση cur_angle. Η καινούργια σου θέση είναι το τέλος του ευθύγραµµου τµήµατος που µόλις σχεδιάστηκε.

3. cur_angle = cur_angle + dangle, cur_dist = cur_dist + incr

4. Εκτέλεσε επαναληπτικά τα βήµατα 2 και 3..

Ασκηση: Προγραµµατίστε τον παραπάνω αλγόριθµο. Το πρόγραµµα Java που θα αναπτυχθεί θα επιτρέπει στο χρήστη να σχεδιάζει ένα πολυσπειροειδές σχήµα µε τυχαίες αρχικές συνθήκες κάθε φορά που αυτός πατά το ποντίκι πάνω στην επιφάνεια σχεδίασης.

2.4 Παραµετρικές αναπαραστάσεις διδιάστατων µορφών

Οπως ήδη ξέρουµε από τη γεωµετρία η µαθηµατική αναπαράσταση διδιάστατων µορφών µπορεί να γίνει µε δύο τρόπους: µε τη χρήση εξισώσεων και µε τη χρήση συναρτήσεων. Για παράδειγµα, ένας κύκλος µπορεί να παρασταθεί µε τοn ακόλουθο τρόπο:

Εξίσωση: F(x, y) = x2+y2-r2 = 0,

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

Για να αντιµετωπιστούν οι περιορισµοί που αναφέραµε, στα γραφικά υπολογιστών χρησιµοποιείται η παραµετρική αναπαράσταση των διαφόρων µορφών . Πιο συγκεκριµένα, κατά την αναπαράσταση αυτή εισάγεται µια καινούργια µεταβλητή t που περιγράφει τη κίνηση ενός σηµείου στο χρόνο καθώς διαγράφει την καµπύλη του σχήµατος. Το µονοπάτι που διατρέχει το σηµείο αυτό στο διδιάστατο χώρο ορίζεται από δύο συναρτήσεις x(t) και y(t) που περιγράφουν τις λογικές συντεταγµένες του σηµείου κάθε στιγµή στον οριζόντιο και κάθετο άξονα κάθε χρονική στιγµή. Ο αλγόριθµος σχεδίασης δειγµατοληπτεί στο έυρος τιµών που κινείται το t και απεικονίζει τα σηµεία (x(t), y(t)) που αντιστοιχούν σε κάθε t.

Για παράδειγµα, η παραµετρική αναπαράσταση ενός ευθύγραµµου τµήµατος AB όπου Α (αx, αy) και Β (βx, βy) δίνεται από τους τύπους:

x(t) = αx + (βx-αx)t y(t) = αy + (βy- αy)t

όπου το t µπορεί να πάρει τιµές από 0 έως και 1. Η διεύθυνση ενός τέτοιου τµήµατος µας δίνεται από το διάνυσµα (βx-αx, βy- αy) και η κλίση από το λόγο (βy- αy)/(βx-αx), υποθέτοντας ότι ο παρονοµαστής είναι διάφορος του 0.

Η παραµετρική αναπαράσταση µίας έλλειψης περιγράφεται από τους τύπους:

12/11/2003 9

Page 10: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

x(t) = α*cos(2πt) y(t) = β*sin(2πt)

όπου το t παίρνει τιµές στο διάστηµα από 0 έως και 1. Οταν α=β τότε οι παραπάνω τύποι περιγράφουν έναν κύκλο. Μια πιο γενική αναπαράσταση για ελλειπτικές ή και κυκλικές µορφές επιτυγχάνεται µε τη χρησιµοποίηση των παρακάτω τύπων:

x(t) = α*cos(t)2/n y(t) = β*sin(t)2/n

όπου το t παίρνει τιµές από -π έως και π. Για n=2 οι παραπάνω τύποι µας δίνουν την έλλειψη. Τα σχήµατα που περιγράφονται από του παραπάνω τύπους είναι γνωστά σαν υπερελλείψεις (superellipses).

Ασκηση: Υλοποιήστε ένα πρόγραµµα σχεδίασης υπερελλείψεων για διάφορες τιµές του n.

Μια άλλη ενδιαφέρουσα κατηγορία µορφών παριστάνεται σε παραµετρική µορφή µε τη χρησιµοποιήση πολικών συντεταγµένων. Στην περίπτωση αυτή οι καρτεσιανές συντεταγµένες κάθε σηµείου του σχήµατος µας δίνονται από τους παρακάτω τύπους:

x(θ) = f(θ)*cos(θ) y(θ) = f(θ)*sin(θ)

∆ιαφορετικές τιµές της συνάρτησης f(θ) οδηγούν σε διαφορετικές οικογένειες σχηµάτων. Ορισµένες αντιπροσωπευτικές περιπτώσεις περιγράφονται από τους τύπους:

1. f(θ) = K(1+cos(θ)) (καρδιοειδείς µορφές) 2. f(θ) = K(1+cos(nθ)) (τριαντάφυλλα, το n είναι ακέραιος και καθορίζει τον

αριθµό των πετάλων σε κάθε λουλούδι) 3. f(θ) = Kθ (η έλικα του Αρχιµήδη)

Αρκετά από τα σχήµατα που αναφέραµε παραπάνω αποτελούν ειδικές περιπτώσεις τροχοειδών σχηµάτων. Το όνοµα της κατηγορίας αυτής περιγράφει τον τρόπο παραγωγής των σχηµάτων αυτών ο οποίος ακολουθεί την τροχία που διαγράφει ένα σηµείο προσαρµοσµένο σε ένα κύκλο (Α) καθώς ο Α κινείται στην περίµετρο ενός άλλου κύκλου (Β). Οταν ο Α κινείται στην εξωτερική µεριά του Β τότε δηµιουργείται ένα επιτροχοειδές σχήµα ενώ όταν ο Α κινείται στο εσωτερικό τότε παράγεται ένα υποτροχοειδές σχήµα. Οι εξισώσεις που περιγράφουν καθένα από τους δύο τύπους σχηµάτων είναι:

1. Επιτροχοειδή σχήµατα 1. x(t) = (α+β)*cos(2πt)-kcos(2π(α+β)t/β) 2. y(t) = (α+β)*sin(2πt)-ksin(2π(α+β)t/β)

2. Υποτροχοειδή σχήµατα 1. x(t) = (α-β)*cos(2πt)-kcos(2π(α-β)t/β) 2. y(t) = (α-β)*sin(2πt)-ksin(2π(α-β)t/β)

12/11/2003 10

Page 11: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Για παράδειγµα, η έλλειψη αποτελεί µια ειδική περίπτωση υποτροχοειδούς σχήµατος όταν α = 2β για οποιοδήποτε k.

Άσκηση: Υλοποιήστε ένα πρόγραµµα σχεδίασης όλων των τύπων σχηµάτων που αναφέρθηκαν στην παράγραφο 2.4

2.5 Αναδροµικές µορφές

Η πιο γνωστή αναδροµική µορφή που έχει παραχθεί µέχρι τις µέρες µας είναι η καµπύλη του Koch η οποία ανακαλύφθηκε το 1904 από τον Σουηδό µαθηµατικό Helge van Koch. Η παραγωγή της καµπύλης κίνησε το ενδιαφέρον αρκετών επιστηµόνων καθώς µπορεί να δηµιουργήσει µια καµπύλη απείρου µήκους σε µια πεπερασµένη επιφάνεια. Ο αλγόριθµος σχεδίασης της καµπύλης είναι αρκετά απλός και αποτελείται από την παρακάτω αναδροµική ακολουθία βηµάτων:

1. Χώρισε ένα ευθύγραµµο τµήµα σε τρία ίσα µέρη και αντικατέστησε το µεσαίο τµήµα µε ένα ισόπλευρο τρίγωνο η βάση του οποίου ταυτίζεται µε το µεσαίο τµήµα του ευθύγραµµου τµήµατος. Σχεδίασε όλες τις πλευρές του τριγώνου αυτού εκτός από τη βάση του.

2. Για καθένα από τα τέσσερα ευθύγραµµα τµήµατα που προκύπτουν εκτέλεσε το προηγούµενο βήµα.

Αν το αρχικό µήκος του ευθυγράµµου τµήµατος είναι 1 τότε µετά την εκτέλεση του πρώτου βήµατος η καµπύλη που θα προκύψει θα έχει µήκος 4/3. Γενικά το συνολικό µήκος της καµπύλης που θα προκύψει µετά την i-στη εκτέλεση των παραπάνων βηµάτων θα είναι (4/3)i. Καθώς το i τείνει στο άπειρο το µήκος της καµπύλης θα τείνει και αυτό στο άπειρο, η επιφάνεια όµως που θα καταλαµβάνει η καµπύλη µας θα είναι πεπερασµένη!

Η καµπύλη του Koch αποτελεί τυπικό παράδειγµα µίας οικογένειας καµπυλών που έχουν άπειρο µήκος και καταλαµβάνουν πεπερασµένη επιφάνεια. Μέλη της οικογένειας αυτής αποτελούν και οι καµπύλες των Hibert και Sierpinski όπως και οι c-curves και οι dragon curves.

Ασκηση: Υλοποιήστε ένα πρόγραµµα σχεδίασης καµπυλών του Koch.

2.6 Μορφοκλασµατικές µορφές

Ο τρόπος σχεδίασης των καµπυλών της προηγούµενης ενότητας στηρίζεται στην παραγωγή αντιγράφων της καµπύλης µε ολοένα µικρότερες διαστάσεις. Με βάση την παρατήρηση αυτή µπορούµε να χαρακτηρίσουµε τις καµπύλες αυτές σαν αυτο-όµοιες (self-similar) µιάς και η γενική µορφή τους παραµένει η ίδια όσο και αν µεταβληθεί η κλίµακα µε την οποία τις παρατηρούµε. Για παράδειγµα, αν υποθέσουµε ότι εκτελούσαµε τον αλγόριθµο σχεδίασης της καµπύλης του Koch άπειρες φορές η µορφολογία της καµπύλης που θα προέκυπτε δεν θα άλλαζε όσο και αν µεταβάλλαµε την κλίµακα παρατήρησης. Η φύση µας προσφέρει αρκετά παραδείγµατα µορφών που είναι αυτο-όµοιες. Για παράδειγµα η µορφολογία των ακτών, των οροσειρών ή των νεφών αποτελούν κλασικά παραδείγµατα τέτοιων µορφών. Ενας από τους πιο γνωστούς µαθηµατικούς του αιώνα µας, ο Benoit Mandelbrot, µελέτησε τις µορφές

12/11/2003 11

Page 12: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

αυτές και τις ονόµασε µορφοκλασµατικές (fractals) µιάς και θεώρησε ότι η διάσταση των µορφών αυτών περιγράφεται από αριθµούς που βρίσκονται µεταξύ του 1 (της διάστασης µίας ευθείας) και του 2 (της διάστασης ενός επιπέδου). Στα γραφικά υπολογιστών οι µορφοκλασµατικές µορφές χρησιµοποιούνται για τη µοντελοποίηση φυσικών µορφών.

Αν υποθέσουµε ότι έχουµε ένα ευθύγραµµο τµήµα µε άκρα Α(αx , αy) και Β (βx , βy ), τότε ένα αρκετά απλός αλγόριθµος παραγωγής µορφοκλασµατικών µορφών αντικαθιστά το τµήµα αυτό µε δύο άλλα τµήµατα ΑΓ και ΓΒ, όπου το σηµείο Γ είναι ένα τυχαίο σηµείο στη µεσοκάθετο του ΑΒ. Η θέση του Γ καθορίζεται από µία κατανοµή Gauss µε µέση τιµή 0 και κάποια διασπορά σ. Ο αλγόριθµος σχεδίασης εφαρµόζει αναδροµικά την ίδια διαδικασία για καθένα από τα τµήµατα ΑΓ και ΓΒ κ.ο.κ.

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

Η διασπορά της κατανοµής Gauss που χρησιµοποιείται καθορίζει και το βαθµό παραµόρφωσης του ευθύγραµµου τµήµατος. Πιο συγκεκριµένα, η παραµόρφωση της γραµµής εξαρτάται από τη διασπορά της κατανοµής µε τον τύπο:

σ = 2(0.5-Η) όπου η µεταβλητή Η ονοµάζεται εµµονή (persistence) της καµπύλης. Η µεταβλητή αυτή συνήθως λαµβάνει τιµές από 0 εως και 1. Τιµές του Η µικρότερες από 1/2 παράγουν περισσότερο οδοντωτές καµπύλες ενώ τιµες µεγαλύτερες από 1/2 παράγουν πιο οµαλές γραµµές.

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

Ο αλγόριθµος λαµβάνει σαν είσοδο τις ακόλουθες παραµέτρους:

1. Το λόγο των µηκών µεταξύ διαδοχικών κλαδιών στο δένδρο (lengthRatio) 2. To λόγο των γωνιών που σχηµατίζουν διαδοχικές διακλαδώσεις στο δένδρο

(fanRatio) 3. Τον αριθµό των κλαδιών που ξεκινούν από κάθε διακλάδωση (numBranch)

Αρχίζοντας από το σηµείο που αντιστοιχεί στη ρίζα του δένδρου µια συνάρτηση σχεδιασµού Tree που χρησιµοποιεί τον παραπάνω αλγόριθµο θα σχεδιάζει ένα δέντρο µε n επίπεδα χρησιµοποιώντας την ακόλουθη υλοποίηση:

Tree(P, A, L, F, n):

12/11/2003 12

Page 13: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

// L : το µήκος του τρέχοντος κλαδιού που θα σχεδιαστεί στο παρόν επίπεδο n // F : η γωνία µεταξύ του πρώτου και του τελευταίου κλαδιού στην διακλάδωση που θα δηµιουργηθεί από το τρέχον κλειδί // Α : η γωνία που σχηµατίζει το τρέχον κλαδί µε τον οριζόντιο άξονα // P : το σηµείο από το οποίο θα ξεκινήσει η διακλάδωση στο επόµενο επίπεδο

Αν το n είναι µεγαλύτερο από το 0 τότε:

• Από το τρέχον σηµείο στο οποίο βρίσκεται η πένα (σηµείο Ρ στην Εικ. 2.1) σχεδίασε ένα ευθύγραµµο τµήµα µε µήκος L και γωνία Α (τµήµα ΡΒ στην Εικ. 2.1).

• Αν υπάρχουν τουλάχιστον 2 κλαδιά που ξεκινούν από το παρόν κλaδί τότε το βήµα της γωνίας µε την οποία θα αρχίσουν να σχεδιάζονται τα καινούργια κλαδιά θα δίνεται από τον τύπο dang = F/(numBranch-1) αλλοιώς dang = 0

• ang = A - F/2 - dang • Για κάθε κλαδί που ξεκινά από το τέλος του τρέχοντος

κλαδού (σηµείο Β στην Εικ. 2.1): 1. ang = ang + dang 2. Αναδροµική κλήση της Tree(B, ang,

L*lengthRatio, F*fanRatio, n-1)

Μπορείτε να εξετάσετε τα αποτελέσµατα της εκτέλεσης ενός προγράµµατος που στηρίζεται στον παραπάνω αλγόριθµο εδώ. Η Εικόνα 2.1 εξηγεί τη σηµασία των µεταβλητών που περιγράφουν τον παραπάνω αλγόριθµο.

Εικόνα 2.1: Σχεδίαση µορφοκλασµατικού δένδρου.

12/11/2003 13

Page 14: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

12/11/2003 14

Page 15: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Ο αλγόριθµος του Bresenham για τη σχεδίαση ευθυγράµµων τµηµάτων

Ο συγκεκριµένος αλγόριθµος αποτελεί µια από τις σηµαντικότερες µεθόδους που χρησιµοποιείται για τη σχεδίαση ευθυγράµων τµηµάτων σε ένα σύστηµα γραφικών και αποτελεί ένα χαρακτηριστικό παράδειγµα incremental µεθόδου..

Έστω ότι µας δίνονται οι ακέραιες συντεταγµένες των άκρων Α (αx, αy) και Β (βx, βy) ενός ευθυγράµµου τµήµατος ΑΒ. Σκοπός του αλγορίθµου του Bresenham είναι ο υπολογισµος της βέλτιστης ακολουθίας από ψηφίδες για τη σχεδίαση του συγκεκριµένου ευθύγραµµου τµήµατος. Από την αναλυτική γεωµετρία γνωρίζουµε ότι οι συντεταγµένες ενός οποιουδήποτε σηµείου (x, y) που ανήκει στο ΑΒ συνδέονται µε την εξίσωση:

y = αy + (x- αx)*m (1)

όπου

m = (βy- αy)/(βx-αx) (2)

Υποθέτοµε στη συνέχεια ότι αx < βx και ότι 0 <= m <= 1, δηλαδή ότι η γωνία που σχηµατίζει το ΑΒ µε τον άξονα των x είναι µεταξύ 0 και 45 µοιρών. Αποτέλεσµα των παραπάνω υποθέσεων είναι ότι, κατά την κίνηση µας από το Α προς το Β, οι συντεταγµένες ως προς τον άξονα των x των διαδοχικών σηµείων που ανήκουν στο ΑΒ θα µεταβάλλονται περισσότερο από τις συντεταγµένες τους ως προς τον άξονα των y. Εποµένως αν κινούµαστε από το Α προς το Β µε µοναδιαία βήµατα ως προς τα x, τότε ορισµένες φορές τα y θα αυξάνουν και αυτά κατά µια µονάδα ενώ άλλες φορές θα παραµένουν τα ίδια.

Εικόνα 1: Προσέγγιση ιδανικής ευθείας από πλέγµα ψηφίδων.

Η εικόνα 1 περιγράφει ένα τµήµα του ΑΒ κατά τη σχεδίαση του σε ένα πλέγµα από ψηφίδες. Ας υποθέσουµε ότι για το σηµείο xi-1έχει υπολογιστεί ότι η βέλτιστη τιµή ως προς τον άξονα των y είναι το σηµείο yi-1. Αυτό που θέλουµε να µάθουµε είναι αν για το σηµείο xi η βέλτιστη τιµή ως προς τον άξονα των y είναι η ψηφίδα Ti (xi, yi-1) ή η

12/11/2003 15

Page 16: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

ψηφίδα Si (xi, yi-1+1). Σύµφωνα µε την (1) η ιδεώδης τιµή y* που θα αντιστοιχούσε στο xi, είναι:

y* = αy + (xi- αx)*m (3)

Επίσης ξέρουµε ότι το y* θα περιέχεται οπωσδήποτε µεταξύ των σηµείων Ti και Si. Εποµένως ένας τρόπος για να αποφασίσουµε ποιά από τις ψηφίδες Ti και Si.θα χρησιµοποιήσουµε στη σχεδίαση του ΑΒ θα είναι να υπολογίσουµε το λάθος e που εισάγει η επιλογή της καθεµίας από τις υποψήφιες ψηφιδες και στη συνέχεια να επιλέξουµε αυτήν µε το µικρότερο λάθος. Σε καθεµία περίπτωση το λάθος θα µας δίνεται από τους τύπους:

e(Ti ) = y* - yi-1 e(Si ) = (yi-1+1) - y*

Και στις δύο περιπτώσεις το λάθος που υπολογίζεται θα είναι πάντα θετικό. Από τα ανωτέρω προκύπτει το ακόλουθο κριτήριο µε το οποίο θα αποφασίσουµε αν θα χρησιµοποιήσουµε τη ψηφίδα Ti για τη σχεδίαση του επόµενου σηµείου του ΑΒ:

∆ιάλεξε το Ti αν και µόνο αν e(Ti ) - e(Si ) < 0 (4)

Αντικαθιστώντας την τιµή του y* από την (3) στην παραπάνω διαφορά παίρνουµε ότι:

e(Ti ) - e(Si ) = 2*m*(xi - αx)+2*(αy - yi-1) - 1 (5)

Ο µόνος µη ακέραιος όρος στην (5) είναι ο m. Για να απαλλαγούµε από αυτόν πολλαπλασιάζουµε και τα δύο µέρη της (5) µε τον παρανοµαστή

∆x = (βx-αx)

του m, ο οποίος σύµφωνα µε τις υποθέσεις που κάναµε στην αρχή είναι πάντα θετικός. Το αποτέλεσµα του πολλαπλασιασµού µπορεί να γραφεί ως:

ei = ∆x*(e(Ti ) - e(Si )) = 2*∆y*(xi - αx)+2*∆x*(αy - yi-1) - ∆x (6)

Με βάση την (6) το κριτήριο µε το οποίο αποφασίζουµε για την επόµενη µεταβλητή στον άξονα των y λαµβάνει την ακόλουθη µορφή:

Αν ei < 0 τότε yi = yi-1 αλλοιώς yi = yi-1 +1 (7)

Κατά την υλοποίηση του αλγορίθµου ο υπολογισµός του ei+1 µπορεί να γίνεται µε βάση την τιµή του ei. Πιο συγκεκριµένα το ei+1 µπορεί να γραφεί συναρτήσει του ei ως:

ei+1 = ei + 2*∆y*(xi+1 - xi)-2*∆x*(yi - yi-1)

Οµως

xi+1 - xi = 1

12/11/2003 16

Page 17: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

εποµένως για κάθε βήµα από το αx ως το βx ελέγχουµε το πρόσηµο του ei, διαλέγουµε το yi ανάλογα και µετά υπολογίζουµε το λάθος στο επόµενο βήµα ei+1. Αν στο παρών βήµα το y δεν έχει αυξηθεί τότε yi = yi-1 και εποµένως ei+1 = ei + 2*∆y. Σε αντίθετη περίπτωση ei+1 = ei + 2*(∆y - ∆x). Για i = 0, όπως προκύπτει από την (6) θα έχουµε ότι e1 = 2*∆y - ∆x.

Στα προηγούµενα υποθέσαµε ότι αx < βx και ότι 0 <= m <= 1. Οι υπόλοιπες περιπτώσεις µπορούν να αντµετωπιστούν εύκολα:

• αx > βx. Η κίνηση θα γίνει από το Β προς το Α. • m > 1. Αντιµετάθεσε τα x µε τα y στον αλγόριθµο, δηλ. αύξησε τα y κατά 1

και υπολόγισε το αντίστοιχο x. • Οριζόντιες και κάθετες γραµµές. Ο υπολογισµός των γραµµων αυτών µπορεί

να γίνει µε περισσότερο αποδοτικούς αλγόριθµους ειδικά για την περίπτωση των οριζόντιων γραµµών.

• 0 > m > -1. Εκµεταλλέυσου τις συµµετρίες µε τις προηγούµενες περιπτώσεις.

12/11/2003 17

Page 18: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Μέθοδοι εξοµάλυνσης της σχεδίασης διδιάστατων σχηµάτων

Στο προηγούµενο µάθηµα είδαµε ότι ο αλγόριθµος του Bresenham µας πρσφέρει έναν αρκετά αποδοτικό τρόπο για την επιλογη των ψηφίδων που θα χρησιµοποιηθούν στη σχεδίαση ενός οποιουδήποτε ευθύγραµου τµήµατος σε ένα πλέγµα από ψηφίδες. Λόγω όµως της περιορισµένης διακριτικότητας της επιφάνειας σχεδίασης, τα τµήµατα που προκύπτουν δεν είναι απόλυτα ευθύγραµµα, παρά µόνο στην περίπτωση που έχουµε να κάνουµε µε κάθετες ή οριζόντιες γραµµές. Στις υπόλοιπες περιπτώσεις τα τµήµατα αυτά παρουσιάζουν οδοντώσεις στη διεύθυνση του κάθετου και του οριζόντιου άξονα (βλ. Εικόνα 1). Το συγκεκριµένο πρόβληµα είναι γνωστό στη βιβλιογραφία ως aliasing, και επεκτείνεται σε όλες τις κατηγορίες σχηµάτων που απεικονίζονται σε ένα διδιάστατο πλέγµα από ψηφίδες. Για την αντιµετώπιση του συγκεκριµένου προβλήµατος εφαρµόζονται µια σειρά από µέθοδοι γνωστές ως τεχνικές anti-aliasing. Οι κυριότερες τεχνικές που ανήκουν σε αυτή την κατηγορία είναι:

• ο αλγόριθµος των Pitteway-Watkinson • η υπερδειγµατοληψία (supersampling) • το φιλτράρισµα των υψηλών συχνοτήτων από την εικόνα µε τη

χρησιµοποίηση είτε κατάλληλων φίλτρων γειτνίασης είτε κατάλληλων φασµατικών φίλτρων.

O αλγόριθµος των Pitteway-Watkinson

O συγκεκριµένος αλγόριθµος προσπαθεί να οµαλοποιήσει την εµφάνιση ενός ευθυγράµµου τµήµατος σκιάζοντας µε διαφορετικό τρόπο κάθε ψηφιδα που χρησιµοποιείται κατά τη σχεδίαση. Η σκίαση που χρησιµοποιείται για κάθε ψηφίδα είναι ανάλογη µε το ποσοστό της κάλυψής της από το συγκεκριµένο ευθύγραµµο τµήµα. Η χρήση του αλγορίθµου επεκτείνεται και στην περίπτωση της σχεδίασης περισσότερο σύνθετων σχηµάτων όπως είναι οι πολυγωνικές επιφάνειες. Πιο συγκεκριµένα, ας υποθέσουµε ότι θέλουµε να σχεδιάσουµε την ακµή ενός πολυγώνου, το εσωτερικό του οποίου θα έχει άσπρο χρώµα, ενώ η υπόλοιπη οθόνη θα είναι µαύρη. Εστω επίσης ότι οι συντεταγµένες µιας ψηφίδας αντιστοιχούν στο κέντρο ενός τετραγώνου 1x1 στο χώρο σχεδίασης και ότι οι πιθανές τιµές µιας ψηφίδας κυµαίνονται από το 0 (µαύρο) ως το 1 (άσπρο). Στην περίπτωση αυτή, αν η τοµή της επιφάνειας που καλύπτεται απο τη ψηφίδα και της επιφάνειας που ανήκει στο πολύγωνο αντιστοιχεί στο 1/2 του εµβαδού της ψηφίδας, τότε η τιµή της ψηφίδας θα θέλαµε να είναι 1/2. Αν η συγκεκριµένη τοµή καλύπτει το σύνολο της ψηφίδας τότε η τελευταία θα πάρει την τιµή 1 και γενικά αν n είναι το ποσοστό κάλυψης της τοµής των δύο αυτών επιφάνειών τότε η τιµή της ψηφίδας θα θέλαµε να είναι n. Στην γενική περίπτωση ο υπολογισµός του εµβαδού της τοµής µιας επιφάνειας από µια άλλη είναι αρκετά επίπονος και εποµένως η χρήση ενός τέτοιου αλγορίθµου θα είχε σηµαντικό υπολογιστικό κόστος. Ευτυχώς όµως ο αλγόριθµος των Pitteway-Watkinson προσφέρει µια αποδοτική υλοποίηση της µεθόδου που αναφέραµε στην περίπτωση των πολυγωνικών επιφανειών µε βάση τον αλγόριθµο του Bresenham. Το παρακάτω παράδειγµα εξηγεί τον τρόπο µε τον οποίο σκιάζεται ο χώρος που καταλαµβάνεται από µια πολυγωνική επιφάνεια µε βάση το συγκεκριµένο αλγόριθµο. Έστω ότι θέλουµε να σχεδιάσουµε την ακµή ενός πολυγώνου µε κλίση slope ίση µε 0.4 σε ένα πλέγµα από ψηφίδες (βλ. Εικόνα 1). Υποθέτουµε ότι το εσωτερικό του πολυγώνου καλύπτει το χώρο κάτω από τη συγκεκριµένη ακµή. Εποµένως, οι

12/11/2003 18

Page 19: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

ψηφίδες που βρίσκονται κάτω από τη συγκεκριµένη ακµή και δεν την τέµνουν θα σκιαστούν µε την τιµή 1 ενώ αυτές που βρίσκονται πάνω από την ακµή και επίσης δεν την τέµνουν θα σκιαστούν µε την τιµή 0. Επίσης υποθέτουµε ότι στην Εικόνα 1 οι κουκίδες αντιστοιχούν στις ψηφίδες που έχουν επιλεγεί για τη σχεδίαση της ακµής από τον αλγόριθµο του Bresenham, ενώ οι γραµµοσκιασµένες περιοχές σε κάθε τετράγωνο που περιέχει µια κουκίδα αντιστοιχούν στο χώρο του τετραγώνου που καλύπτεται από το πολύγωνο. Οι αριθµοί στο πάνω µέρος της οθόνης περιγράφουν το ποσοστό κάλυψης κάθε κουκίδας από το πολύγωνο (π.χ. το ποσοστό κάλύψης της δεύτερης κουκίδας είναι 0.9 - δηλ. 90% του συνολικού εµβαδού της -). Με απλούς γεωµετρικούς υπολογισµούς διαπιστώνουµε ότι υπάρχουν δύο ενδεχόµενα κάθε φορά που µετακινούµαστε από µια κουκίδα (π.χ. Α) στην αµέσως επόµενη της προς τα δεξιά (π.χ. Β):

• η επιφάνεια που καλύπτεται από το πολύγωνο αυξάνει κατά slope (= 0.4) αν οι Α και Β έχουν το ίδιο y

• η επιφάνεια που καλύπτεται από το πολύγωνο µειώνεται κατά 1 - slope (= 0.6) αν το y των δύο γειτονικών κουκίδων διαφέρει κατά 1 (το δεύτερο ενδεχόµενο ισχύει στην περίπτωση ορισµένων κουκίδων - π.χ. x = 2 ή x = 7 - µόνο αν συµπεριλάβουµε στην επιφάνεια της Β που καλύπτεται από το πολύγωνο.και την επιφάνεια που ανήκει στο πολύγωνο και βρίσκεται πάνω από τη Β - δηλ. έχει y κατά µια µονάδα µεγαλύτερο από τη Β -).

Η παρατήρηση αυτή µας επιτρέπει να ενσωµατώσουµε τον υπολογισµό της σκίασης (pixel[i]) κάθε ψηφίδας i στον αλγόριθµο του Bresenham µε τον ακόλουθο τρόπο. Αν MaxIntensity είναι η µέγιστη λαµπρότητα µε την οποία µπορεί να σχεδιαστεί µια ψηφίδα τότε βρίσκουµε τον πλησιέστερο ακέραιο posIncrement που αντιστοιχεί στο γινόµενο:

posIncrement = MaxIntensity * slope

Επίσης αρχικοποιούµε τη µεταβλητή negIncrement µε τη τιµή:

negIncrement = MaxIntensity - posIncrement

Αν υποθέσουµε ότι σχεδιάζουµε το ευθύγραµµο τµήµα ΑΒ από το σηµείο Α (αx, αy) προς το σηµείο Β (βx, βy) όπου 0 <= slopeAB<= 1 και ότι οι ψηφίδες που ανήκουν στο τµήµα αυτό θα σχεδιαστούν µε λαµπρότητα MaxIntensity, τότε αρχικά σκιάζουµε τη ψηφίδα που αντιστοιχεί στο σηµείο Α µε τη µέγιστη λαµπρότητα MaxIntensity. Στη συνέχεια για κάθε βήµα i από το αx ως το βx:

• ελέγχουµε το πρόσηµο του ei • διαλέγουµε το yi • σκιάζουµε την τρέχουσα ψηφίδα ως εξής:

o αν ei < 0 τότε pixel[i] = pixel[i-1]+posIncrement o αν ei >= 0 τότε pixel[i] = pixel[i-1]-negIncrement

• υπολογίζουµε το λάθος στο επόµενο βήµα

Παρόλο που ο συγκεκριµένος αλγόριθµος είναι αρκετά αποδοτικός στην περίπτωση πολυγωνικών σχηµάτων δε συµβαίνει το ίδιο και στην περίπτωση των µη

12/11/2003 19

Page 20: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

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

Εικόνα 1: Παράδειγµα εφαρµογής του αλγορίθµου των Pitteway-Watkinson.

Υπερδειγµατοληψία

O συγκεκριµένος αλγόριθµος προσπαθεί να εξοµαλύνει τη σχεδίαση ενός σχήµατος χρησιµοποιώντας περισσότερα δείγµατα για τον καθορισµό της τιµής µιας κουκίδας. Για παράδειγµα, αν υποθέσουµε ότι το πλέγµα Α των ψηφίδων που θα χρησιµοποιηθεί για την σχεδίαση µιας εικόνας έχει διαστάσεις 512x512, τότε η µέθοδος της υπερδειγµατοληψίας θα υπολόγιζε την εικόνα που θα προέκυπτε αν χρησιµοποιούσαµε ένα πλέγµα Β διαστάσεων 1024x1024 ή ακόµα µεγαλύτερο. Στην περίπτωση αυτή η τιµή κάθε ψηφίδας Χ στο Α προκύπτει συνήθως από τον υπολογισµό του µέσου όρου των τιµών των ψηφίδων του Β που περιέχονται στο χώρο που καλύπτεται από την Χ. Η Εικόνα 2 περιγράφει ένα κλασικό παράδειγµα εξοµάλυνσης της σχεδίασης µιας εικόνας µε τη χρήση της µεθόδου της υπερδειγµατοληψίας.

12/11/2003 20

Page 21: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Εικόνα 2: Απλή (αριστερά) και υπερδειγµατοληπτηµένη (δεξιά) εικόνα. Οι κυµατώσεις στην δεξιά εικόνα εµφανίζονται σε µεγαλύτερο βάθος.

Φιλτράρισµα Υψηλών Συχνοτήτων

Η αποκοπή των υψηλών συχνοτήτων από µια εικόνα ονοµάζεται άµβλυνση (blurring). Υπάρχουν δύο κύριοι τρόποι για την επίτευξη της άµβλυνσης των περιεχοµένων µιας εικόνας:

• τα φίλτρα γειτνίασης • τα φασµατικά φίλτρα.

Τα περισσότερα από τα φίλτρα γειτνίασης υπολογίζουν ως τιµή της κάθε ψηφίδας στην εικόνα που προκύπτει το µέσο όρο των τιµών των ψηφίδων στην αρχική εικόνα σε ένα παράθυρο µε κέντρο την τρέχουσα ψηφίδα και διάσταση ίση µε τη διάσταση του πίνακα που υλοποιεί το φίλτρο. Η λειτουργία των φασµατικών φίλτρων στηρίζεται στο µετασχηµατισµό της πληροφορίας που περιέχει µία εικόνα από το πεδίο του χώρου στο πεδίο της συχνότητας στο οποίο µπορούµε να µεταβάλλουµε µε µεγαλύτερη ευκολία ορισµένα χαρακτηριστικά της εικόνας. Η εφαρµογή των φασµατικών φίλτρων σε µία εικόνα αποτελείται από τα παρακάτω τρια βήµατα:

• Μετασχηµάτισε την εικόνα από το πεδίο του χώρου στο πεδίο της συχνότητας. Το βήµα αυτό υλοποιείται συνήθως µε τον µετασχηµατισµό της εικόνας κατά Fourier. Το αποτέλεσµα της εφαρµογής ενός τέτοιου µετασχηµατισµού είναι ο υπολογισµος των συχνοτήτων οι οποίες περιέχονται στην εικόνα. Το σύνολο των συχνοτήτων αυτών αποτελεί το φάσµα συχνοτήτων (frequency spectrum) για τη συγκεκριµένη εικόνα.

• Απάλειψε ένα µέρος από τις υψηλές συχνότητες που περιέχονται στο φάσµα συχνοτήτων που προκύπτει από την εκτέλεση του προηγούµενου βήµατος.

• Εφάρµοσε τον αντίστροφο µετασχηµατισµό Fourier για το µετασχηµατισµό της εικόνας στο πεδίο του χώρου και την προβολή της µε βάση το φάσµα συχνοτήτων που προκύπτει από την εκτέλεση του προηγούµενου βήµατος.

12/11/2003 21

Page 22: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

3.1. Ανασκόπηση Χρήσιµων Γεωµετρικών Εννοιών

Στην τρέχουσα ενότητα θα ασχοληθούµε µε την ανασκόπηση χρήσιµων γεωµετρικών εννοιών που χρησιµοποιούνται εκτενώς στα Γραφικά µε Υπολογιστές.

3.2 ∆ιανύσµατα

Ορίζουµε ένα διάνυσµα ως ένα προσανατολισµένο ευθύγραµµο τµήµα που ενώνει δύο σηµεία. Αν τα σηµεία του ευθύγραµµου τµήµατος είναι τα Α (xA, yA, zA) και Β (xB, yB, zB) τότε οι συνιστώσες του διανύσµατος ΑΒ (vx, vy, vz) σε καθένα από τους άξονες x, y, z θα ορίζονται από τη διαφορά των συντεταγµένων µεταξύ του τέλους και της αρχής του διανύσµατος (xB - xA, yB - yA, zB - zA). Στο υπόλοιπο της ενότητας τα διανύσµατα θα συµβολίζονται µε έντονη (bold) γραφή (π.χ. α).

3.3 Εσωτερικό Γινόµενο

Το εσωτερικό γινόµενο (inner product ή dot product) δύο διανυσµάτων είναι ο πραγµατικός αριθµός που προκύπτει από τον πολλαπλασιασµό του µήκους των δύο διανυσµάτων επί το συνηµίτονο της γωνίας που σχηµατίζουν. Ο τύπος υπολογισµού είναι ο ακόλουθος:

α . β = |a||β|cos(γ), όταν a, β είναι δίαφορα του 0 α . β = 0, σε κάθε άλλη περίπτωση

όπου γ είναι η γωνία µεταξύ των διανυσµάτων α και β. Αν τα α (αx, αy, αz) και β (βx, βy βz) είναι δύο τρισδιάστατα διανύσµατα τότε το εσωτερικό γινόµενο τους υπολογίζεται από τον τύπο:

α . β = αxβx+ αyβy + αzβz

3.4 Εξωτερικό Γινόµενο

Το εξωτερικό γινόµενο (vector ή cross product) (α x β) µεταξύ δύο διανυσµάτων α και β είναι ένα διάνυσµα c µε διεύθυνση κάθετη προς το επίπεδο που ορίζουν τα α καιβ . Η φορά του διανύσµατος καθορίζεται απο τη διεύθυνση που θα έχει ο αντίχειρας του αριστερού (δεξιού) χεριού όταν τα υπόλοιπα δάκτυλα κλείσουν από το α προς το β σε ένα αριστερόστροφο (δεξιόστροφο) σύστηµα συντεταγµένων. Το µήκος του c προκύπτει από τον ακόλουθο τύπο:

|c| = 0, όταν α = kβ |c| = |α||β|sinγ, σε κάθε άλλη περίπτωση, όπου γ είναι η γωνία µεταξύ των α και β

Αν τα α (αx, αy, αz)και β (βx, βy βz) είναι δύο τρισδιάστατα διανύσµατα τότε το εξωτερικό γινόµενό τους υπολογίζεται από τον τύπο:

α x β = (αyβz- αzβy )i+(αzβx- αxβz )j +(αxβy- αyβx )k όπου τα i, j, k σχηµατίζουν ένα δεξιόστροφο ορθογώνιο σύστηµα συντεταγµένων στις τρεις διαστάσεις.

12/11/2003 22

Page 23: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Αξίζει να σηµειώσουµε ότι όταν οι πλευρές α και β είναι διαδοχικές πλευρές ενός παραλληλεπιπέδου τότε το µήκος του εξωτερικού τους γινοµένου µας δίνει την επιφάνεια του παραλληλεπιπέδου.

3.5 Σχετικός προσανατολισµός τριών σηµείων & εφαρµογές

Αν υποθέσουµε ότι µας δίνεται µια διατεταγµένη τριάδα (Α, Β, Γ) σηµείων στο χώρο τότε για την σχεδίαση της επιφάνειας που ορίζουν χρειάζεται αρκετά συχνά να υπολογίσουµε το σχετικό προσανατολισµό τους, µε άλλα λόγια χρειάζεται να ξέρουµε αν θα συναντήσουµε τα σηµεία µε τη σειρά που αναφέρονται στην τριάδα αν κινηθούµε, σύµφωνα ή αντίστροφα, µε τη φορά των δεικτών του ρολογιού. Στην πρώτη περίπτωση λέµε ότι τα τρία σηµεία έχουν αρνητικό σχετικό προσανατολισµό ενώ στη δεύτερη περίπτωση λέµε ότι έχουν θετικό προσανατολισµό. (βλ. Εικ. 3.1) Στην περίπτωση που τα τρία σηµεία είναι συνευθειακά τότε ορίζουµε τον προσανατολισµό τους ίσο µε το µηδέν. Αν ονοµάσουµε α το διάνυσµα ΓΑ και β το διάνυσµα ΓΒ τότε αποδεικνύεται ότι ο σχετικός προσανατολισµός των τριών σηµείων µας δίνεται από το πρόσηµο της παράστασης αxβy- αyβx και πιο συγκεκριµένα ότι:

Εικόνα 3.1 Θετικά και αρνητικά προσανατολισµένη τριάδα σηµείων.

Αν αxβy- αyβx > 0 τότε τα σηµεία Α, Β και Γ είναι θετικά προσανατολισµένα Αν αxβy- αyβx < 0 τότε τα σηµεία Α, Β και Γ είναι αρνητικά προσανατολισµένα Αν αxβy- αyβx = 0 τότε τα σηµεία Α, Β και Γ είναι συνευθειακά

Αξίζει να σηµειώσουµε ότι η παράσταση που εξετάζουµε είναι ίση µε το εξωτερικό γινόµενο των α και β αν θεωρήσουµε ότι το επίπεδο xy ταυτίζεται µε το επίπεδο που καθορίζεται από τα τρία σηµεία Α, Β και Γ. Αν αυτό δεν ισχύει τότε ο προσανατολισµός των τριών σηµείων καθορίζεται από το πρόσηµο της παράστασης:

Τ = k . (α x β)

12/11/2003 23

Page 24: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

όπου k το µοναδιαίο διάνυσµα κατά τη θετική διεύθυνση του άξονα z. Για τις ανάγκες του µαθήµατος θα θεωρήσουµε ότι το επίπεδο που καθορίζεται απο τα Α, Β, Γ ταυτίζεται µε το επίπεδο xy.

Ο υπολογισµός του σχετικού προσανατολισµού τριών σηµείων είναι τροµερά χρήσιµος γιατί µας επιτρέπει να υπολογίσουµε εαν ένα πολύγωνο είναι κυρτό ή κοίλο. Πιο συγκεκριµένα, ένα πολύγωνο ορίζεται ως µια διατεταγµένη ν-άδα κορυφών µε µήκος µεγαλύτερο ή ίσο του 3. Σε κάθε ν-άδα οι διαδοχικές κορυφές συνδέονται µεταξύ τους µε ευθύγραµµα τµήµατα. Mια κορυφή ενός πολυγώνου θα λέµε ότι είναι κυρτή (convex) όταν η γωνία των δυο ακµών στις οποίες ανήκει είναι µικρότερη από 1800. Ενα πολύγωνο θα είναι κυρτό όταν όλες οι κορυφές του είναι κυρτές. Οταν η παραπάνω συνθήκη δεν ισχύει και η γωνία είναι µεγαλύτερη από 1800 τότε το πολύγωνο θα ονοµάζεται κοίλο (concave). Για να µπορέσουµε εποµένως να καταλάβουµε αν ένα πολύγωνο είναι κυρτό ή όχι θα πρέπει αρχίζοντας από µια κυρτή κορυφή να ελέγξουµε αν όλες οι διαδοχικές τριάδες κορυφών όταν τις διατρέξουµε µε φορά αντίστρφη των δεικτών του ρολογιού είναι θετικά προσανατολισµένες. Αν αυτό συµβαίνει τότε το πολύγωνο µας θα είναι κυρτό. Σε αντίθετη περίπτωση το πολύγωνο µας θα είναι είτε κοίλο είτε όλες οι κορυφές του πολυγώνου µας θα είναι συνευθειακές. Για να είναι αξιόπιστος ο παραπάνω υπολογισµός θα πρέπει η µεσαία κορυφή της πρώτης τριάδας που θα εξετάσουµε να είναι σίγουρα κυρτή. Για να το πετύχουµε αυτό διαλέγουµε την κορυφή του πολυγώνου µε την µέγιστη ή την ελάχιστη τιµή στον οριζόντιο ή στον κάθετο άξονα συντεταγµένων.

3.6.1 Ευρεση σηµείων που περιέχονται στο εσωτερικό τριγώνων

Ο υπολογισµός του σχετικού προσανατολισµού µιάς τριάδας σηµείων ΑΒΓ χρησιµεύει στον έλεγχο του κατα πόσον ένα άλλο τυχαίο σηµείο ∆ περικλείεται ή όχι από το τρίγωνο ΑΒΓ. Οπως περιγράφεται στην Εικόνα 3.2 ένα σηµείο ∆ περιέχεται σε ένα τέτοιο τρίγωνο ΑΒΓ αν οι τριάδες ΑΒ∆, ΒΓ∆ και ΓΑ∆ έχουν τον ίδιο σχετικό προσανατολισµό µε την τριάδα ΑΒΓ.

12/11/2003 24

Page 25: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Εικόνα 3.2: Βρίσκεται το σηµείο ∆ στο εσωτερικό του τριγώνου ΑΒΓ;

3.6.2 Εύρεση σηµείων που περιέχονται στο εσωτερικό πολυγώνων

Ο σχετικός προσανατολισµός µίας τριάδας σηµείων βρσκει εφαρµογή και στον έλεγχο του εαν ένα σηµείο Α περιέχεται στο εσωτερικό ενός πολυγώνου P0P1....Pn-1. Στην περίπτωση αυτή αρκεί να µετρήσουµε τον αριθµό των πλευρών του πολυγώνου που τέµνουν µία ηµιευθεία που ξεκινά από το Α. Αν ο αριθµός των πλευρών αυτών είναι περιττός τότε το σηµείο Α ανήκει στο εσωτερικό του πολυγώνου. Σε αντίθετη περίπτωση το Α δεν βρίσκεται στο εσωτερικό του πολυγώνου (βλ. Εικ. 3.3).

Εικόνα 3.3: Βρίσκεται το σηµείο Α στο εσωτερικό του πολυγώνου;

12/11/2003 25

Page 26: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Κατά τη µέτρηση των ακµών του πολυγώνου θα πρέπει να λάβουµε υπ' όψη τις ακόλουθες ειδικές περιπτώσεις:

• Ακµές που περιέχονται ή είναι παράλληλες µε την ηµιευθεία (π.χ. η ακµή 4-5 στην Εικ. 3.3). Η µέθοδος ελέγχου που εξετάζουµε δε χρειάζεται να εξετάσει τέτοιες περιπτώσεις.

• Τοπικά ακρότατα που ανήκουν στην ηµιευθεία (π.χ. τα σηµεία 8 και 10). Στην περίπτωση αυτή είτε θα πρέπει να υπολογίσουµε σα διπλή τη συνεισφορά ενός τέτοιου σηµείου είτε να την αγνοήσουµε. Μια λύση που µπορούµε να χρησιµοποιήσουµε είναι να ελέγχουµε αν η ηµιευθεία τέµνει τις πλευρές PiPi+1 του πολυγώνου για τις οποίες ισχύει µία από τις ακόλουθες συνθήκες:

o yi <= yA < yi+1 o yi+1 <= yA < yi

Σε µία τέτοια περίπτωση τοπικά µέγιστα µεταξύ δύο διαδοχικών πλευρών αγνοούνται (π.χ. η τοµή της ηµιευθείας µε την κορυφή 8 δεν θα προσµετρηθεί) ενώ τοπικά ελάχιστα µετριούνται διπλά.

Για υπολογίσουµε ποιές από τις πλευρές του πολυγώνου θα εξεταστούν για πιθανή τοµή µε την ηµιευθεία µας θα επιλέξουµε πλευρές PiPi+1 του πολυγώνου για τις οποίες ισχύει ότι ο σχετικός προσανατολισµός των τριάδων MinCiMaxCiA είναι ο ίδιος όπου MinCi = miny(PiPi+1), MaxCi = maxy(PiPi+1).

3.6.3 Εύρεση σηµείων που ανήκουν σε ευθεία ή ευθύγραµµο τµήµα.

Για να ελέγξουµε αν ένα σηµείο A ανήκει σε µια ευθεία αρκεί να εξετάσουµε αν το εµβαδόν του τριγώνου που σχηµατίζεται απο το Α και δύο σηµεία της ευθείας είναι ίσο µε το 0.

Ενα σηµείο P περιέχεται σε ένα ευθύγραµµο τµήµα ΑΒ όταν ισχύει η ακόλουθη συνθήκη (βλ. Εικ. 3.4):

((xA != xB KAI min( xA, xB) <= xP <= max( xA, xB)) Ή (xA = xB KAI min( yA, yB) <= yP <= max( yA, yB))) ΚΑΙ Εµβαδό(ABP) = 0

Για να ελέγξουµε αν η προβολή Ρ'ενός σηµείου Ρ σε ένα ευθύγραµµο τµήµα ΑΒ περιέχεται στο τµήµα υπολογίζουµε το εσωτερικό γινόµενο των διανυσµάτων ΑΡ και ΑΒ. Το γινόµενο λαµβάνει την τιµή 0 όταν το Α συµπίπτει µε το Ρ ενώ λαµβάνει την τιµή |ΑΒ|2 όταν το Ρ συµπίπτει µε το Β. Οταν η τιµή του εσωτερικού γινοµένου βρίσκεται µεταξύ των δύο αυτών ορίων τότε το Ρ' περιέχεται στο ευθύγραµµο τµήµα ΑΒ.

12/11/2003 26

Page 27: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Εικόνα 3.4: Ανήκει το σηµείο P ή η προβολή του P' στο ευθύγραµµο τµήµα ΑΒ;

3.6 Εµβαδά Πολυγώνων & Υπολογισµός Απόστασης Σηµείου από Ευθύγραµµο Τµήµα

3.6.1 Εµβαδό Τριγώνου

Οπως αναφέραµε στην παράγραφο 3.4 το εξωτερικό γινόµενο δύο διανυσµάτων παράγει ένα καινούριο διάνυσµα µε µήκος ίσο µε το εµβαδόν το παραλληλεπιπέδου που ορίζεται από τα δύο αυτά διανύσµατα. Επειδή το εµβαδόν ενός παραλληλεπιπέδου είναι το διπλάσιο του εµβαδού των δύο ίσων τριγώνων από τα οποία αποτελείται συµπεραίνουµε ότι για το εµβαδόν του τριγώνου που σχηµατίζεται από τρία σηµεία µε θετικό προσανατολισµό ισχύει ο τύπος:

2*Εµβαδό(ΑΒΓ) = |α x β| = αxβy- αyβx

3.6.2 Απόσταση Σηµείου από Ευθύγραµµο Τµήµα

Με βάση τον προηγούµενο τύπο µπορούµε να υπολογίσουµε την απόσταση ενός σηµείου Ρ από ένα ευθύγραµµο τµήµα ΑΒ (βλ. Εικ. 3.4) αν υπολογίσουµε το λόγο:

|ΑΡ x AB|/|AB|

3.6.3 Εµβαδό Πολυγώνου

Αποδεικνύεται ότι το εµβαδόν ενός πολυγώνου P0P1....Pn-1 δίνεται από τον τύπο:

2*Εµβαδό(P0P1....Pn-1) = Σ (xiyi+1 - yixi+1) από i = 0 έως και n-1

όπου (xi, yi) οι συντεταγµένες του σηµείου Pi και Pn = P0.

12/11/2003 27

Page 28: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

3.7 ∆ιαίρεση Πολυγώνου σε Τρίγωνα

Σε αρκετές εφαρµογές γραφικών είναι χρήσιµο να διαιρέσουµε την επιφάνεια ενός πολυγώνου σε µια σειρά από τρίγωνα. Για παράδειγµα σε µία τέτοια διαίρεση όλα τα σηµεία ενός τριγώνου θα είναι συνεπίπεδα και εποµένως σε αρκετές περιπτώσεις θα αντιδρούν µε τον ίδιο τρόπο στις προσπίπτουσες ακτίνες φωτός.

Ενας αλγόριθµος διαίρεσης διασχίζει τις κορυφές του πολυγώνου P0P1....Pn-1 αρχίζοντας από την κορυφή P0 µε φορά αντίθετη των δεικτών του ρολογιού. Για κάθε τριάδα κορυφών Pi-1PiPi+1 που συναντά αν η τριάδα αυτή έχει θετικό προσανατολισµό τότε ο αλγόριθµος ελέγχει αν κάποια από τις υπόλοιπες κορυφές του πολυγώνου περιέχεται στο εσωτερικό του τριγώνου Pi-1PiPi+1. Αν αυτό δε συµβαίνει τότε το τρίγωνο Pi-1PiPi+1 προστίθεται στη λίστα των τριγώνων στις οποίες διαιρείται το πολύγωνο η κορυφή Pi αφαιρείται από τη λίστα των κορυφών του πολυγώνου και ο αλγόριθµος συνεχίζει τη διάσχιση των κορυφών από τη κορυφή Pi-1 µε τις εναποµείναντες κορυφές. Ο αλγόριθµος τερµατίζει επιτυχώς όταν χωρίσει το πολύγωνο σε n-2 τρίγωνα. Ο αλγόριθµος τερµατίζει ανεπιτυχώς αν διασχίσει n κορυφές χωρίς να βρεί ένα τρίγωνο µε τις προϋποθέσεις που αναφέραµε.

Για παράδειγµα, στην Εικόνα 3.5 ο αλγόριθµος αρχίζει τη διάσχιση από την κορυφή Α. Η τριάδα ΑΒΓ απορρίπτεται αφού το τρίγωνο που προκύπτει περιέχει την κορυφή ∆. Στη συνέχεια εξετάζεται η τριάδα ΒΓ∆ το τρίγωνο που προκύπτει προστίθεται στη λίστα των τριγώνων και η κορυφή Γ αφαιρείται από το πολύγωνο. Το πολύγωνο που προκύπτει είναι το ΑΒ∆Ε, ο αλγόριθµός συνεχίζει τη διάσχιση από την τριάδα Β∆Ε κ.ο.κ.

Εικόνα 3.5: ∆ιαίρεση του πολυγώνου ΑΒΓ∆Ε σε τρίγωνα.

Η υλοποίηση σε Java του παρακάτω αλγορίθµου περιέχεται στα αρχεία Tools2D.java, PolyTria.java, Point2D.java και Triangle.java εδώ.

12/11/2003 28

Page 29: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

3.8 Γραµµικοί Συνδυασµοί ∆ιανυσµάτων

Γραµµικός συνδυασµός m διανυσµάτων v1, v1, ..., vm ονοµάζεται το διάνυσµα v που προκύπτει από το άρθροισµα:

v = α1v1+α2 v2+....+.αmvm

όπου αi µε i από 1 έως και m είναι πραγµατικοί αριθµοί. Μια ειδική περίπτωση γραµµικού συνδυασµού διανυσµάτων αποτελούν οι κυρτοί συνδυασµοί (convex combinations) που έχουν την ιδιότητα ότι το άθροισµα όλων των αi ισούται µε 1 και αi >= 0. Ενας κυρτός συνδυασµός µε ιδιαίτερο ενδιαφέρον αποτελεί ο συνδυασµός µε τη µορφή:

v(t) = α(1-t) + tβ

στον οποίο υποθέτουµε ότι τα α και β είναι τυχαία διανύσµατα και η µεταβλητή t λαµβάνει τιµές από το 0 έως και το 1. Αν σχεδιάσουµε τα α και β µε κοινή αρχή τότε το διάνυσµα που προκύπτει θα έχει την ίδια αρχή µε τα α και β και το τέλος του θα βρίσκεται στο ευθύγραµµο τµήµα που ορίζεται απο το τέρµα των α και β (βλ. Εικ. 3.5).

Εικόνα 3.5: Κυρτός συνδυασµός των διανυσµάτων α και β.

Οσο το t αυξάνεται στο διάστηµα που προαναφέραµε, το τέλος του v θα µετακινείται από το τέλος του α προς το τέλος β διαγράφοντας την ευθεία που θα σχηµατίζουν τα δύο αυτά σηµεία.

Αν τα Α και Β είναι σηµεία τότε κάθε σηµείο Γ που προκύπτει από ένα ανάλογο γραµµικό συνδυασµό, δηλ:

12/11/2003 29

Page 30: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Γ(t) = Α(1-t) + tΒ, 0 <= t <= 1

θα περιέχεται στο εσωτερικό του ευθυγράµµου τµήµατος που σχηµατίζουν τα σηµεία Α και Β. Στην περίπτωση αυτή θα λέµε ότι το σηµείο Γ παρεµβάλλεται µεταξύ των Α και Β. Σηµεία που ικανοποιούν µια τέτοια σχέση χρησιµοποιούνται σε εφαρµογές συνθετικής κίνησης (animation) και ειδκότερα όταν θέλουµε να µετασχηµατίσουµε σταδιακά ένα σχήµα (Α) σε κάποιο άλλο (Β). Η συγκεκριµένη λειτουργία ονοµάζεται tweening και ένας αλγόριθµος υλοποίησης της λειτουργίας αυτής αποτελείται από τα εξής βήµατα:

Tween(A, B)

1. Ορισε µια ακολουθία από n διαδοχικά σηµεία στο περίγραµµα δυο σχηµάτων Α και Β.

2. Αντιστοίχισε κάθε σηµείο αi του Α στο σηµείο βi του Β. 3. Για t από 0 έως και 1:

1. Για κάθε µία από τις αντιστοιχίες που δηµιουργήθηκαν στο προηγούµενο βήµα:

1. Υπολόγισε τις συντεταγµένες των ενδιάµεσων σηµείων

γi = αi(1-t) + tβι

2. Σχεδίασε το σχήµα που προκύπτει

Ασκηση: Υλοποιήστε τον παραπάνω αλγόριθµο.

12/11/2003 30

Page 31: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

4.1. Γεωµετρικοί Μετασχηµατισµοί Σχηµάτων

Με τον όρο γεωµετρικοί µετασχηµατισµοί σχηµάτων αναφερόµαστε σε µεθόδους µεταβολής των συντεταγµένων κάθε σηµείου ενός σχήµατος χωρίς µεταβολή του συστήµατος συντεταγµένων στο οποίο αναφέρονται τα σηµεία αυτά.

Για την αναπαράσταση γεωµετρικών µετασχηµατισµών στα συστήµατα γραφικών χρησιµοποιείται η αναπαράσταση σηµείων και διανυσµάτων σε οµογενείς συντεταγµένες. Σε ένα σύστηµα οµογενών συντεταγµένων στο δισδιάστατο επίπεδο για την αναπαράσταση ενός σηµείου Ρ (xP, yp) χρησιµοποιείται µια τριάδα αριθµών (xP, yp, 1) ενώ για ένα διάνυσµα v (xv, yv) χρησιµοποιείται η τριάδα (xv, yv, 0)

4.2 ∆ισδιάστατοι Γεωµετρικοί Μετασχηµατισµοί

Ενας δισδιάστατος γεωµετρικός µετασχηµατισµός απεικονίζει κάθε σηµείο Α (xA, yA,1) του επιπέδου σε ένα άλλο σηµείο Β (xB, yB, 1) µέσω µίας συνάρτησης Τ έτσι ώστε:

Τ(xA, yA, 1) = (xB, yB, 1)

ή πιο συνοπτικά: Τ(Α) = Β

Αρκετοί γεωµετρικοί µετασχηµατισµοί έχουν µια αρκετά απλή µορφή. Πιο συγκεκριµένα, αν ένας τέτοιος µετασχηµατισµός απεικονίζει το σηµείο Α που αναφέραµε προηγουµένως σε ένα σηµείο Β τότε οι συντεταγµένες των δύο σηµείων θα συνδέονται σε αρκετές περιπτώσεις µε τους τύπους:

xB = a*χΑ+c*yA+dx yB = b*χΑ+d*yA+dy

όπου a, b, c, d, dx, dy σταθερές και ad διάφορο του bc. Η µορφή που γράψαµε µπορεί να εκφραστεί σε µορφή πινάκων ως:

(xB, yB, 1) = (xA, yA, 1)*M (1)

όπου ο Μ είναι ένας 3x3 πίνακας µε τη µορφή:

a b 0 c d 0 dx dy 1

Ο µηχανισµός που περιγράψαµε χρησιµοποιείται για την υλοποίηση τεσσάρων συχνά χρησιµοποιούµενων µετασχηµατισµών που είναι:

• Η µετατόπιση (translation) • Η µεγέθυνση/σµίκρυνση (scaling)

12/11/2003 31

Page 32: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

• Η περιστροφή (rotation) • Η κύρτωση (shear)

Στη συνέχεια εξετάζουµε καθέναν από αυτούς τους µετασχηµατισµούς.

4.2.1 Μετατόπιση

Η µετατόπιση ενός σηµείου σε ένα γεωµετρικό µετασχηµατισµό περιγράφεται από την επιµέρους µετατόπιση του σε καθένα από τους δύο άξονες συντεταγµένων dx, dy. Στον συγκεκριµένο µετασχηµατισµό ο πίνακας Μ έχει τη µορφή:

1 0 0 0 1 0 dx dy 1

Το αποτέλεσµα της εφαρµογής ενός τέτοιου µετασχηµατισµού σε ένα σηµείο Α είναι η µετατόπιση του A κατά dx και κατά dy αντίστοιχα στους άξονες x και y.

4.2.2 Μεγέθυνση/Σµίκρυνση

Η µεγέθυνση/σµίκρυνση ενός σχήµατος κατά Sx και Sy αντίστοιχα στους άξονες x και y επιτυγχάνεται µε τον πολλαπλασιασµό των αντίστοιχων συντεταγµένων κάθε σηµείου του µε τους δύο αυτά ποσοστά µεγέθυνσης/σµίκρυνσης. Για την υλοποίηση της παραπάνω λειτουργίας ο πίνακας Μ έχει τη µορφή:

Sx 0 0 0 Sy 0 0 0 1

Εδώ θα πρέπει να σηµειώσουµε ότι αν κάποιο από τα Sx, Sy είναι αρνητικό τότε ο συγκεκριµένος µετασχηµατισµός πέρα από τη µεταβολή των διαστάσεων του σχήµατος το µετατοπίζει στο συµµετρικό του σχήµατος κατά τους άξονες y και x αντίστοιχα.

4.2.3 Περιστροφή

Η περιστροφή ενός σηµείου κατά γωνία θ ώς προς το κέντρο των αξόνων του συστήµατος συντεταγµένων περιγράφεται από τον τύπο (1) όταν ο πίνακας Μ έχει τη µορφή:

cos(θ) sin(θ) 0

12/11/2003 32

Page 33: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

-sin(θ) cos(θ) 0 0 0 1

4.2.4 Κύρτωση

Η κύρτωση περιλαµβάνει τη µεταβολή των συντεταγµένων στον άξονα των x ενός σηµείου κατά ένα ποσό που είναι ανάλογο της συντεταγµένης του ίδιου σηµείου κατά τον άξονα των y. Ενα παράδειγµα ενός τέτοιου µετασχηµατισµού αποτελεί η µετατροπή ορθής γραφής σε πλάγια (italics). Κατά το µετασχηµατισµό αυτό η γενική µορφή του πίνακα Μ είναι:

1 g 0 h 1 0 0 0 1

4.2.5 Αντίστροφος Μετασχηµατισµός

∆οθέντος ενός µετασχηµατισµού µε πίνακα Μ της µορφής:

a b 0 c d 0 dx dy 1

τότε ο αντίστροφος µετασχηµατισµός Μ-1 δίνεται από τον τύπο: Μ-1 = k*A

όπου k = 1/(ad-bc) και ο πίνακας Α έχει τη µορφή:

d -b -dx -c a -dy 0 0 1

4.2.6 Ιδιότητες των συγγενών µετασχηµατισµών

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

− Οι συγγενείς µετασχηµατισµοί διατηρούν συγγενείς συνδυασµούς σηµείων

12/11/2003 33

Page 34: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

− Οι συγγενείς µετασχηµατισµοί διατηρούν τις ευθείες. Μια ευθεία γραµµή πριν από ένα τέτοιο µετασχηµατισµό συνεχίζει να είναι ευθεία και µετά το µετασχηµατισµό αυτό. Επίσης σηµεία που ανήκουν στο ίδιο επίπεδο πρίν από ένα τέτοιο µετασχηµατισµό συνεχίζουν να έχουν αυτή την ιδιότητα και µετά από την εφαρµογή του.

− Οι συγγενείς µετασχηµατισµοί διατηρούν την παραλληλία µεταξύ των ευθειών. Ευθείες που είναι παράλληλες πριν από την εφαρµογή του µετασχηµατισµού συνεχίζουν να είναι παράλληλες και µετά την εφαρµογή του.

− Οι συγγενείς µετασχηµατισµοί διατηρούν την αναλογία µεταξύ των αποστάσεων. Ενα σηµείο Ρ που βρίσκεται σε αναλογία αποστάσεων f µεταξύ δύο άλλων σηµείων Α και Β θα συνεχίσει να βρίσκεται σε µια τέτοια αναλογία όταν τα Ρ, Α και Β θα έχουν µετασχηµατιστεί.

− O λόγος του εµβαδού του σχήµατος που προκύπτει από το µετασχηµατισµό προς το λόγο του αρχικού σχήµατος ισούται µε την απόλυτη τιµή της ορίζουσας του πίνακα Μ.

Στους συγγενείς µετασχηµατισµούς ανήκουν µε τη µορφή που περιγράφηκαν παραπάνω η µετατόπιση, η περιστροφή, η µεγέθυνση και η κύρτωση.

4.2.7 Σύνθεση συγγενών µετασχηµατισµών

Υποθέτουµε ότι Τ1( ) και Τ2( ) περιγράφουν δύο συγγενείς µετασχηµατισµούς µε πίνακες Μ1 και Μ2 αντίστοιχα. Πως µπορούµε να εκφράσουµε το µετασχηµατισµό που προκύπτει αν σε ένα σηµείο Α εφαρµόσουµε διαδοχικά τον Τ1 και Τ2;

Για να απαντήσουµε στο ερώτηµα αυτό υποθέτουµε ότι η εφαρµογή του µετασχηµατισµού Τ1 αντιστοιχίζει το σηµείο Α σε ένα άλλο σηµείο Β και η εφαρµογή του µετασχηµατισµού Τ2 αντιστοιχίζει το Β σε ένα άλλο σηµείο Γ. Στην περίπτωση αυτή θα ισχύει ότι:

Β = Α*Μ1 Γ = Β*Μ2 = (Α*Μ1)*M2 = A*(M1*M2)

Εποµένως ο µετασχηµατισµός που προκύπτει από τη σύνθεση των δύο µετασχηµατισµών που αναφέραµε θα είναι ένας συγγενής µετασχηµατισµός µε πίνακα Μ ίσο µε το γινόµενο των πινάκων των επιµέρους µετασχηµατισµών µε τη σειρά που εφαρµόζονται.

Ως παράδειγµα σύνθεσης ενός µετασχηµατισµού από µια σειρά άλλων απλούστερων µετασχηµατισµών µπορούµε να θεωρήσουµε την περιστροφή κατά γωνία θ ενός σηµείου Α (xA, yA) γύρω από ένα τυχαίο κέντρο περιστροφής Β (xB, yB). Ενας τέτοιος µετασχηµατισµός µπορούµε να θεωρήσουµε ότι υλοποιείται µε τη σύνθεση τριών απλούστερων µετασχηµατισµών στο σηµείο Α:

• Μίας µετατόπισης των Α και Β κατά (-xB, -yB)

12/11/2003 34

Page 35: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

• Μίας περιστροφής του Α που προκύπτει από τον παραπάνω µετασχηµατισµό κατά γωνία θ γύρω από το σηµείο Β που προκύπτει από τον παραπάνω µετασχηµατισµό

• Μίας µετατόπισης των δύο σηµείων κατά (xB, yB)

12/11/2003 35

Page 36: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

5.1. Γεωµετρικοί Μετασχηµατισµοί Αντικειµένων στον Τρισδιάστατο Χώρο

Οι γεωµετρικοί µετασχηµατισµοί που αναφέραµε στην προηγούµενη ενότητα εφαρµόζονται στον δισδιάστατο χώρο. Η γενίκευση τους στον τρισδιάστατο χώρο είναι αρκετά απλή και θα την περιγράψουµε στη συνέχεια. Κατ' αναλογία µε τη δισδιάστατη περίπτωση, οι µετασχηµατισµοί στον τρισδιάστατο χώρο για ένα σηµείο σε οµογενείς συντεταγµένες περιγράφονται από µία εξίσωση της µορφής:

(xB, yB, zB, 1) = (xA, yA, zA, 1)*M

όπου ο πίνακας Μ είναι ένας πίνακας 4x4. Για ένα διάνυσµα η αντίστοιχη σχέση είναι:

(xB, yB, zB, 0) = (xA, yA, zA, 0)*M

Για καθένα από τους µετασχηµατισµούς της µετατόπισης, της περιστροφής, της κύρτωσης και της µεγέθυνσης/σµίκρυνσης ο M λαµβάνει τις τιµές που περιγράφονται στη συνέχεια

5.1.1 Μετατόπιση

Αν Dx, Dy, Dz η µετατόπιση ως προς σε καθένα από τους άξονες x, y, z τότε ο Μ έχει την ακόλουθη µορφή:

1 0 0 0 0 1 0 0 0 0 1 0

Dx Dy Dz 1

5.1.2 Περιστροφή

Η περιστροφή στον τρισδιάστατο χώρο είναι πιο σύνθετη από την περίπτωση του δισδιάστατου µιάς και σε αυτό το χώρο θα πρέπει να επιλέξουµε περιστροφή γύρω από ένα άξονα περιστροφής και όχι γύρω από ένα σηµείο. Η πιο απλή περίπτωση του συγκεκριµένου µετασχηµατισµού αφορά την περιστροφή ενός σηµείου γύρω από κάποιον από τους άξονες xyz. Αν υποθέσουµε ότι έχουµε ένα δεξιόστροφο σύστηµα συντεταγµένων (βλ. Εικ. 5.1) και ότι µια γωνία αυξάνεται κατά φορά αντίθετη των δεικτών του ρολογιού γύρω από ένα άξονα περιστροφής, τότε η περιστροφή γύρω από κάποιο από τους άξονες που αναφέραµε κατά µία γωνία Α περιγράφεται από τον πίνακα Μ µε την ακόλουθη µορφή:

12/11/2003 36

Page 37: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

• Περιστροφή γύρω από τον άξονα x:

1 0 0 0 0 c s 0 0 -s c 0 0 0 0 1

• Περιστροφή γύρω από τον άξονα y:

c 0 -s 0 0 1 0 0 s 0 c 0 0 0 0 1

• Περιστροφή γύρω από τον άξονα z:

c s 0 0 -s c 0 0 0 0 1 0 0 0 0 1

όπου c = cos(A) και s = sin(A)

Η περιστροφή γύρω από έναν τυχαίο άξονα περιγράφεται από τη σύνθεση µίας σειράς από περιστροφές γύρω από τους άξονες xyz. Πιο συγκεκριµένα, έστω ότι θέλουµε να περιστρέψουµε ένα σηµείο Ρ κατά γωνία Α γύρω από ένα άξονα περιστροφής που περιγράφεται από το διάνυσµα κατεύθυνσης u (βλ. Εικ. 5.1). Το σηµείο Ρ µετά την περιστροφή του θα ταυτίζεται µε το σηµείο Q. Για την περιγραφή του µετασχηµατισµού θα θεωρήσουµε ότι η θέση του σηµείου Ρ εκφράζεται σε ένα σύστηµα σφαιρικών συντεταγµένων. Σε ένα τέτοιο σύστηµα η θέση ενός σηµείου Ρ καθορίζεται από µία τριάδα (L, θ, φ) όπου L το µήκος του διανύσµατος ΟΡ που συνδέει το Ρ µε την αρχή των αξόνων, θ η γωνία που σχηµατίζει η προβολή του ΟΡ στο επίπεδο xy µε τον άξονα x και φ η γωνία που σχηµατίζει το διάνυσµα ΟΡ µε τον άξονα z. Θεωρούµε ότι η θ αυξάνει όταν κινηθούµε µε φορά αντίθετη των δεικτών του ρολογιού από τον άξονα χ προς τον άξονα y, ενώ η φ αυξάνει όταν κινηθούµε από τον z προς τον -z. Επίσης θεωρούµε ότι η θ λαµβάνει τιµές από 0 έως και 2π, ενώ η φ µεταβάλλεται από 0 έως και π.

12/11/2003 37

Page 38: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Εικόνα 5.1: Περιστροφή σηµείου Ρ κατά γωνία Α γύρω από τον άξονα περιστροφής

u.

Για να υλοποιήσουµε το µετασχηµατισµό που περιγράψαµε θα πρέπει να εκτελέσουµε µια σειρά από περιστροφές γύρω από τους άξονες x, y ή z, έτσι ώστε ο άξονας u να συµπέσει µε τον άξονα z. Στη συνέχεια θα περιστρέψουµε το σηµείο Ρ γύρω από τον άξονα z κατά γωνία Α και µετά θα εκτελέσουµε µια σειρά περιστροφών για να επαναφέρουµε τον άξονα u στην αρχική του θέση. Για να ταυτιστεί ο άξονας u µε τον άξονα z θα πρέπει να περιστρέψoυµε τον u κατά γωνία -θ γύρω από τον άξονα z και στη συνέχεια να περιστρέψουµε τον άξονα που προκύπτει κατά γωνία -φ γύρω από τον άξονα y. Τώρα που ο άξονας u ταυτίζεται µε τον z εκτελούµε την περιστροφή γύρω από τον z κατά γωνία Α και στη συνέχεια περιστρέφουµε τον άξονα u κατά γωνία φ γύρω από τον άξονα y και κατά θ γύρω από τον άξονα z. Ο πίνακας Μ που περιγράφει τη σύνθεση των µετασχηµατισµών που αναφέραµε θα προκύπτει από το γινόµενο των πινάκων που υλοποιούν καθεµία από τις περιστορφές που περιγράψαµε,. δηλ:

Μu(A) = Μz(-θ)Μy(-φ)Μz(A)Μy(φ)Μz(θ)

Aσκηση: Ποια θα είναι η τελική µορφή του Μu(A);

Κώδικας που υλοποιεί την περιστροφή ενός σηµείου γύρω από ένα τυχαίο άξονα περιστροφής στις τρεις διαστάσεις περιέχεται στα αρχεία Rota3D.java και Point3D.java εδώ.

Κώδικας που υλοποιεί την περιστροφή ενός σηµείου γύρω από ένα άλλο τυχαίο σηµείο στις δύο διαστάσεις περιέχεται στo αρχείo ArrowPt.java εδώ.

5.1.3 Κύρτωση

H κύρτωση εκφράζεται µε έναν πίνακα Μ της µορφής:

1 hxy hxz 0

12/11/2003 38

Page 39: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

hyx 1 hyz 0 hzx hzy 1 0 0 0 0 1

5.1.4 Μεγέθυνση/Σµίκρυνση

H κύρτωση εκφράζεται µε έναν πίνακα Μ της µορφής:

Sx 0 0 0 0 Sy 0 0 0 0 Sz 0 0 0 0 1

Ολοι οι µετασχηµατισµοί που περιγράψαµε στις τρεις διαστάσεις µπορούν να συνοψιστούν στον ορισµό ενός πίνακα που θα προέλθει από τη χρήση οµογενών συντεταγµένων για την περιγραφή του χώρου µας. Κατ' αναλογία µε τη δισδιάστατη περίπτωση ένας τέτοιος πίνακας θα έχει τη µορφή:

m11 m12 m13 0 m21 m22 m23 0 m31 m32 m33 0 lx ly lz 1

όπου mij τα αντίστοιχα στοιχεία του πίνακα Μ και (lx, ly, lz) τα στοιχεία του πίνακα L.

5.1.5 Ιεράρχηση Μετασχηµατισµών

Αρκετά αντικείµενα αποτελούνται από µικρότερα µέρη τα οποία συνδέονται µεταξύ τους και τα οποία µπορούν να εκτελέσουν σχετικές κινήσεις το ένα µε το άλλο. Μια χαρακτηριστική περίπτωση ενός τέτοιου αντικειµένου αποτελεί ο δισδιάστατος ροµποτικός βραχίονας της Εικόνας 5.2.

12/11/2003 39

Page 40: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Εικόνα 5.2: ∆ισδιάστατος ροµποτικός βραχίονας.

Ο βραχίονας της Εικόνας 5.2 αποτελείται από ένα κορµό Κ µήκους Η που απέχει L1 από την αρχή των αξόνων, ένα βραχίονα Β µήκους Α που συνδέεται µε τον κορµό και έναν ακόµη βραχίονα Γ µήκους L ο οποίος συνδέεται µε το Β. Θεωρούµε ότι ο Β µπορεί να περιστραφεί σχετικά µε τον Κ κατά γωνία Θ1 ενώ ο Γ µπορεί να περιστραφεί σχετικά µε το Β κατά γωνία Θ2. ∆οθέντος όλων αυτών των στοιχείων και δεδοµένου ότι αυτά µπορούν να µεταβάλλονται στο χρόνο πως µπορούµε να σχεδιάσουµε κάθε στιγµή όλα τα σηµεία του ροµποτικού βραχίονα;

Ένας αλγόριθµος σχεδίασης που να µπορεί να απαντήσει στο ερώτηµα µας βασίζεται στη δηµιουργία µιας ιεραρχίας µετασχηµατισµών που περιγράφουν τη σχετική κίνηση των σηµείων του κάθε βραχίονα σε ένα σύστηµα συντεταγµένων που έχει ως αρχή το άκρο του προηγούµενου βραχίονα µε το οποίο συνδέεται ο τρέχων βραχίονας. Π.χ. όλα τα σηµεία του βραχίονα Β µπορούµε να θεωρήσουµε ότι περιστρέφονται κάθε χρονική στιγµή γύρω από το σηµείο Ρ1 το άκρο δηλαδή του κορµού Κ του ροµπότ. Εποµένως µπορούµε πολύ εύκολα να εκφράσουµε την κίνηση των σηµείων του Β σε ένα σύστηµα συντεταγµένων παράλληλο µε το αρχικό και µε κέντρο το σηµείο Ρ1. Με τη σειρά τους όµως όλα τα σηµεία του κορµού Κ του ροµπότ µας ταυτίζονται µε τον άξονα y ενός συστήµατος συντεταγµένων που είναι παράλληλο µε το αρχικό µας σύστηµα και έχει σαν κέντρο το σηµείο (L1,0). Αρα για να βρούµε τις συντεταγµένες του κάθε σηµείου του κορµού Κ µπορούµε να εφαρµόσουµε ένα µετασχηµατισµό µετατόπισης κατά (L1,0) στα σηµεία του άξονα y του αρχικού µας συστήµατος συντεταγµένων. Ο πίνακας Mk που περιγράφει αυτόν το µετασχηµατισµό θα έχει την ακόλουθη µορφή σε οµογενείς συντεταγµενες:

1 0 0 0 1 0 L1 0 1

12/11/2003 40

Page 41: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Στη συνέχεια για να βρούµε τα σηµεία του βραχίονα Β αρκεί να παρατηρήσουµε ότι αυτά έχουν περιστραφεί κατά γωνία -Θ1 ως προς το σηµείο Ρ1 και στη συνέχεια έχουν µετατοπιστεί κατά (0, Η) ως προς το σύστηµα συντεταγµένων που είναι παράλληλο µε το αρχικό µας και έχει κέντρο το σηµείο Ρ1. Ο πίνακας MΒ που περιγράφει αυτόν τον µετασχηµατισµό θα έχει την ακόλουθη µορφή:

c1 s1 0 -s1 c1 0 0 H 1

όπου c1 = cos(Θ1) και s1 = sin(Θ1). Η εφαρµογή του µετασχηµατισµού που περιγράφεται από τον πίνακα MΒ στα σηµεία του βραχίονα Β θα µας έδινε τις συντεταγµένες των σηµείων αυτών αν ο κορµός Κ βρισκόταν στην αρχή του συστήµατος συντεταγµένων. Επειδή όµως αυτό δεν συµβαίνει στην περίπτωση µας ο συνολικός µετασχηµατισµός που θα πρέπει να εφαρµοστεί στα σηµεία του Β θα περιγράφεται µας δίνεται από τον πίνακα που προκύπτει από το γινόµενο MΒMk. Κατ' αναλογία µπορούν να υπολογιστούν και τα σηµεία του βραχίονα Γ κ.ο.κ.

5.2 Εφαρµογές Συγγενών Μετασχηµατισµών

5.2.1 Συστήµατα Επαναλαµβανόµενων Συναρτήσεων (Iterated Function Systems (IFS))

Εφαρµόζοντας επαναληπτικά και µε κάποιο βαθµό τυχαιότητας µια σειρά από οµοπαραλληλικούς µετασχηµατισµούς σε ένα σηµείο µπορούµε να δηµιουργήσουµε γεωµετρικά σχήµατα που αναπαριστούν µε αρκετή πιστότητα φυσικές µορφές. Τέτοιες οµάδες µετασχηµατισµών ονοµάζονται συστήµατα επαναλαµβανόµενων συναρτήσεων και ο αλγόριθµος παραγωγής του για το διδιάστατο χώρο έχει την ακόλουθη µορφή:

• Ορισε µια οµάδα από οµοπαραλληλικούς µετασχηµατισµούς και συσχέτισε καθένα από αυτούς µε µια πιθανότητα εφαρµογής. Το άρθροισµα όλων των πιθανοτήτων για τα µέλη της οµάδας θα πρέπει να είναι ίσο µε 1.

• ∆ιάλεξε ένα τυχαίο σηµείο (π.χ. Α) στο επίπεδο xy. Με βάση τις πιθανότητες εφαρµογής του προηγουµένου βήµατος επέλεξε και εφάρµοσε κάποιο από τους µετασχηµατισµούς της οµάδας στο Α. Αν Β είναι το σηµείο που προκύπτει από την εφαρµογή του µετασχηµατισµού στον Α σχεδίασε το ευθύγραµµο τµήµα ΑΒ.

• Εκτέλεσε το προηγούµενο βήµα για το σηµείο Β κ.ο.κ.

5.2.2 Συνθετική Κίνηση Αρθρωτών Μηχανισµών

Η συγκεκριµένη εφαρµογή αφορά στη δηµιουργία αρθρωτών µηχανισµών µε µορφή και κινηµατικά χαρακτηριστικά παρόµοια µε αυτά του ανθρώπου ή άλλων σπονδυλωτών ζώων και στην ανάπτυξη προγραµµάτων για την κίνηση των συγκεκριµένων δοµών µε το µέγιστο βαθµό αληθοφάνειας. Πιο συγκεκριµένα, µε τον όρο κινηµατικά χαρακτηριστικά ή κινηµατική γενικότερα εννοούµε τη µελέτη των

12/11/2003 41

Page 42: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

φαινοµένων της κίνησης ανεξάρτητα από τις δυνάµεις που την προκαλούν. Ο όρος αρθρωτός µηχανισµός αναφέρεται σε µια διάταξη άκαµπτων βραχιόνων (links) που συνδέονται µεταξύ τους µε συνδέσµους (joints). Τα κινηµατικά χαρακτηριστικά µιας τέτοιας διάταξης περιγράφονται από τους βαθµούς ελευθερίας (degrees of freedom ή DOF) που την χαρακτηρίζουν. Οι βαθµοί ελευθερίας ενός κινηµατικού µηχανισµού είναι ο αριθµός των ανεξάρτητων µεταβλητών θέσης που είναι απαραίτητες για την περιγραφή της κατάστασης της (δηλ. των συντεταγµένων όλων των σηµείων που την αποτελούν). Οι ανεξάρτητες αυτές µεταβλητές περιγράφονται από ένα διάνυσµα, το διάνυσµα κατάστασης (state vector), για το συγκεκριµένο µηχανισµό. Τερµατικό σηµείο (end effector) ονοµάζουµε το ελεύθερο άκρο ενός αρθρωτού µηχανισµού (π.χ. κάθε δάκτυλο στο ανθρώπινο χέρι (πόδι) αποτελεί ένα τερµατικό σηµείο για το µηχανισµό του χεριού (ποδιού)).

Υπάρχουν δύο τρόποι περιγραφής και υπολογισµού της επιθυµητής κατάστασης στην οποία θέλουµε να βρεθεί ένας αρθρωτός µηχανισµός σε εφαρµογές συνθετικής κίνησης:

• η ευθεία κινηµατική περιγραφή (forward kinematics) • η αντίστροφη κινηµατική περιγραφή (inverse kinematics).

Στα παρακάτω θεωρούµε ότι Θ είναι το διάνυσµα κατάστασης για ένα µηχανισµό και Χ είναι οι συντεταγµένες των τερµατικών σηµείων του.

5.2.2.1 Eυθεία Κινηµατική Περιγραφή

Στην περίπτωση αυτή για τον υπολογισµό της κατάστασης του µηχανισµού περιγράφεται η κίνηση όλων των συνδέσµων που απαρτίζουν το µηχανισµό. Οι θέσεις των τερµατικών σηµείων υπολογίζονται ως το αποτέλεσµα της ιεραρχικής εφαρµογής των µετασχηµατισµών που καθορίζουν τη θέση των βραχιόνων της διάταξης. Με άλλα λόγια, η ευθεία κινηµατική περιγραφή επιλύει την εξίσωση

Χ = f(Θ)

µε Θ γνωστό και X άγνωστο.

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

5.2.2.2 Αντίστροφη Κινηµατική Περιγραφή

Στην περίπτωση αυτή για τον υπολογισµό της κατάστασης του µηχανισµού περιγράφεται µόνο η θέση των τερµατικών σηµείων από τις οποίες υπολογίζονται µετά οι θέσεις των υπολοίπων στοιχείων του µηχανισµού (βραχίονες και σύνδεσµοι). Με άλλα λόγια, η ευθεία κινηµατική περιγραφή επιλύει την εξίσωση

Θ = f-1(Χ)

12/11/2003 42

Page 43: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

µε Χ γνωστό και Θ άγνωστο.

∆εδοµένου ότι η θέση των τερµατικών σηµείων ενός µηχανισµού µπορεί να επιτευχθεί από περισσότερα του ενός διανύσµατα κατάστασης, για την εφαρµογή της συγκεκριµένης µεθόδου θα πρέπει να εφαρµοστούν µια σειρά από περιορισµοί στην κίνηση των υπολοίπων στοιχείων του µηχανισµού. Οι συγκεκριµένοι περιορισµοί επιδιώκουν να αντιστοιχίσουν σε κάθε δυνατή θέση των τερµατικών σηµείων που απαρτίζουν το µηχανισµό ένα και µόνο ένα διάνυσµα κατάστασης.

5.2 Μη Συγγενείς Μετασχηµατισµοί

Μη συγγενείς µετασχηµατισµοί χρησιµοποιούνται συχνά στα γραφικά για την επίτευξη ορισµένων ειδικών εφφέ. Ενας από τους πιο ενδιαφέροντες τέτοιους µετασχηµατισµούς είναι και ο µετασχηµατισµός fish-eye τον οποίο και εξετάζουµε στη συνέχεια.

5.2.1 Μετασχηµατισµός Fish-Eye

Ο µετασχηµατισµός αυτός µειώνει στο µισό τη γωνία που σχηµατίζουν τα σηµεία µίας εικόνας στο επίπεδο xy µε τον άξονα z. Πιο συγκεκριµένα, αν Ρ είναι ένα σηµείο της εικόνας στο επίπεδο xy τότε το σηµείο αυτό αντιστοιχίζεται στο σηµείο Q που ανήκει στο ευθύγραµµο τµήµα ΟΡ αλλά βρίσκεται πιο κοντά στο κέντρο των αξόνων από το σηµείο Q (βλ. Εικ. 5.2.1). Η γενική µορφή των συντεταγµένων του σηµείου Q θα είναι: Q = sP. Για τον υπολογισµό του s, αρκεί να φανταστούµε ένα σηµείο Ε που βρίσκεται στο άκρο του µοναδιαίου διανύσµατος στον άξονα z και να ονοµάσουµε φ τη γωνία που σχηµατίζει το ευθύγραµµο τµήµα ΕΡ µε τον άξονα z. Στην περίπτωση αυτή το µέγεθος της γωνίας φ θα µας δίνεται από τον τύπο:

φ = atan(|P|), όπου |Ρ| το µήκος του ευθύγραµµου τµήµατος ΟΡ.

Εικόνα 5.2.1: Γεωµετρική περιγραφή του µετασχηµατισµού fish-eye.

12/11/2003 43

Page 44: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Για την υλοποίηση του µετασχηµατισµού fish-eye τοποθετούµε το σηµείο Q έτσι ώστε η γωνία που σχηµατίζει το ευθύγραµµο τµήµα ΕQ µε τον άξονα z να ισούται µε φ/2. Στην περίπτωση αυτή θα ισχύει ότι:

|Q| = tan(φ/2)

Εποµένως το s θα µας δίνεται από τον τύπο:

s = tan(atan(|P|)/2)/|P|

12/11/2003 44

Page 45: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

6. Προοπτική

6.1 Εισαγωγή

Η προοπτική αποτελεί ένα παράδειγµα µιας οµάδας µετασχηµατισµών που είναι γνωστές σαν προβολές και που αποσκοπούν στο να µετασχηµατίσουν ένα n-διάστατο σύστηµα συντεταγµένων σε ένα σύστηµα συντεταγµένων διάστασης µικρότερης του n. Η προοπτική ανήκει σε ένα υποσύνολο τέτοιων προβολών και πιο συγκεκριµένα στις επίπεδες γεωµετρικές προβολές µιάς και η προβολή γίνεται πάνω σε ένα επίπεδο παρά σε µία καµπύλη επιφάνεια και χρησιµοποιεί ευθείες γραµµές για την υλοποίηση της αντιστοίχισης παρά καµπύλες. Υπάρχουν δύο οικογένειες επίπεδων γεωµετρικών προβολών: οι προοπτικές προβολές και οι παράλληλες. Η διαφορά µεταξυ τους εντοπίζεται στην διαφορετική απόσταση του κέντρου της προβολής από το επίπεδο στο οποίο γίνεται η προβολή στις δύο περιπτώσεις (βλ. Εικ. 6.1). Αν η απόσταση αυτή είναι πεπερασµένη τότε η προβολή είναι προοπτική ενώ αν είναι άπειρη τότε η προβολή είναι παράληλη,

Εικόνα 6.1: Παραδείγµατα προοπτικής (αριστερά) και παράλληλης (δεξιά) προβολής.

Το εικαστικό αποτέλεσµα της εφαρµογής της προβολής σε ένα τρισδιάστατο σύστηµα συντεταγµένων είναι παρόµοιο µε την εικόνα που αποτυπώνεται από την όραση µας κατά την αλληλεπίδραση µε το περιβάλλον µας και από την εικόνα που προκύπτει από τη φωτογράφιση µίας σκηνής. Το αποτέλεσµα αυτό µπορεί να συνοψιστεί ως εξής:

Το µέγεθος της προοπτικής προβολής ενός αντικειµένου είναι αντιστρόφως ανάλογο της απόστασης του κέντρου της προβολής από το αντικείµενο.

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

12/11/2003 45

Page 46: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

αληθοφανές αλλά οι διαστάσεις των αντικειµένων που προβάλλονται δε µεταβάλλονται.

Ενα από τα κυριότερα χαρακτηριστικά της προοπτικής είναι ότι η προβολή παράλληλων γραµµών που όµως δεν είναι παράλληλες µε το επίπεδο προβολής, παύουν να είναι παράλληλες και φαίνονται ότι συναντώνται σε ένα σηµείο (το σηµείο εξαφάνισης (vanishing point)).

6.2 Υπολογισµός Προοπτικής

Για να δηµιουργήσουµε την προοπτική προβολή ενός τρισιδάστατου αντικειµένου θα πρέπει να υπολογίσουµε την προβολή κάθε σηµείου Α (x, y, z) του αντικειµένου στο σηµείο Α' (X, Y) του επιπέδου προβολής. Εποµένως θα πρέπει να βρούµε ένα µετασχηµατισµό που θα µας µεταφέρει από τις κοσµικές συντεταγµένες (world coordinates) (x, y, z) ενός σηµείου στις συντεταγµένες οθόνης (screen coordinates) (X, Y) της προβολής του. Για τον υπολογισµό του συγκεκριµένου µετασχηµατισµού, υποθέτουµε ότι µεταξύ του σηµείου κατόπτευσης (Κ) ενός αντικειµένου στο χώρο και του ιδίου του αντικειµένου παρεµβάλλεται το επίπεδο προβολής στο οποίο θα αναφερόµαστε από εδώ και στο εξής ως οθόνη (βλ. Εικ. 6.1) . Για κάθε σηµείο Α του αντικειµένου το ευθύγραµµο τµήµα ΚΑ τέµνει την οθόνη στο σηµείο Α'. Αν υποθέσουµε ότι το σηµείο κατόπτευσης ενός αντικειµένου είναι ένα σηµείο Ε στο χώρο τότε υπολογισµός της προοπτικής προβολής ενός τέτοιου σηµείου γίνεται µε µια ακολουθία δύο βηµάτων:

• Μετατροπή των κοσµικών συντεταγµένων του σηµείου σε ένα σύστηµα συντεταγµένων µε αρχή το σηµείο Ε. Ονοµάζουµε τις συντεταγµένες του κάθε σηµείου στο καινούργιο σύστηµα συντεταγµένων οπτικές συντεταγµένες (eye coordinates). Η µετατροπή αυτή είναι γνωστή ως µετασχηµατισµός κατόπτευσης (viewing transformation).

• Τον υπολογισµό των συντεταγµένων οθόνης κάθε σηµείου µε βάση τις οπτικές του συντεταγµένες. Ο συγκεκριµένος µετασχηµατισµός είναι γνωστός ως µετασχηµατισµός προοπτικής (perspective transformation).

6.2.1 Μετασχηµατισµός Κατόπτευσης

Υποθέτουµε ότι οι κοσµικές συντεταγµένες ενός σηµείου εκφράζονται σε ένα δεξιόστροφο σύστηµα συντεταγµένων µε κέντρο το σηµείο Ο (βλ. Εικ. 6.2) και ότι το σηµείο κατόπτευσης βρίσκεται στο σηµείο Ε. Ο σκοπός του µετασχηµατισµού κατόπτευσης είναι να εκφράσει τις συντεταγµένες όλων των σηµείων ενός αντικειµένου ως προς ένα δεξιόστροφο σύστηµα συντεταγµένων µε κέντρο το σηµείο Ε και άξονες µε διευθύνσεις που περιγράφονται από την Εικόνα 6.2.

12/11/2003 46

Page 47: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Εικόνα 6.2: Κοσµικό και οπτικό σύστηµα συντεταγµένων στο µετασχηµατισµό

κατόπτευσης.

Αν υποθέσουµε ότι οι κοσµικές συντεταγµένες του σηµείου κατόπτευσης E είναι (ex, ey, ez) για να επιτύχουµε την περιγραφή όλων των σηµείων ως προς το οπτικό σύστηµα συντεταγµένων θα πρέπει να µετατοπίσουµε το κέντρο του κοσµικού συστήµατος συντεταγµένων από το σηµείο Ο στο σηµείο Ε στη συνέχεια να περιστρέψουµε το σύστηµα συντεταγµένων που προκύπτει κατά γωνία θ+900 γύρω από τον z άξονα του και στη συνέχεια να περιστρέψουµε το σύστηµα συντεταγµένων που προκύπτει πάλι κατα γωνία φ γύρω από τον x άξονα του. Ο πίνακας Μ που θα περιγράφει τη σύνθεση των τριών µετασχηµατισµών που µόλις περιγράψαµε θα έχει σε οµογενείς συντεταγµένες τη µορφή:

-sinθ -cosφcosθ sinφcosθ 0 cosθ -cosφsinθ sinφsinθ 0

0 sinφ cosφ 0 0 0 |OE| 1

Η εφαρµογή του παραπάνω πίνακα στις κοσµικές συντεταγµένες ενός σηµείου ως προς τους άξονες x και y µας δίνει την παράλληλη προβολή ενός αντικειµένου στην οθόνη µας. Η προβολή αυτή είναι γνωστή και ως ορθογραφική προβολή (orthographic projection).

6.2.2 Μετασχηµατισµός Προοπτικής

Μετά από την εφαρµογή του µετασχηµατισµού της 6.2.1 οι συντεταγµένες ενός σηµείου στον τρισδιάστατο χώρο αναφέρονται στο σύστηµα συντεταγµένων κατόπτευσης. Για τον υπολογισµό του µετασχηµατισµού προοπτικής υποθέτουµε ότι η οθόνη είναι παράλληλη στο επίπεδο xy του συστήµατος κατόπτευσης και τέµνει τον άξονα z στο σηµείο Q (0, 0, -d) µε d > 0. Αν θεωρήσουµε ότι το κέντρο του συστήµατος συντεταγµένων οθόνης ταυτίζεται µε το σηµείο Q, οι άξονες X και Y του συστήµατος αυτού είναι παράλληλοι µε τους άξονες x και y του συστήµατος

12/11/2003 47

Page 48: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

κατόπτευσης και το σηµείο Ρ' (Χ, 0) αποτελεί την προβολή του σηµείου Ρ (x, 0, z) στιν άξονα z τότε για την προβολή Ρ' θα ισχύει ότι (βλ. Εικ. 6.3):

Εικόνα 6.3: Υπολογισµός Μετασχηµατισµού Προοπτικής.

P'Q/EQ = PR/ER και άρα X/d = x/-z -> X = -d x/z

Ανάλογα Y = -d y/z.

Για την υλοποίηση της προοπτικής προβολής µελετήστε τα αρχεία CubePers.java, Point2D.java και Point3D.java που βρίσκονται εδώ και υλοποιούν την προοπτική προβολή ενός κύβου.

12/11/2003 48

Page 49: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

7. Υπολογισµός Οπτικών Χαρακτηριστικών Τρισδιάστατων Αντικειµένων

Η διαδικασία του υπολογισµού των οπτικών χαρακτηριστικών (σχήµα και χρώµα) µίας εικόνας είναι γνωστή στη βιβλιογραφία σαν rendering και αποτελείται από µια σειρά από απλούστερες διαδικασίες οι οποίες περιγράφονται παρακάτω:

• Απεικόνιση σε Εικονίδια (Rasterization). Η συγκεκριµένη διαδικασία έχει σαν σκοπό να µετασχηµατίσει τις συντεταγµένες οθόνης ενός αντικειµένου στις συντεταγµένες συσκευής (δηλ. τις συντεταγµένες των εικονιδίων) που θα χρησιµοποιηθούν για την προβολή της εικόνας ενός αντικειµένου.Εχουµε ήδη ασχοληθεί µε µία τέτοια διαδικασία όταν περιγράψαµε το µετασχηµατισµό από τις λογικές συντεταγµένες στις συντεταγµένες οθόνης (βλ. ενότητα 1.3 ).

• Υπολογισµός των ορατών επιφανειών αντικειµένων (hidden surface removal). Η συγκεκριµένη διαδικασία ασχολείται µε την επίλυση του προβλήµατος της ανίχνευση των επιφανειών ενός αντικειµένου που είναι ορατά από τον παρατηρητή µε βάση το τρέχον σηµείο κατόπτευσης. Το συγκεκριµένο πρόβληµα συνήθως υποδιαιρείται σε δύο µικρότερα προβλήµατα, τον υπολογισµό πλήρως ορατών επιφανειών ενός αντικειµένου από το τρέχον σηµείο κατόπτευσης (backface culling) και το πρόβληµα του υπολογισµού των επιφανειών ενός αντικειµένου οι οποίες είναι µερικώς ορατές από την παρούσα θέση κατόπτευσης λόγω του ότι παρεµβάλλεται κάποιο άλλο αντικείµενο µεταξύ της επιφάνειας και του παρατηρητή.

• Υπολογισµός της σκίασης κάθε εικονιδίου (pixel shading). Η συγκεκριµένη διαδικασία ασχολείται µε τον υπολογισµό του χρώµατος που θα έχει το κάθε εικονίδιο στην εικόνα µας. Υπάρχουν δύο τρόποι να υπολογιστεί το συγκεκριµένο χρώµα. Ο πρώτος τρόπος υπολογίζει για όλα τα εικονίδια που χρησιµοποιούνται για την απεικόνιση µίας επιφάνειας το ίδιο χρώµα. Το αποτέλεσµα της εφαρµογής ενός τέτοιου αλγορίθµου είναι η δηµιουργία µίας εικόνας για το αντικείµενο που µας ενδιαφέρει µε έντονα τα γεωµετρικά χαρακτηριστικά µε τα οποία προσεγγίζεται η απεικόνιση του. Ο δεύτερος τρόπος εφαρµόζει µια από τις δύο κλασσικές τεχνικές σκίασης που υπάρχουν, τη σκίαση κατά Gouraud (Gouraud shading) ή τη σκίαση κατά Phong (Phong shading). H εφαρµογή οποιασδήποτε από τις δύο αυτές µεθόδους δεν υπολογίζει το ίδιο χρώµα για τα εικονίδια που αντιστοιχούν σε µία επιφάνεια δηµιουργώντας µε αυτόν τον τρόπο περισσότερο αληθοφανείς αναπαραστάσεις τρισδιάστατων αντικειµένων.

Στην παρούσα και τηνεπόµενη ενότητα θα ασχοληθούµε µε τη δεύτερη και τρίτη διαδικασία υπολογισµού των οπτικών χαρακτηριστικών ενός αντικειµένου.

7.1 Υπολογισµός Ορατών Επιφανειών Αντικειµένων

Οι αλγόριθµοι που θα εξετάσουµε υποθέτουν ότι η επιφάνεια κάθε αντικειµένου µπορεί να προσεγγιστεί από ένα σύνολο εδρών καθεµία από τις οποίες αποτελεί ένα πολύγωνο. Καθεµία από τις έδρες αυτές παριστάνεται εσωτερικά από µια ακολουθία κορυφών οι οποίες ανήκουν στο πολύγωνο. Στα παρακάτω ορίζουµε σα σκηνή ένα σύνολο από τρισδιάστατα αντικείµενα που απαρτίζουν µια εικόνα.

12/11/2003 49

Page 50: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Η διαδικασία του υπολογισµού των ορατών επιφανειών ενός αντικειµένου συνήθως εφαρµόζει τον αλγόριθµο της ενότητας 7.1.1 για να δηµιουργήσει ένα αρχικό σύνολο εδρών οι οποίες θεωρητικά είναι ορατές από το παρόν σηµείο κατόπτευσης και στη συνέχεια εφαρµόζει στο σύνολο αυτό έναν από τους αλγόριθµους της ενότητας 7.1.2 ώστε να ανιχνεύσει έδρες οι οποίες είναι µερικώς ορατές από το παρόν σηµείο κατόπτευσης.

7.1.1 Υπολογισµός πλήρως ορατών εδρών

Για την αληθοφανή απεικόνιση τρισδιάστατων σκηνών στην οθόνη µας θα πρέπει να ληφθεί υπ' όψη η ύπαρξη εδρών σε ένα τρισιδάστατο αντικείµενο οι οποίες δεν είναι ορατές από τη σηµείο κατόπτευσής του. Για παράδειγµα, αν υποθέσουµε ότι οι Εικόνες 7.1 (α) και (β) περιγράφουν ένα τρισδιάστατο αδιαφανή κύβο µε σηµείο κατόπτευσης που ταυτίζεται µε τη θέση του αναγνώστη. τότε η Εικόνα 7.1(β) αποτελεί µια περισσότερο αληθοφανή αναπαράσταση ενός τέτοιου κύβου µιας και σε αυτή δεν έχουν σχεδιαστεί οι έδρες που είναι αόρατες απο την παρούσα θέση κατόπτευσης. Π.χ. η έδρα 2673 στην Εικόνα 7.1(α) δεν έχει σχεδιαστεί στην Εικόνα 7.1(β).

Εικόνα 7.1: Υπολογισµός ορατών επιφανειών κύβου.

Ο υπολογισµός των εδρών ενός αντικειµένου που είναι πλήρως ορατές βασίζεται στο σχετικό προσανατολισµό των σηµείων που ορίζουν κάθε έδρα του αντικειµένου. Για παράδειγµα στην περίπτωση ενός κύβου ενας αλγόριθµος υπολογισµού της ορατότητας τέτοιων επιφανειών αποθηκεύει κάθε έδρα του κύβου σα µία θετικά προσανατολισµένη ακολουθία των κορυφών που ορίζουν την έδρα. Στην περίπτωση αυτή ορίζουµε σα θετικά προσανατολισµένη ακολουθία την ακολουθία των κορυφών της έδρας κατά φορά αντίθετη των δεικτών του ρολογιού όταν κοιτάµε από έξω την έδρα. Π.χ., µια ακολουθία κορυφών για την έδρα 0123 είναι αρνητικά προσανατολισµένη αφού οι κορυφές σε αυτή τη διάταξη ακολουθούν τη φορά των

12/11/2003 50

Page 51: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

δεικτών του ρολογιού όταν κοιτάµε τη έδρα από έξω, δηλ. κοιτάµε τον κύβο από κάτω. Αντίθετα, η διάταξη 3210 είναι µια θετικά προσανατολισµένη ακολουθία. Για τον καθορισµό της ορατότητας της κάθε επιφάνειας ο αλγόριθµος υπολογίζει τις συντεταγµένες οθόνης των κορυφών της έδρας κάθε χρονική στιγµή και εξετάζει, µε βάση τις συντεταγµένες αυτές, ποιές από τις ακολουθίες κορυφών που περιγράφουν τις έδρες του σχήµατος έχουν θετικό προσανατολισµό. Οι έδρες που ικανοποιούν τη συνθήκη αυτή θα είναι ορατές από το συγκεκριµένο σηµείο κατόπτευσης.

Για παράδειγµα, αν θεωρήσουµε σαν σηµείο κατόπτευσης του κύβου της Εικόνας 7.1 τη θέση του αναγνώστη τότε ο προσανατολισµός των κορυφών της ακολουθίας 3210 θα είναι αρνητικός (σύµφωνος µε τη φορά των δεικτών του ρολογιού). Αρα η έδρα αυτή δεν θα είναι ορατή από το συγκεκριµένο σηµείο κατόπτευσης.

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

7.1.2 Υπολογισµός µερικώς ορατών εδρών

Για τον υπολογισµό των εδρών ενός αντικειµένου που είναι µερικώς ορατές από το παρόν σηµείο κατόπτευσηης µπορούν να χρησιµοποιηθούν δύο αλγόριθµοι. Ο αλγόριθµος του ζωγράφου (Painter's algorithm) και ο αλγόριθµος z-Buffer.

7.1.2.1 O Αλγόριθµος του Ζωγράφου

Ο συγκεκριµένος αλγόριθµος έχει πάρει το όνοµα του από την τεχνική που χρησιµοποιούν αρκετοί εικαστικοί καλλιτέχνες για την απεικόνιση µιας σκηνής. Η τεχνική αυτή συνίσταται αρχικά στην απεικόνιση του φόντου µιάς σκηνής και στη συνέχεια την διαδοχική σχεδίαση όλων των αντικειµένων που απαρτίζουν τη σκηνή κατά φθίνουσα σειρά της απόστασης του από το σηµείο κατόπτευσης. Με την εφαρµογή αυτής της τεχνικής τα σηµεία της επιφάνειας ενός αντικειµένου που είναι αόρατα από το σηµείο κατόπτευσης λόγω της ύπαρξης άλλων αντικειµένων που παρεµβάλλονται µεταξύ του αντικειµένου και του παρατηρητή θα επικαλυφθούν κατά τη σχεδίαση των αντικειµένων που παρεµβάλλονται αφού τα τελευταία θα βρίσκονται πιο κοντά στο τρέχον σηµείο κατόπτευσης.

Η εφαρµογή του συγκεριµένου αλγόριθµου χρησιµοποιεί τις συντεταγµένες όλων των αντκειµένων που απαρτίζουν τη σκηνή στο οπτικό σύστηµα συντεταγµένων. Πιο συγκεκριµένα όταν υπολογιστούν οι συντεταγµένες των κορυφών όλων των εδρών που απαρτίζουν το αντικείµενο µας στο οπτικό σύστηµα συντεταγµένων της ενότητας 6.2.1 τότε εφαρµόζουµε σε κάθε πολύγωνο τον αλγόριθµο τριγωνοποίησης της ενότητας 3.7 . Με αυτόν τον τρόπο δηµιουργούµε ένα σύνολο τριγώνων από τα οποία απαρτίζονται οι επιφάνειες όλων των αντικειµένων που περιλαµβάνονται στην παρούσα σκηνή. Για καθένα από αυτά τα τρίγωνα υπολογίζουµε την µέση συντεταγµένη zavg όλων των κορυφών του στον άξονα z. Για παράδειγµα αν zΑ, zΒ, και zΓ , είναι οι συντεταγµένες ως προς τον άξονα z του οπτικού συστήµατος συντεταγµένων των κορυφών Α, Β και Γ αντίστοιχα ενός τριγώνου ΑΒΓ τότε θα ισχύει ότι:

zavg = (zΑ + zΒ + zΓ)/3

12/11/2003 51

Page 52: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Στη συνέχεια ο αλγόριθµος ταξινοµεί όλα τα τρίγωνα που απαρτίζουν τη σκηνή µας σε µία λίστα κατά φθίνουσα σειρά του zavg και σχεδιάζει όλα τα στοιχεία της λίστας από την ουρά της προς την κεφαλή της.

Ο αλγόριθµος του ζωγράφου είναι αρκετά γρήγορος δεν καλύπτει όµως περιπτώσεις αµοιβαίας επικάλυψης δύο αντικειµένων (βλ. Εικ. 7.2).

Εικόνα 7.2: Μια σκηνή που δεν θα αποδωθεί σωστά από τον Αλγόριθµο του

Ζωγράφου.

7.1.2.2 z-Buffer

Ο συγκεκριµένος αλγόριθµος που αναπτύχθηκε το 1975 αποτελεί τη δηµοφιλέστερη µέθοδο υπολογισµού των ορατών εδρών ενός αντικειµένου στις µέρες µας. Ο αλγόριθµος είναι εξαιρετικά απλός, η εφαρµογή του όµως είναι αρκετά δαπανηρή σε σχέση µε τη µνήµη και το χρόνο που απαιτείται. Η εκτέλεση του αλγορίθµου βασίζεται στη δηµιουργία ενός πίνακα Buffer µε τόσες στήλες και γραµµές όσες και η µέγιστη διάσταση των αξόνων x και y αντίστοιχα στο σύστηµα συντεταγµένων οθόνης. Κάθε στοιχείο του πίνακα αρχικοποιείται µε µια τιµή που είναι ίση ή µεγαλύτερη από την απόσταση του αντικειµένου της σκηνής που βρίσκεται µακρύτερα από το τρέχον σηµείο κατόπτευσης στο σύστηµα οπτικών συντεταγµένων.

Στη συνέχεια για κάθε έδρα που περιέχεται στη σκηνή µας ο αλγόριθµος υπολογίζει τις συντεταγµένες όλων των σηµείων που περιέχονται στην έδρα αυτή στο σύστηµα οπτικών συντεταγµένων και στη συνέχεια για καθένα από τα σηµεία αυτά τις συντεταγµένες της προβολής τους στο σύστηµα συντεταγµένων οθόνης. Σε ψευδοκώδικα ο αλγόριθµος περιγράφεται από την παρακάτω ακολουθία βηµάτων:

12/11/2003 52

Page 53: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

• Για κάθε έδρα Ε στη σκηνή

• Για κάθε σηµείο Ρ που ανήκει στην έδρα και έχει συντεταγµένες (ρxe, ρye, ρze) ως προς το οπτικό σύστηµα συντεταγµένων:

Υπολόγισε την προβολή του Ρ' (ρx, ρy) στο σύστηµα συντεταγµένων οθόνης. Αν η απόσταση του Ρ από το σηµείο κατόπτευσης (δηλ. η συντεταγµένη ρze) είναι µικρότερη της τιµής που είναι αποθηκευµένη στο στοιχείο Buffer[ρx, ρy] τότε το χρώµα του σηµείου Ρ' γίνεται ίσο µε το χρώµα της έδρας Ε και η τιµή Buffer[ρx, ρy] γίνεται ίση µε την απόσταση του Ρ από το σηµείο κατόπτευσης (δηλ. τη συντεταγµένη ρze).

Αν θεωρήσουµε ότι το τρίγωνο ΑΒΓ στην Εικόνα 7.3 αποτελεί την προβολή στο σύστηµα συντεταγµένων οθόνης µίας από τις έδρες που ανήκουν στη σκηνή µας (έστω της έδρας µε κορυφές Α'Β'Γ' στο οπτικό σύστηµα συντεταγµένων) , τότε ο αλγόριθµος z-Buffer επισκέπτεται όλα τα σηµεία που περιέχονται στο τρίγωνο ΑΒΓ εξετάζοντας όλα τα ευθύγραµµα τµήµατα που είναι παράλληλα στον άξονα των x και καταλήγουν σε οποιεσδήποτε δύο από τις πλευρές του τριγώνου (π.χ. το ευθύγραµµο τµήµα ∆Ε στην Εικ. 7.3). Τα ευθύγραµµα αυτά τµήµατα θα τα ονοµάσουµε ευθείες σάρωσης (scan lines) για τη συγκεκριµένη έδρα. Αν ymin και ymax αντιστοιχούν στη µέγιστη και ελάχιστη συντεταγµένη των κορυφών του τριγώνου ΑΒΓ στο σύστηµα συντεταγµένων οθόνης, τότε για καθένα από τα ακέραια y που βρίσκονται µεταξύ των δύο αυτών ορίων ο αλγόριθµος υπολογίζει τις συντεταγµένες των τοµών της ευθείας σάρωσης µε οποιαδήποτε δύο από τα τµήµατα ΑΒ, ΒΓ και ΓΑ. Εστω ότι ο αλγόριθµος έχει υπολογίσει τις συντεταγµένες των σηµείων ∆ και Ε της ευθείας σάρωσης ∆Ε στο σύστηµα συντεταγµένων οθόνης. Υποθέτοντας ότι χρησιµοποιούµε το οπτικό σύστηµα συντεταγµένων της ενότητας 6.2.1 θα πρέπει στη συνέχεια να υπολογίσουµε την συντεταγµένη z ως προς το οπτικό σύστηµα συντεταγµένων του σηµείου Ρ' της έδρας Α'Β'Γ' το οποίο προβάλλεται στο σηµείο Ρ του ευθυγράµµου τµήµατος ∆Ε και αυτό για κάθε ακέραιο Ρ που ανήκει στο ∆Ε. Σηµειώνουµε εδώ ότι µε βάση το σύστηµα συντεταγµένων της 6.2.1 η απόλυτη τιµή της συντεταγµένης z θα ισοδυναµεί µε την απόσταση του σηµείου Ρ' από το σηµείο κατόπτευσης Κ (όπου το Κ συµπίπτει µε το κέντρο του οπτικού συστήµατος συντεταγµένων).

12/11/2003 53

Page 54: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Εικόνα 7.3: Τρίγωνο ΑΒΓ και γραµµή σάρωσης ∆Ε στο σύστηµα συντεταγµένων

οθόνης.

Η συντεταγµένη z που αντιστοιχεί σε ένα οποιοδήποτε σηµείο Ρ του ευθυγράµου τµήµατος ∆Ε αποδεικνύεται ότι µπορεί να εκφραστεί συναρτήσει της µέσης τιµής zavg των συντεταγµένων z που αντιστοιχούν στις τρείς κορυφές του τριγώνου Α’Β’Γ’ ως εξής.

• Το zavg υπολογίζεται ως zavg = (1/zA’+ 1/zB’+ 1/zΓ’)/3. • Επειδή τα σηµεία Α', Β', Γ' είναι συνεπίπεδα. το επίπεδο στο οποίο

περιέχονται θα µπορεί να περιγραφεί από µία εξίσωση της µορφής:

αx+βy+czi = k (1) όπου zi = 1/z. Αν επιλύσουµε την (1) ως προς z και σχηµατίσουµε τις µερικές παραγώγους της συνάρτησης που προκύπτει ως προς x και y θα πάρουµε τους ακόλουθους τύπους:

θzi/θx = -α/c, θzi/θy = -b/c ενώ οι συντεταγµένες α, β και c στην (1) µπορούν να υπολογιστούν από το εξωτερικό γινόµενο των διανυσµάτων Α’Β’ και Α’Γ’ (χρησιµοποιώντας την αντίστροφη συντεταγµένη ως προς z των συγκεκριµένων διανυσµάτων). Αν (x, y) είναι οι συντεταγµένες του σηµείου Ρ που µας ενδιαφέρει ως προς το σύστηµα συντεταγµένων οθόνης, τότε ο υπολογισµός του z που αντιστοιχεί στο σηµείο Ρ θα µας δίνεται από τον τύπο:

z = zavg + (y- yavg )θz/θy + (x- xavg)θz/θx όπου:

yavg = (yA’+ yB’+ yΓ’)/3, xavg = (xA’+ xB’+ xΓ’)/3

12/11/2003 54

Page 55: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

όπου xA’, xB’, xΓ’, yA’, yB’, yΓ’ είναι οι συντεταγµένες ως προς το οπτικό σύστηµα συντεταγµένων οθόνης των κορυφών Α’, Β’ και Γ’ αντίστοιχα.

12/11/2003 55

Page 56: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

8. Υπολογισµός της σκίασης εικονιδίων

Ο πρώτος αποτελεσµατικός αλγόριθµος σκίασης παρουσιάστηκε το 1971 από τον H. Gouraud και το αποτέλεσµα της εφαρµογής του είναι γνωστό σαν σκίαση κατά Gouraud. Ο Phong Bui-Tuong to 1975 βελτίωσε τον αλγόριθµο αυτό και η σκίαση κατά Phong αποτελεί µέχρι τις µέρες µας την δηµοφιλέστερη µέθοδο σκίασης µιας και παράγει ένα ικανοποιητικό αποτέλεσµα έχοντας λογικές απαιτήσεις σε χώρο και χρόνο.

Ο υπολογισµός της σκίασης ενός εικονιδίου υποδιαιρείται σε δύο µικρότερα προβλήµατα:

• Το πρόβληµα του υπολογισµού της έντασης του φωτός που ανακλάται σε ένα οποιοδήποτε σηµείο στην επιφάνεια ενός πολυγώνου. Το πρόβληµα αυτό είναι γνωστό σαν το πρόβληµα της εύρεσης του τοπικού µοντέλου ανάκλασης του φωτός (local reflection model).

• Στον υπολογισµό της έντασης του φωτός στα εικονίδια που περιέχονται στην προβολή του πολυγώνου αυτού στο σύστηµα συντεταγµένων οθόνης.

Για παράδειγµα η σκίαση κατά Gouraud εφαρµόζει ένα τοπικό µοντέλο ανάκλασης του φωτός σε κάθε µία από τις κορυφές του πολυγώνου και υπολογίζει την ένταση του φωτός σε κάθε ένα από τα σηµεία στα οποία προβάλλεται το πολύγωνο στο σύστηµα συντεταγµένων οθόνης µε τύπους παρεµβολής µεταξύ των σηµείων αυτών. Μια τέτοια µέθοδος υπολογισµού είναι προσεγγιστική καθώς ο υπολογισµός της έντασης του φωτός σε κάθε σηµείο γίνεται είτε στο κοσµικό είτε στο οπτικό σύστηµα συντεταγµένων. ∆εδοµένου ότι ο µετασχηµατισµός τηςπροοπτικής (δηλ. το πέρασµα από το οπτικό σύστηµα συντεταγµένων στο σύστηµα οθόνης) δεν είναι οµοπαραλληλικός ο υπολογισµός της έντασης του φωτός µε παρεµβολή µεταξύ των σηµείων που αποτελούν την προβολή του πολυγώνου στο σύστηµα της οθόνης δεν είναι µαθηµατικά σωστός. Παρόλα αυτά ο αλγόριθµος παράγει ικανοποιητικά αποτελέσµατα και γι' αυτό χρησιµοποιείται αρκετά συχνά.

8.1 Τοπικά µοντέλα ανάκλασης

Υπάρχουν πολλά µοντέλα υπολογισµού του φωτός που ανακλάται από οποιοδήποτε σηµείο µίας επιφάνειας. Το πιο σύνηθες από αυτά (το µοντέλο του Phong) υπολογίζει την ένταση του ανακλώµενου φωτός συναρτήσει του προσανατολισµού της επιφάνειας στο σηµείο που µας ενδιαφέρει. της θέσης µίας σηµειακής πηγής φωτός που φωτίζει το υπ' όψη σηµείο και των ανακλαστικών ιδιοτήτων της επιφανείας που περιέχει το σηµείο. Ενα τέτοιο µοντέλο είναι τοπικό καθώς υπολογίζει µόνο το ανακλώµενο φώς από ένα σηµείο που προέρχεται από τον άµεσο φωτισµό του σηµείου που µας ενδιαφέρει από µια φωτεινή πηγή. Το µοντέλο δεν υπολογίζει την αλληλεπίδραση του σηµείου που µας ενδιαφέρει µε άλλα αντικείµενα στη σκηνή µας. Για παράδειγµα τέτοιες αλληλεπιδράσεις µπορεί να δηµιουργήσουν σκιές ή αλληλοανακλώµενες εκποµπές φωτός κλπ. Το µοντέλο προσοµοιώνει τρία είδη ανάκλασης του φωτός:

• Ιδανική κατοπτρική ανάκλαση (perfect specular reflection)

12/11/2003 56

Page 57: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

• Μη ιδανική κατοπτρική ανάκλαση (imperfect specular reflection) • Ιδανική διάχυση (perfect diffuse reflection)

Η Εικόνα 8.1 περιγράφει καθεµία από τις τρείς αυτές περιπτώσεις.

Εικόνα 8.1: Μοντέλα ανάκλασης.

Ιδανική κατοπτρική ανάκλαση έχουµε όταν το προσπίπτων φως ανακλάται στην κατοπτρική του διεύθυνση χωρίς καµµία παρέκκλιση (τέλεια ανάκλαση) (βλ. Εικ. 8.1(α)). Μη ιδανική κατοπτρική ανάκλαση έχουµε όταν το φως ανακλάται µε µικρές παρεκκλίσεις στην κατοπτρική του διεύθυνση (βλ. Εικ. 8.1(β)). Τέλος ιδανική διάχυση έχουµε όταν το προσπίπτων φώς ανακλάται µε τον ίδιο βαθµό προς όλες τις διευθύνσεις (βλ. Εικ. 8.1(γ)). Μια επιφάνεια που µπορεί να διαχέει το φως µε αυτόν τον τρόπο χαρακτηρίζεται σαν µατ (matte).

Το µοντέλο του Phong θεωρεί ότι το ανακλώµενο φως από µία επιφάνεια αποτελείται από το γραµµικό συδυασµό τριών συννιστωσών:

ανακλώµενο φώς = περιβάλλων φως + διάχυση + κατοπτρική ανάκλαση (1)

Ο όρος περιβάλλων φως αποτελεί µια σταθερά που προσοµοιώνει τον καθολικό ή τον έµµεσο φωτισµό που υπάρχει σε ένα χώρο. Χωρίς αυτόν τον όρο και δεδοµένου ότι το µοντέλο δεν υπολογίζει την αλληλεπίδραση των αντικειµένων της σκηνής στη διαµόρφωση του συνολικού φωτισµού, σηµεία τα οποία σε µια σκηνή θα φωτιζόντουσαν έµµεσα σε µια σκηνή και θα ήταν ορατά από τον παρατηρητή θα παρέµεναν σκοτεινά. Αν Iα, Id και Is περιγράφουν αντίστοιχα την ένταση του φωτός που οφείλεται στο περιβάλλων φως, στη διάχυση και στην κατοπτρική ανάκλαση αντίστοιχα, τότε η (1) µπορεί να γραφτεί ως:

12/11/2003 57

Page 58: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

I = kaIa + kdId + ksIs (2) όπου ka+ kd + ks = 1

Η συνιστώσα Id υπολογίζεται µε τον τύπο:

Id = Ii cos(θ) = Ii (L . N) (3)

όπου Ii περιγράφει την ένταση του προσπίπτωντος φωτός και θ είναι η γωνία που σχηµατίζει η κάθετη διεύθυνση της επιφάνειας στο σηµείο που µας ενδιαφέρει (διάνυσµα N) µε τη διεύθυνση της φωτεινής πηγής (διάνυσµα Ν) (βλ. Εικ. 8.2).

Εικόνα 8.2: Υπολογισµός έντασης φωτός.

Η συνιστώσα Is υπολογίζεται µε τον τύπο:

Is = Ii cosn(Ω) = Ii (R . V)n (4)

όπου Ii περιγράφει την ένταση του προσπίπτωντος φωτός και Ω είναι η γωνία που σχηµατίζει η διεύθυνση µε την οποία παρατηρούµε/κατοπτεύουµε το αντικείµενο (διάνυσµα V) µε τη διεύθυνση της ανακλώµενης ακτίνας φωτός (διάνυσµα R) (βλ. Εικ. 8.2). Το n είναι µια σταθερά που εκφράζει το βαθµό µε τον οποίο η συµπεριφορά της επιφάνειας στο σηµείο που µας ενδιαφέρει προσεγγίζει τη συµπεριφορά ενός τέλειου κατόπτρου στο ίδιο σηµείο. Οσο το n τείνει στο άπειρο τόσο η συµπεριφορά της επιφάνειας στο συγκεκριµένο σηµείο προσοµοιάζει τη συµπεριφορά ενός τέλειου κατόπτρου.

Με βάση τις σχέσεις (2), (3) και (4) η ένταση του φωτός που εκπέµπεται από το σηµείο που µας ενδιαφέρει θα µας δίνεται από τον τύπο:

I = kaIa + kdIi (L . N) + ksIi (R . V)n (5)

12/11/2003 58

Page 59: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Εικόνα 8.3: Ενταση του φωτός συναρτήσει της διεύθυνσης κατόπτευσης.

Η Εικόνα 8.3 περιγράφει τη συµπεριφορά της εξίσωσης (5) συναρτήσει της διεύθυνσης κατόπτευσης. Το ηµικύκλιο στην εικόνα περιγράφει το άρθροισµα των συνιστωσών του φωτός που προέρχονται από το περιβάλλοντα φωτισµό και τη διάχυση. Το άρθροισµα αυτό είναι σταθερό για όλες τις διευθύνσεις κατόπτευσης. Το "καρούµπαλο¨στην Εικόνα 8.3. περιγράφει την επίδραση της συνιστώσας που προέρχεται από την κατοπτρική ανάκλαση του φωτός. Οσο το n αυξάνει τόσο το "καρούµπαλο" στενεύει.

Το υπολογιστικό κόστος της εφαρµογής της εξίσωσης (5) σε κάθε σηµείο ενός πολυγώνου µπορεί να ελαττωθεί µε µια σειρά από γεωµετρικές απλουστεύσεις που έχουν αµελητέα επίπτωση στο τελικό αποτέλεσµα. Μια τέτοια απλούστευση είναι να θεωρήσουµε ότι η θέση της πηγής φωτός βρίσκεται στο άπειρο. Στην περίπτωση αυτή το διάνυσµα L θα είναι σταθερό για όλα τα σηµεία που ανήκουν στη σκηνή µας. Μια δεύτερη απλούστευση είναι να θεωρήσουµε ότι η θέση κατόπτευσης βρίσκεται και αυτή στο άπειρο. Σαν αποτέλεσµα το διάνυσµα V θα παραµείνει και αυτό σταθερό για όλα τα σηµεία της σκηνής µας. Επίσης επειδή ο υπολογισµός του διανύσµατος R είναι σχετικά πολύπλοκος µπορούµε να αντικαταστήσουµε το διάνυσµα αυτό µε ένα διάνυσµα H που θα συµπίπτει µε τη διχοτόµο της γωνίας µεταξύ του V και του L. Προφανώς:

Η = (L+V)/2

Με βάση τις απλοποιήσεις που κάναµε η ένταση του φωτός στο σηµείο που µας ενδιαφέρει θα είναι ίση µε:

I = kaIa + kdIi (L . N) + ksIi (N .H)n (6)

δεδοµένου ότι το εσωτερικό γινόµενο Ν. Η µεταβάλλεται µε τον ίδιο τρόπο που µεταβάλλεται το R . V.

Μια περισσότερο πολύπλοκη µορφή της µεθόδου προκύπτει αν θεωρήσουµε ότι η σκηνή µας φωτίζεται από µία κατευθυνόµενη πηγή φωτός. Ο τρόπος µε τον οποίο µπορούµε να προσοµοιώσουµε µία τέτοια πηγή είναι αν θεωρήσουµε ότι η ένταση του φωτός που εκπέµπεται από αυτή περιγράφεται από την εξίσωση:

12/11/2003 59

Page 60: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Ii = Iφ cosm(φ) = Iφ (-L . Lφ)n (7)

όπου Lφ η διεύθυνση της φωτεινής πηγής και m µία σταθερά (βλ. Εικ. 8.4). Προφανώς στην περίπτωση αυτή το διάνυσµα L δεν θα είναι σταθερό για όλα τα σηµεία της σκηνής µας.

Εικόνα 8.4: Μοντέλο κατευθυνόµενης πηγής φωτός.

8.2 Σκίαση κατά Gouraud

Στη µέθοδο αυτή υπολογίζουµε την ένταση του φωτός σε καθεµία από τις κορυφές των πολυγώνων που απαρτίζουν ένα αντικείµενο χρησιµοποιώντας το µοντέλο τοπικής ανάκλασης της ενότητας 8.2 και στη συνέχεια υπολογίζουµε την ένταση του φωτός στα υπόλοιπα σηµεία ενός πολυγώνου χρησιµοποιώντας τη µέθοδο της παρεµβολής µεταξυ των τιµών των εντάσεων στις κορυφές του πολυγώνου. Για τον υπολογισµό της έντασης του φωτός σε κάθε κορυφή θα πρέπει να υπολογίσουµε το διάνυσµα Ν στην κάθετη διεύθυνση σε κάθε κορυφή. Το διάνυσµα αυτό προκύπτει σαν το άρθροισµα των κάθετων διανυσµάτων όλων των πολυγώνων στα οποία µετέχει η κορυφή που µας ενδιαφέρει (βλ. Εικ. 8.5).

8.3 Σκίαση κατά Phong

Στη µέθοδο αυτή υπολογίζουµε το διάνυσµα Ν της κάθετης διεύθυνση σε κάθε κορυφή των πολυγώνων που απαρτίζουν τη σκηνή µας. Το διάνυσµα αυτό προκύπτει σαν το άρθροισµα των κάθετων διανυσµάτων όλων των πολυγώνων στα οποία µετέχει η κορυφή που µας ενδιαφέρει όπως και στη σκίαση κατά Gouraud. Με βάση τα διανύσµατα Ν των κορυφών του πολυγώνου υπολογίζουµε µε παρεµβολή το κάθετο διάνυσµα Νρ σε κάθε σηµείο Ρ που ανήκει στο πολύγωνο και στη συνέχεια υπολογίζουµε την ένταση του φωτός στο σηµείο που µας ενδιαφέρει µε βάση το Νρ (βλ. Εικ. 8.6).

Σε σύγκριση µε τη σκίαση κατά Gouraud, η σκίαση κατά Phong αποδίδει µε µεγαλύτερη πιστότητα την κλίση που έχει η επιφάνεια ενός αντικειµένου και εποµένως µπορεί να αποδώσει µε µεγαλύτερη ακρίβεια τοπικά φαινόµενα όπως οι ανταύγειες. Οµως η µέθοδος αυτή έχει µεγαλύτερη υπολογιστική πολυπλοκότητα από τη σκίαση κατά Gouraud.

12/11/2003 60

Page 61: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Εικόνα 8.5: Μέθοδοι Σκίασης κατά Gouraud (α) και Phong (β).

9. Θεωρία Χρωµάτων

Το φως είναι µια µορφή ηλεκτροµαγνητικής ακτινοβολίας η οποία εκτείνεται σε ένα περιορισµένο εύρος συχνοτήτων και µηκών κύµατος. Οι ακτινοβολίες που γίνονται ορατές από το ανθρώπινο µάτι έχουν µήκος κύµατος που κυµαίνεται µεταξύ 400 και 700 nm. Οταν ακτινοβολίες µε µήκος κύµατος µεταξύ αυτών των ορίων προσπίπτουν στο ανθρώπινο µάτι προκαλούν χρωµατικές αισθήσεις ανάλογες µε το µίγµα συχνοτήτων που περιέχουν. Πιο συγκεκριµένα το ανθρώπινο µάτι περιέχει δύο κατηγορίες κυττάρων: τους κώνους (cones) και τις ράβδους (rods). Το πλήθος των κώνων στο ανθρώπινο µάτι είναι περίπου 6-7 εκατοµµύρια και είναι συγκεντρώµενα στο κέντρο του αµφιβληστροειδή χιτώνα. Καθένας από τους κώνους αυτούς αντιδρά σε ένα περιορισµένο εύρος συχνοτήτων επιτρέποντας στο µάτι να διακρίνει µικρές χρωµατικές λεπτοµέρειες . Οι ράβδοι αντίθετα είναι πολυ περισσότεροι (75-100 εκατοµµύρια) και είναι διασκορπισµένοι στην περιφέρεια του αµφιβληστροειδούς χιτώνα. Τα κύταρρα αυτά είναι ιδιαίτερα ευαίσθητα σε µικρά επίπεδα έντασης του φωτός επιτρέποντας στην περιφερειακή ανθρώπινη όραση να εντοπίζει κίνηση ή µορφές σε αρκετά χαµηλό φωτισµό, διευκολύνοντας έτσι την προστασία του ανθρώπινου είδους από πιθανούς εχθρούς.

Το φως που εκπέµπεται από διάφορες φωτεινές πηγές περιέχει ένα µίγµα από µήκη κύµατος τα οποία περιγράφονται µε την απεικόνιση της φασµατικής πυκνότητας τους (spectral density S(λ)) σε κατάλληλα διαγράµµατα. Τα διαγράµµατα αυτά απεικονίζουν την ισχύ που έχει κάθε µήκος κύµατος στο εκπεµπόµενο φως. Για παράδειγµα η Εικόνα 8.1 περιγράφει τη φασµατική πυκνότητα µιάς πρασινωπής πηγής φωτός.

12/11/2003 61

Page 62: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

Εικόνα 9.1: Παράδειγµα φασµατικής πυκνότητας φωτός.

Η φασµτική πυκνότητα του συγκεκριµένου παραδείγµατος παρατηρούµε ότι εµφανίζει ένα µέγιστο για µήκη κύµατος περίπου 550 nm. Το µέγιστο αυτό ονοµάζεται δεσπόζων µήκος κύµατος (dominant wavelength). Το µήκος κύµατος στο οποίο παρουσιάζεται το µέγιστο καθορίζει και τη χροιά (hue) του χρώµατος που εκπέµπεται από µια πηγή. Για παράδειγµα η συγκεκριµένη πηγή θα έχει πράσινο χρώµα. Επιρπόσθετα στο συγκεκριµένε παράδειγµα εµφανίζεται και µια ποσότητα λευκού φωτός η οποία µειώνει τον κορεσµό του πράσινου και το ξανοίγει.

Η συνολική ισχύς του εκπεµποµένου φωτός µας δίνεται από το εµβαδό της καµπύλης της φασµατικής πυκνότητας του. Η ισχύς αυτή ονοµάζεται φωτεινότητα (luminance) και για το συγκεκριµένο παράδειγµα δίνεται από τον τύπο:

L = (B-A)D+AW, όπου W = 700-400.

Ο κορεσµός (saturation) του φωτός µετρά το ποσοστό της φωτεινότητας που περιέχεται στο κύριο µήκος κύµατος. Στην περίπτωση µας υπολογίζεται από τον τύπο:

100% * (B-A)D/L

Η θεωρία χρωµάτων καθορίζει ότι η αίσθηση οποιουδήποτε χρώµατος µπορεί να αναπαραχθεί µε την ανάµιξη σε κατάλληλες αναλογίες τριων πρωταρχικών (primary) πηγών φωτός, πηγών δηλαδή που η φασµατική τους πυκνότητα λαµβάνει µη µηδενική τιµή για ένα µόνο µήκος κύµατος.. Κατά σύµβαση η τριάδα των χρωµάτων που χρησιµοποιείται για το σκοπό αυτό αποτελείται από το κόκκινο (R) (λ = 700 nm) το πράσινο (G) (λ=546,1 nm) και το µπλε (B) (λ=435.8 nm) αφού σε αυτά τα χρώµατα είναι περισσότεροι ευαίσθητοι οι κώνοι που περιέχονται στο µάτι µας. Με

12/11/2003 62

Page 63: Σημειωσεις Γραφικα Υπολογιστων

Ν. Σγούρος – Γραφικά Υπολογιστικών Συστηµάτων

12/11/2003 63

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

C = αR+βG+γB

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

∆ύο χρώµατα τα οποία όταν προστίθενται σε ίσες ποσότητες προκύπτει το άσπρο χρώµα (δηλ. το χρώµα µε τον ελάχιστο κορεσµό) ονοµάζονται συµπληρωµατικά (complementary). Παραδείγµατα τέτοιων ζευγών χρωµάτων είναι το µπλε-κίτρινο, κόκκινο-κυανό, πράσινο-µωβ κλπ.

9.1 Χρωµατικοί Χώροι

9.1.1 RGB

Τα χρώµατα που περιγράφονται στο χώρο RGB περιγράφονται από κυρτούς συνδυασµούς τριών πρωταρχικών χρωµάτων (κόκκινο, πράσινο και µπλε) όπου οι συντελεστές που χρησιµοποιούνται στο συνδυασµό είναι µεγαλύτεροι ή ίσοι του µηδενός.

9.1.2 CMY

(r, g, b)RGB = (1, 1, 1) - (c, m, y)CMY