ΘΕΜΑ: Υλοποίηση Αλγορίθμων Γραφικής σε Περιβάλλον Οπτικού Προγραμματισμού



Σχετικά έγγραφα
Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών

Κεφάλαιο Πέμπτο Εθνοπολιτισμική Ζωή και Εμπειρίες Ελληνικότητας των Ελληνοαυστραλών Εφήβων

Πρακτικό 6/2012 της συνεδρίασης της Επιτροπής Ποιότητας Ζωής, του Δήμου Λήμνου, της 4ης Μαΐου 2012.

5 η Ενότητα Κουλτούρα και στρατηγική

Ι ΑΚΤΙΚΗ ΠΑΡΕΜΒΑΣΗ ΣΤΗΝ ΠΑΡΑΓΩΓΗ ΓΡΑΠΤΟΥ ΛΟΓΟΥ ΣΕ ΤΜΗΜΑ ΕΝΤΑΞΗΣ ΕΥΤΕΡΟΒΑΘΜΙΑΣ ΕΚΠΑΙ ΕΥΣΗΣ

Κωδ : Οι κωδικοί αυτοί συμπληρώνονται από την φορολογική διοίκηση. Κωδ. 003: Γράψτε τη Δ.Ο.Υ. της έδρας ή του κεντρικού της επιχείρησής σας.

ΑΠΑΝΤΗΣΕΙΣ ΔΙΑΓΩΝΙΣΜΑΤΟΣ ΔΙΔΑΓΜΕΝΟ ΚΕΙΜΕΝΟ

«ΑΝΩ ΛΙΟΣΙΑ: ΤΟΠΙΚΗ ΙΣΤΟΡΙΑ, ΠΕΡΙΒΑΛΛΟΝ, ΠΡΟΚΛΗΣΕΙΣ, ΠΡΟΟΠΤΙΚΕΣ»


ΤΙΜΟΛΟΓΙΟ ΜΕΛΕΤΗΣ ΓΕΝΙΚΟΙ ΟΡΟΙ

ΣΤΗΝ ΤΡΟΙΖΗΝΙΑ ΑΠΟ ΑΓ.ΕΛΕΝΗ ΕΩΣ ΤΟΝ ΚΟΜΒΟ ΚΑΛΛΟΝΗΣ ΚΑΙ ΣΤΗΝ ΠΑΡΑΛΙΑ ΤΟΥ ΑΡΤΙΜΟΥ. ΤΙΜΟΛΟΓΙΟ ΜΕΛΕΤΗΣ Τιμαριθμική 2012Α

Αξιολόγηση Προγράμματος Αλφαβητισμού στο Γυμνάσιο Τρίτο Έτος Αξιολόγησης

ΔΙΗΜΕΡΙΔΑ ΤΕΕ ΤΜΗΜΑ ΚΕΡΚΥΡΑΣ

ΣΩΜΑ ΠΡΟΣΚΟΠΩΝ ΚΥΠΡΟΥ

ΑΠΑΝΤΗΣΕΙΣ ΣΤΟ ΙΑΓΩΝΙΣΜΑ ΝΕΟΕΛΛΗΝΙΚΗΣ ΛΟΓΟΤΕΧΝΙΑΣ ΘΕΩΡΗΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ Γ ΛΥΚΕΙΟΥ

Η υποστήριξη της επαγγελματικής μάθησης μέσα από την έρευνα-δράση: διαδικασίες και αποτελέσματα

ΦΙΛΟΣΟΦΙΚΗ ΣΧΟΛΗ. sep4u.gr

ΠΕΡΙΕΧΟΜΕΝΑ ΕΙΣΑΓΩΓΙΚΟ ΣΗΜΕΙΩΜΑ 13 Α' ΜΕΡΟΣ ΑΠΟ ΤΟΝ ΠΟΛΕΜΟ ΤΟΥ 1897 ΣΤΟ ΓΟΥΔΙ

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΑΛΑΜΑΤΑΣ (Τ.Ε.Ι.Κ.) ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΑΣ ΓΕΩΠΟΝΙΑΣ (ΣΤΕΓ) ΤΜΗΜΑ ΦΥΤΙΚΗΣ ΠΑΡΑΓΩΓΗΣ (Φ.Π.) ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΜΕ ΘΕΜΑ:

Η Αγορά Ηλεκτρικής Ενέργειας στην Κύπρο έχει οργανωθεί σε τομείς που υπόκεινται στις ακόλουθες ρυθμίσεις:

Δράση 1.2. Υλοτομία και προσδιορισμός ποσοτήτων υπολειμμάτων.

ΧΡΗΜΑΤΟΔΟΤΗΣΗ 1 : ΤΙΜΟΛΟΓΙΟ ΜΕΛΕΤΗΣ

Σύμφωνα με ανακοίνωση του αρμόδιου φορέα Ε.Ο.Π.Π.Ε.Π. στην ιστοσελίδα του: ΑΝΑΓΓΕΛΙΑ ΔΙΔΑΣΚΑΛΙΑΣ

ΑΠΑΝΤΗΣΕΙΣ ΣΤΟ ΔΙΔΑΓΜΕΝΟ ΚΕΙΜΕΝΟ

ΤΟΜΟΣ Α ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΙΚΑΙΟ

ΠΑΙΔΑΓΩΓΙΚΗ ΣΧΟΛΗ (ΦΛΩΡΙΝΑ) ΤΜΗΜΑ ΝΗΠΙΑΓΩΓΩΝ ΕΡΓΑΣΤΗΡΙΟ ΔΙΔΑΚΤΙΚΗΣ ΦΥΣΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΚΑΙ ΠΑΡΑΓΩΓΗΣ ΔΙΔΑΚΤΙΚΟΥ ΥΛΙΚΟΥ

2. Τις διατάξεις της παρ. 2 του άρθρου 155 του Ν. 3463/2006 (ΦΕΚ Α' 114).

ΚΩΔΙΚΑΣ ΕΠΑΓΓΕΛΜΑΤΙΚΗΣ ΔΕΟΝΤΟΛΟΓΙΑΣ ΕΠΙΣΚΕΠΤΩΝ ΥΓΕΙΑΣ

1. ΕΡΩΤΗΣΗ: Οι ρυθμίσεις του νόμου για το Ασφαλιστικό θα είναι μόνιμες; Οι περικοπές του σταθερές; ΑΠΑΝΤΗΣΗ:

ΧΡΗΜΑΤΟΟΙΚΟΝΟΜΙΚΗ ΛΟΓΙΣΤΙΚΗ

ΥΠΟΔΕΙΓΜΑ ΣΥΜΠΛΗΡΩΣΗΣ

ΤΟ ΝΕΟ ΑΣΦΑΛΙΣΤΙΚΟ ΤΟΠΙΟ

ΠΟΛΙΤΙΚΉ ΠΑΙΔΕΙΑ. Α Γενικού Λυκείου και ΕΠΑ.Λ. Καζάκου Γεωργία, ΠΕ09 Οικονομολόγος

Απομόνωση χλωροφύλλης

ΑΠΟΣΠΑΣΜΑ. Από το πρακτικό της αριθμ ης Συνεδρίασης του Δημοτικού Συμβουλίου Λεβαδέων. Αριθμός απόφασης : 294. Περίληψη

«Φιλολογικό» Φροντιστήριο Επαναληπτικό διαγώνισμα στη Νεοελληνική Γλώσσα. Ενδεικτικές απαντήσεις. Περιθωριοποίηση μαθητών από μαθητές!

ΙΝΣΤΙΤΟΥΤΟ ΠΑΙΔΑΓΩΓΙΚΩΝ ΕΡΕΥΝΩΝ ΜΕΛΕΤΩΝ ΔΙΔΑΣΚΑΛΙΚΗΣ ΟΜΟΣΠΟΝΔΙΑΣ ΕΛΛΑΔΑΣ

ΤΙΜΟΛΟΓΙΟ ΠΡΟΣΦΟΡΑΣ ΕΡΓΑΣΙΩΝ ΑΠΟΤΙΜΩΜΕΝΩΝ ΜΕ ΚΑΤ ΑΠΟΚΟΠΗ ΤΙΜΗΜΑΤΑ

ΣΥΝΕΝΤΕΥΞΗ ΤΥΠΟΥ. Η ολοκληρωμένη προσέγγιση θα εφαρμοστεί με τα παρακάτω Εργαλεία

Π Ρ Ο Κ Η Ρ Υ Ξ Η ΓΙΑ ΤΗΝ ΠΡΟΣΛΗΨΗ ΔΙΔΑΚΤΙΚΟΥ ΠΡΟΣΩΠΙΚΟΥ ΜΕ ΩΡΙΑΙΑ ΑΠΟΖΗΜΙΩΣΗ. 2. Προσόντα Υποψηφίων - Θέσεις προς Κάλυψη

ΘΕΜΑ: Διευκρινίσεις και οδηγίες για την επιστροφή ΦΠΑ σύμφωνα με την ΑΥΟ ΠΟΛ.1003/

ΑΣΤΡΟΝΟΜΙΑ ΣΤΗΝ ΑΡΧΑΙΑ ΕΛΛΑΔΑ

Εσωτερικοί Κανονισμοί Τοπικής Αυτοδιοίκησης

ΤΙΜΟΛΟΓΙΟ ΜΕΛΕΤΗΣ ΕΛΛΗΝΙΚΗ ΗΜΟΚΡΑΤΙΑ ΥΠΟΥΡΓΕΙΟ ΠΑΙ ΕΙΑΣ ΚΑΙ ΘΡΗΣΚΕΥΜΑΤΩΝ «ΥΓΡΟΜΟΝΩΣΕΙΣ ΕΡΓΟ:

Ενότητα 2. Γενικά Οργάνωση Ελέγχου (ΙΙ) Φύλλα Εργασίας Εκθέσεις Ελέγχων

Του Σταύρου Ν. PhD Ψυχολόγου Αθλητικού Ψυχολόγου

ΑΠΑΝΤΗΣΕΙΣ ΣΤΟ ΜΑΘΗΜΑ ΤΗΣ ΝΕΟΕΛΛΗΝΙΚΗΣ ΛΟΓΟΤΕΧΝΙΑΣ

ΤΕΙ ΚΑΛΑΜΑΤΑΣ. ΑΡΓΥΡΗ ΔΗΜΗΤΡΑ Σχολής Διοίκησης και Οικονομίας Τμήμα Χρηματοοικονομικής και Ελεγκτικής Επιστήμης Εισηγητής :Λυγγίτσος Αλέξανδρος

ΑΠΟΦΑΣΗ Ο ΥΠΟΥΡΓΟΣ ΟΙΚΟΝΟΜΙΚΩΝ

6o ΕΝΗΜΕΡΩΤΙΚΟ. των αιρετών του ΚΥΣΔΕ Γρηγόρη Καλομοίρη και Χρήστου Φιρτινίδη, εκπροσώπων των Συνεργαζόμενων Εκπαιδευτικών Κινήσεων

Ελλάδα: Μνημόνιο Συνεννόησης στις. ΣΥΓΚΕΚΡΙΜΕΝΕΣ ΠΡΟΫΠΟΘΕΣΕΙΣ ΟΙΚΟΝΟΜΙΚΗΣ ΠΟΛΙΤΙΚΗΣ 3 Μαΐου 2010

ΤΙΤΛΟΣ I ΕΥΡΩΠΑΪΚΑ ΣΧΟΛΕΙΑ

Επαρχιακός Γραμματέας Λ/κας-Αμ/στου ΠΟΑ Αγροτικής

ΣΥΝΤΟΝΙΣΤΕΣ ΟΜΑΔΑΣ PROJECT ΑΝΘΡΩΠΙΣΤΙΚΕΣ ΕΠΙΣΤΗΜΕΣ: ΟΜΑΔΑ PROJECT ΑΝΘΡΩΠΙΣΤΙΚΕΣ ΕΠΙΣΤΗΜΕΣ:

ΙΕΘΝΗΣ ΣΥΜΒΑΣΗ ΕΡΓΑΣΙΑΣ 183 «για την αναθεώρηση της (αναθεωρηµένης) σύµβασης για την προστασία της µητρότητας,»

ΠΑΡΑΤΗΡΗΣΕΙΣ 1. Να μεταφράσετε το απόσπασμα: «Οὕτω δὴ παρεσκευασμένοι...καὶ ταὺτας νείμω;.» Μονάδες 10

Σημειώσεις Κληρονομικού Δικαίου

Α. ΚΑΤΑΣΤΑΤΙΚΟ ΚΟΙΝΟΠΡΑΞΙΑΣ ΜΕ ΤΗΝ ΕΠΩΝΥΜΙΑ

ΤΕΥΧΟΣ ΠΡΟΚΗΡΥΞΗΣ αριθμ /605/ ΔΗΜΟΣΙΟΥ ΑΝΟΙΚΤΟΥ ΔΙΑΓΩΝΙΣΜΟΥ ΓΙΑ ΤΗΝ ΑΝΑΚΗΡΥΞΗ ΑΝΑΔΟΧΟΥ ΓΙΑ ΤΗΝ ΥΛΟΠΟΙΗΣΗ ΤΟΥ ΕΡΓΟΥ

Ο Οδικός Χάρτης για την Ελλάδα της δημιουργίας

Η Φυσική με Πειράματα

- 1 - ΝΟΜΟΣ ΚΑΒΑΛΑΣ ΔΗΜΟΣ ΘΑΣΟΥ ΛΙΜΕΝΑΣ Δ/ΝΣΗ ΤΕΧΝΙΚΩΝ ΥΠΗΡΕΣΙΩΝ ΠΕΡΙΒΑΛΟΝΤΟΣ & ΔΟΜΗΣΗΣ ΑΡΙΘ. ΠΡΩΤ.: 8017 Έδρα: Δημοτικό Κατάστημα Θάσου

Η ΦΟΡΟΛΟΓΙΑ ΜΕΤΑΒΙΒΑΣΗΣ ΠΛΟΙΩΝ

ΣΩΜΑ ΠΡΟΣΚΟΠΩΝ ΚΥΠΡΟΥ. Εσωτερικός Κανονισμός. Προσκοπικού Πρατηρίου

Ερωτήσεις πολλαπλής επιλογής

ΕΘΝΙΚΗ ΣΥΝΟΜΟΣΠΟΝΔΙΑ ΕΛΛΗΝΙΚΟΥ ΕΜΠΟΡΙΟΥ ΜΗΤΡΟΠΟΛΕΩΣ 42, ΑΘΗΝΑ ΙΝΕΜΥ - ΕΣΕΕ

ΠΡΟΤΑΣΗ ΣΥΝΗΓΟΡΟΥ ΤΟΥ ΚΑΤΑΝΑΛΩΤΗ. για την κατάρτιση ΚΩΔΙΚΑ ΚΑΤΑΝΑΛΩΤΙΚΗΣ ΔΕΟΝΤΟΛΟΓΙΑΣ

ΣΥΣΤΗΜΑ ΔΙΑΓΝΩΣΗΣ ΑΝΑΓΚΩΝ ΑΓΟΡΑΣ ΕΡΓΑΣΙΑΣ ΔΙΑΓΝΩΣΗ ΑΝΑΓΚΩΝ ΣΕ ΠΕΡΙΦΕΡΕΙΑΚΟ ΕΠΙΠΕΔΟ

ΠΑΡΟΥΣΙΑΣΗ ΤΩΝ ΓΕΝΙΚΩΝ ΚΑΙ ΕΙΔΙΚΩΝ ΟΡΩΝ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ «ΑΣΦΑΛΩΣ ΚΑΤΟΙΚΕΙΝ» ΚΟΙΝΟΧΡΗΣΤΟΙ ΧΩΡΟΙ

ΚΕΦΑΛΑΙΟ Γ. Η πολιτική πρόταση και το πρόγραμμα της ΑΝΤΑΡΣΥΑ

ΔΛΠ 17. ΔΛΠ 17 Διεθνές Λογιστικό Πρότυπο 17. Μισθώσεις

ΑΝΑΛΥΤΙΚΟ ΠΡΟΓΡΑΜΜΑ ΙΣΤΟΡΙΑΣ Α ΓΥΜΝΑΣΙΟΥ

ΔΙΔΑΚΤΙΚΟ ΣΕΝΑΡΙΟ : ΔΙΑΤΗΡΗΣΗ ΚΑΙ ΣΥΝΕΧΕΙΑ ΤΗΣ ΖΩΗΣ. 1. Τίτλος ΔΙΑΤΗΡΗΣΗ ΚΑΙ ΣΥΝΕΧΕΙΑ ΖΩΗΣ

ΚΕΦΑΛΑΙΟ Β ΣΚΟΠΟΣ- ΜΕΣΑ ΑΡΘΡΟ 2 ο ΣΚΟΠΟΙ

1 Επιμέλεια: Γράβαλος Βασίλειος, Χρυσανθάκης Ιωάννης

/ Απαντήσεις πανελληνίων εξετάσεων Επαγγελματικών λυκείων (ΕΠΑΛ) 2009

ΓΙΑ ΤΗΝ ΕΞΟΔΟ ΑΠΟ ΤΗΝ ΕΥΡΩΖΩΝΗ ΣΤΟ ΔΗΜΟΨΗΦΙΣΜΑ ΨΗΦΙΖΟΥΜΕ ΕΡΩΤΗΣΕΙΣ & ΑΠΑΝΤΗΣΕΙΣ ΟΧΙ ΜΕΧΡΙ ΤΕΛΟΥΣ. Αριστερή Αντικαπιταλιστική Συσπείρωση (ΑΡ.Α.Σ.

Ακολουθούν όλα τα σχετικά έγγραφα - αποφάσεις για το ωράριο, όπως οµόφωνα ψηφίστηκαν και επικυρώθηκαν από το συνέδριο στο Λουτράκι το 2007

Ο ΠΡΟΕΔΡΟΣ ΤΗΣ ΒΟΥΛΗΣ ΤΩΝ ΕΛΛΗΝΩΝ. Άρθρο πρώτο.

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ ΤΕΧΝΙΚΗΣ ΣΥΓΓΡΑΦΗΣ ΥΠΟΧΡΕΩΣΕΩΝ ΚΕΦΑΛΑΙΟ 1 ΓΕΝΙΚΕΣ ΠΡΟΔΙΑΓΡΑΦΕΣ ΥΛΙΚΩΝ ΕΡΓΑΣΙΑΣ ΚΑΙ ΠΛΗΡΩΜΩΝ

Η παρακμή του εργατικού κινήματος είναι μια διαδικασία που έχει ήδη διαρκέσει. πολλά χρόνια, τώρα ζούμε τα επεισόδια του τέλους της.

Ε.Ε. Π α ρ.ι(i), Α ρ.3638, 27/9/2002

Υποψήφιοι Σχολικοί Σύμβουλοι

ΠΡΟΣΚΛΗΣΗ ΕΚΔΗΛΩΣΗΣ ΕΝΔΙΑΦΕΡΟΝΤΟΣ ΓΙΑ ΤΗΝ ΠΡΟΜΗΘΕΙΑ ΕΤΟΙΜΩΝ ΜΕΡΙΔΩΝ ΦΑΓΗΤΟΥ

Νεοελληνική Γλώσσα Λυκείου

ΑΠΟΦΑΣΗ 34750/2006 (Αριθμός καταθέσεως πράξεως 43170/2006) ΤΟ ΠΟΛΥΜΕΛΕΣ ΠΡΩΤΟΔΙΚΕΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΔΙΑΔΙΚΑΣΙΑ ΕΚΟΥΣΙΑΣ ΔΙΚΑΙΟΔΟΣΙΑΣ ΣΥΓΚΡΟΤΗΘΗΚΕ από

Όλα όσα πρέπει να γνωρίζουν οι απόφοιτοι των ΕΠΑΛ για τις πανελλαδικές εξετάσεις

ΘΕΜΑ : : Εισηγητική έκθεση Δ τριμήνου του έτους 2013 προς την οικονομική επιτροπή, για την εκτέλεση του προϋπολογισμού.

ΑΔΑ: 4ΙΦΝΚ-ΔΘ. Αθήνα, 14 Δεκεμβρίου 2010 Αριθ. Πρωτ.: Ταχυδρομική. Σταδίου 27 Διεύθυνση: Ταχυδρομικός Κώδικας: ΑΘΗΝΑ

1. Ειδικοί Επιστήμονες 2. Επιστημονικοί Συνεργάτες Τηλέφωνο

Μια Ιστορία Πολλοί Συγγραφείς

ΘΕΜΑΤΑ ΓΙΑ ΑΣΕΠ ΝΗΠΙΑΓΩΓΩΝ

ΤΙΜΟΛΟΓΙΟ ΜΕΛΕΤΗΣ ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΕΡ. ΚΕΝΤΡΙΚΗΣ ΜΑΚΕΔΟΝΙΑΣ Π.Ε. ΧΑΛΚΙΔΙΚΗΣ ΔΗΜΟΣ ΠΟΛΥΓΥΡΟΥ ΔΙΕΥΘΥΝΣΗ ΤΕΧΝΙΚΩΝ ΥΠΗΡΕΣΙΩΝ ΕΡΓΟ:


ΣΧΟΛΗ ΕΘΝΙΚΗΣ ΑΜΥΝΑΣ ΠΡΟΚΗΡΥΞΗ

ΔΙΑΚΗΡΥΞΗ ΔΗΜΟΠΡΑΣΙΑΣ ΓΙΑ ΤΗΝ ΕΚΜΙΣΘΩΣΗ ΑΚΙΝΗΤΟΥ Ο ΔΗΜΑΡΧΟΣ ΤΡΙΦΥΛΙΑΣ

ΣΥΣΤΗΜΑ ΔΙΑΓΝΩΣΗΣ ΑΝΑΓΚΩΝ ΑΓΟΡΑΣ ΕΡΓΑΣΙΑΣ ΠΑΡΑΔΟΤΕΟ ΕΘΝΙΚΟΥ ΜΗΧΑΝΙΣΜΟΥ

ΑΠΟΦΑΣΗ. Η Εθνική Επιτροπή Τηλεπικοινωνιών και Ταχυδρομείων (ΕΕΤΤ),

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ (Τ.Ε.Ι.) ΚΑΒΑΛΑΣ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΛΟΓΙΣΤΙΚΗΣ. Θέμα πτυχιακής εργασίας:

Ο συγγραφέας χρησιμοποιεί συνδυασμό μεθόδων για την ανάπτυξη της έβδομης παραγράφου.

Transcript:

Τ.Ε.Ι. ΚΑΒΑΛΑΣ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΑΧΕΙΡΙΣΗ ΠΛΗΡΟΦΟΡΙΩΝ ΘΕΜΑ: Υλοποίηση Αλγορίθμων Γραφικής σε Περιβάλλον Οπτικού Προγραμματισμού ΣΠΟΥΔΑΣΤΡΙΑ: ΚΛΑΔΑΚΗ ΕΙΡΗΝΗ 275 ΚΑΒΑΛΑ, 2006

ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ 1 Εισαγωγή στα γραφικά.3σελ Δική μου εργασία.5σελ ΚΕΦΑΛΑΙΟ 2 ΑΛΓΟΡΙΘΜΟΙ ΣΧΕΔΙΑΣΗΣ ΒΑΣΙΚΩΝ ΣΧΗΜΑΤΩΝ Ο αλγόριθμος για τη σχεδίαση ευθείας 6σελ Ο αλγόριθμος για τη σχεδίαση του κύκλου. 8σελ Ο αλγόριθμος για τη σχεδίαση της έλλειψης..8σελ ΚΕΦΑΛΑΙΟ 3 ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΙ ΣΧΗΜΑΤΩΝ ΣΤΙΣ ΔΙΑΣΤΑΣΕΙΣ Μετατόπιση 13σελ Κλιμάκωση.14σελ Περιστροφή.15σελ ΚΕΦΑΛΑΙΟ 4 Αλγόριθμος διαγράμμισης τυχαίου πολυγώνου.18σελ Αλγόριθμος δημιουργίας των τριγώνων Delauny...26σελ ΑΛΓΟΡΙΘΜΟΙ ΧΡΩΜΑΤΙΣΜΟΥ Χρωματισμός Πολύγωνων 31σελ Γέμισμα με βάση το υπάρχον χρώμα (interior fill).36σελ ΠΡΑΚΤΙΚΟ ΜΕΡΟΣ ΚΕΦΑΛΑΙΟ 5 Μέθοδοι γραφικών. 38σελ Τα βασικά της σχεδίασης..39σελ Σχεδίαση γραμμών.40σελ Χρήση του ορίσματος χρώμα.42σελ Σχεδίαση ορθογωνίων.42σελ Σχεδίαση κύκλων 44σελ Σχεδίαση ελλείψεων....44σελ Καθορισμός του πάχους των γραμμών...46σελ Καθορισμός συνεχών ή διακεκομμένων γραμμών. 48σελ Στυλ συνεχούς και εσωτερικής συνεχούς γραμμής...48σελ Χρήση της συνάρτησης RGB.49σελ Η εργασία μου...50σελ ΒΙΒΛΙΟΓΡΑΦΙΑ...64σελ 2

ΚΕΦΑΛΑΙΟ 1 Εισαγωγή στα γραφικά Δική μου εργασία ΕΙΣΑΓΩΓΗ ΣΤΑ ΓΡΑΦΙΚΑ Μια εικόνα αξίζει όσο 1000 λέξεις, λέει μια παλιά κινέζικη παροιμία και ο καθένας μας γνωρίζει πόσο ευκολότερα κατανοήσιμη είναι μια εικόνα από την περιγραφή με κείμενο. Η παροιμία αυτή επαληθεύεται από τους φυσιολόγους. Το ανθρώπινο οπτικό κανάλι μπορεί να αντιληφθεί 30-40 Mbits πληροφορίας ανά δευτερόλεπτο. Θεωρώντας ότι ένας άνθρωπος μπορεί να κατανοήσει 600-1200 λέξεις γραπτού κειμένου το λεπτό και υποθέτοντας ότι κάθε λέξη αποτελείται από 4 γράμματα και κάθε γράμμα περιέχει 7 bits πληροφορίας εύκολα αποδεικνύεται το αληθές της παροιμίας. Υπάρχουν 3 περιοχές της πληροφορικής που ασχολούνται με εικόνες (σχήμα 1.1). Τα γραφικά (computer graphics) δημιουργούν εικόνες από ένα μοντέλο. Το μοντέλο αυτό, για παράδειγμα, μπορεί να αποτελείται από την περιγραφή ενός φανταστικού κόσμου με πολυγωνικές επιφάνειες. Για την παραγωγή των εικόνων χρησιμοποιούνται τεχνικές που εκφράζουν τον τρόπο αλληλεπίδρασης του φωτός με τα αντικείμενα του μοντέλου. Πολλές από τις τεχνικές αυτές αναπτύχθηκαν ειδικά για τα γραφικά ενώ ορισμένες άλλες προέρχονται από τα μαθηματικά και τη φυσική. Η τεχνητή όραση (computer vision) είναι η αντίστροφη διαδικασία και ασχολείται με την εξαγωγή χρήσιμων πληροφοριών (μοντέλου) από δισδιάστατες προβολές (π.χ. φωτογραφίες) μιας σκηνής. Η τεχνητή όραση προσπαθεί να απαντήσει ερωτήσεις του τύπου, πού βρίσκεται ένας δρόμος σε μια αεροφωτογραφία; ή υπάρχει κάποιος άνθρωπος μέσα σε αυτή την εικόνα;. Η επεξεργασία εικόνων (image processing) περιλαμβάνει μεθόδους για τη βελτίωση των δεδομένων μιας εικόνας (Π.χ. διόρθωση σφαλμάτων που προέκυψαν κατά τη φωτογράφηση όπως σφάλμα φακών, σφάλμα φωτισμού) ή για την απλοποίησή τους (π.χ. μείωση των χρησιμοποιούμενων χρωμάτων). Η επεξεργασία εικόνων μπορεί να χρησιμοποιηθεί αυτόνομα ή σαν μέρος της τεχνικής όρασης. Η εργασία αυτή ασχολείται με τα γραφικά. 3

Από τις αρχές της δεκαετίας του' 60 εμφανίσθηκαν τα πρώτα περιφερειακά που επέτρεπαν στο χρήστη να διαλέγεται (interact) με τον υπολογιστή. Συγχρόνως εμφανίσθηκε και το πρώτο λογισμικό σύνδεσης (drivers) που επέτρεπε τα προγράμματα εφαρμογής να χρησιμοποιούντα περιφερειακά αυτά. Ήταν φυσικό το αρχικό λογισμικό σύνδεσης να έχει περιορισμένες δυνατότητες και να παρέχει στο χρήστη απλές συναρτήσεις γραφικών. Με τον καιρό οι συναρτήσεις αυτές γίνονταν ολοένα και πιο πολύπλοκες ενώ συγχρόνως εμφανίζονταν και νέα περιφερειακά. Από μια πρώτη ματιά όλα αυτά τα περιφερειακά φαίνονταν μη συμβατά μεταξύ τους και αυτό είχε ως αποτέλεσμα το λογισμικό γραφικών που αναπτύσσονταν για καθένα από αυτά, να είναι εντελώς διαφορετικό, καθώς έπαιρνε υπόψη τις ιδιαιτερότητες του κάθε περιφερειακού. Έτσι τα πρώτα συστήματα γραφικών είχαν την τάση να είναι: εξαρτημένα από τα περιφερειακά εξαρτημένα από το λογισμικό εφαρμογής εξαρτημένα από το υπολογιστικό περιβάλλον Με τον τρόπο αυτόν, κάθε σύστημα γραφικών ήταν ειδικευμένο σε κάποιο λογισμικό εφαρμογής και σε κάποιο περιφερειακό. Καθώς όμως τα περιφερειακά γίνονταν φθηνότερα και καινούργιοι τύποι εμφανίζονταν στην αγορά, η κατάσταση άρχισε πλέον να γίνεται ανεξέλεγκτη και η ανάγκη ύπαρξης προδιαγραφών για συστήματα γραφικών έντονη. Η κατάσταση αυτή οδήγησε την Ομάδα Εργασίας WG5.2 της IFIP (lntemational Federation for Infoπnation Processing, IFIP) δηλαδή της Επιτροπής Γραφικών της Διεθνούς Ομοσπονδίας Επεξεργασίας.της Πληροφορίας, να ξεκινήσει μια προσπάθεια ίδρυσης κάποιας τυποποιημένης μεθοδολογίας στα γραφικά. 4

Η ΕΡΓΑΣΙΑ ΜΟΥ Το πρώτο σχέδιο της εργασία μου περιέχει κώδικα της Visual Basic όπου σχηματίζω μια εικόνα με διάφορα σχήματα όπως κύκλο τετράγωνο και άλλα σχήματα. Ο χρήστης επιλέγει το χρώμα που θέλει από την παλέτα που έχει ώστε να σχηματίσει την εικόνα με το χρώμα που θέλει. Στο δεύτερο σχέδιο πάλι σχηματίζω την εικόνα με διάφορα σχήματα. Ο χρήστης σε αυτήν την εικόνα μπορεί να μετακινήσει της συντεταγμένες στα αντικείμενα που έχω σχηματίσει. 5

ΚΕΦΑΛΑΙΟ 2 ΑΛΓΟΡΙΘΜΟΙ ΣΧΕΔΙΑΣΗΣ ΒΑΣΙΚΩΝ ΣΧΗΜΑΤΩΝ Ο αλγόριθμος για τη σχεδίαση ευθείας Ο αλγόριθμος για τη σχεδίαση του κύκλου Ο αλγόριθμος για τη σχεδίαση της έλλειψης Ο αλγόριθμος για τη σχεδίαση ευθείας Οι αλγόριθμοι που χρησιμοποιούνται εδώ έχουν σαν στόχο την επιλογή pixel τα οποία βρίσκονται όσο γίνεται πιο κοντά στη μαθηματική πορεία της ευθείας. Τα pixel που επιλέγονται πρέπει να σχηματίζουν μια ευθεία το πάχος της οποίας να είναι όσο το δυνατόν σταθερό και ανεξάρτητο από το μήκος και την κλίση της. Το ελάχιστο σταθερό πάχος μιας ευθείας στην οθόνη είναι 1 pixel και αυτό επιτυγχάνεται μόνο όταν η ευθεία που σχεδιάζεται είναι παράλληλη προς κάποιο άξονα ή έχει κλίση 45. Επίσης η σχεδίαση πρέπει να γίνεται όσο το δυνατόν ταχύτερα καθώς αλγόριθμοι αυτού του είδους χρησιμοποιούνται πολύ συχνά. Στη συνέχεια θα αναφέρουμε ένα απλό αλλά μη αποδοτικό αλγόριθμο ο οποίος με μια σειρά-λογικών τροποποιήσεων μετατρέπεται στον αποδοτικό αλγόριθμο του Bresenham (bre65) κατά αναλογία με τους [Spro82] και [Raub93]. Αλγόριθμος του Bresenham για τη σχεδίαση ευθείας Ο αλγόριθμος του Bresenham για τη σχεδίαση ευθείας (Bresenham line aigorithm) είναι μια αποδοτική μέθοδος ψηφιδωτής σχεδίασης ευθειών, η όπου χρησιμοποιεί μόνο ακέραιες προσθέσεις αφαιρέσεις και πολλαπλασιασμούς με το 2. Αυτό είναι πλεονέκτημα της μεθόδους διότι οι αριθμητικές πράξεις που απαιτεί γίνονται πολύ γρήγορα, κάτι που έχει αντίκτυπο στη γρήγορη σχεδίαση. 6

Η φιλοσοφία στην οποία στηρίζεται η μέθοδος, είναι πολύ απλή και στηρίζεται σε κάποιο κριτήριο απόστασης. Η ψηφίδα την οποία θα επιλέξουμε για τη σχεδίαση της ευθείας θα πρέπει να είναι εκείνη η οποία απέχει λιγότερο από την πραγματική ευθεία (στο παρακάτω σχήμα). Στη συνέχεια θα περιγράψουμε τον τρόπο υπολογισμού του κριτηρίου της απόστασης. Ψηφίδα πάνω από την ευθεία Πραγματική ευθεία Y1+1 Y1 Ψηφίδα κάτω από την ευθεία Ψηφίδα επί της Ευθείας Σχήμα Διαφορά μεταξύ των τεταγμένων των ψηφίδων που πρέπει να επιλέγουν βάσει του αλγορίθμου Bresenhat και της ψηφίδας η οποία βρίσκεται επί της πραγματικής ευθείας. Αλγόριθμος 1 (με τη Βοήθεια της αλγεβρικής εξίσωσης ευθείας) 'Έστω ότι θέλουμε να σχεδιάσουμε ένα ευθύγραμμο τμήμα μεταξύ των pixe Ρ1,(χ1,γ1) και Ρη.(Χ., Υ.), στο 1 οκταμόριο (τα άλλα οκταμόρια αντιμετωπίζονται με συμμετρία). Από την Αναλυτική Γεωμετρία γνωρίζουμε ότι για οποιοδήποτε σημείο Ρ(Χ. Υ) του ευθύγραμμου τμήματος ισχύει: y=s*x+b με s=yn-y1/xn-x1=δy/δx και b=y1xn-ynx1/xn-x1 με βάση τα παραπάνω γράφουμε τον αλγόριθμο: 7

line1(x1,y1,xn,yn,colour) int x1,y1,xn,yn,colour ; /*colour η τιμή του χρώματος του ευθύγραμμου τμήματος */ { float s,b,y; int x; s=(yn-y1)/(float)(xn-x1); b=(y1*xn-yn*x1)/(float)(xn-x1); for(x=x1 ; x<=xn ; x++) {y=s*x=b ; setpixel(x, round(y),colour); } } Αλγόριθμος του Bresenham για τη σχεδίαση κύκλου και έλλειψης Ο αλγόριθμος του bresenhat για τη σχεδίαση του κύκλου, εφαρμόζει αυτό το κριτήριο και υπολογίζει πρωτογενή σημεία για το 1/8 του κύκλου, εκμεταλλευόμενος τις συμμετρίες. Έστω ότι πρέπει να σχεδιαστεί κάποιος κύκλος στο σημείο (xο=0,yο=0), με ακτίνα r. Το μοναδιαίο βήμα της σχεδίασης ίσο με μια ψηφίδα θεωρείται κατά τη διεύθυνση του x και από το χο=0 ως το x=y. Με τον τρόπο αυτό καλύπτεται το 1/8 του κύκλου. Ως αρχή της σχεδίασης, θεωρείται η ψηφίδα (0,r). yi yi-1 yi-2 X 2 +y 2 =r 2 yi-3 xi xi+1 xi+2 xi+3 Σχήμα Ψηφιδωτή σχεδίαση κύκλου 8

Για την περίπτωση μας, θεωρούμε ότι ήδη έχει σχεδιαστεί η ψηφίδα(xi,yi) και πρέπει να σχεδιαστεί η επόμενη της. Η επόμενη ψηφίδα, θα πρέπει να επιλεγεί μεταξύ των (xi+1,yi) και (xi+1,yi-1). Λόγω αυτής της συμμετρίας αρκεί να εξετάσουμε τη σχεδίαση του κύκλου σε ένα οκταμόριο π.χ. το δεύτερο. Στη συνέχεια θα αναφερθούμε σε κύκλο με κέντρο την αρχή των αξόνων Ο (κέντρο κάποιου pixel) και ακτίνα r ακέραιο αριθμό. Μετά τον προσδιορισμό ενός σημείου (x,y) του δεύτερου οκταμορίου καλείται η ρουτίνα circle_symmetry που σχεδιάζει τα 8 συμμετρικά σημεία: Circle_symmetry (x,y,colour); Int x, y, colour {setpixel (x,y,colour) ; setpixel (y,x,colour) ; setpixel (y,-x,colour) ; setpixel (x,-y,colour) ; setpixel (-x,-y,colour) ; setpixel (-y,-x,colour) ; setpixel (-y,x,colour) ; setpixel (-x,y,colour) ; } Οι κωνικές τομές όπως η έλλειψη είναι βασικό γεωμετρικό σχήμα μετά την ευθεία και τον κύκλο. Έστω έλλειψη με κέντρο το(0,0) και άξονες παράλληλους με τους x και y αντίστοιχα όπως φαίνεται στο παρακάτω σχήμα 9

b Περιοχή 1 dy dx=-1 -α α (0,0) Περιοχή 2 -b Σχήμα : Συμμετρία έλλειψης Η έλλειψη αυτή έχει εξίσωση: Χ 2 /α 2 + y 2 /b 2 =1 Όπως φαίνεται στο σχήμα παραπάνω,η έλλειψη έχει 4πλή συμμετρία οπότε χρειάζεται να δημιουργήσουμε μόνο το τόξο της που βρίσκεται στο πρώτο τεταρτημόριο. Εδώ διακρίνουμε 2 περιοχές που χωρίζονται από το σημείο όπου dy/dx=-1. Στην πρώτη περιοχή ο βασικός άξονας κίνησης είναι ο Χ ενώ στην δεύτερη είναι ο Y. Κατά επέκταση του αλγορίθμου bresenham κύκλου, θα βρούμε επαναληπτικές εκφράσεις για τον υπολογισμό των μεταβλητών απόφασης στις 2 περιοχές, τις αρχικές τιμές των μεταβλητών απόφασης και μια συνθήκη που να σηματοδοτεί τη μετάβαση από την περιοχή 1 στην 2. Ο κώδικας δημιουργίας έλλειψης: Ellipse (a,b,colour) Int a,b,colour; { int a_sqr,b_sqr, a22,b 22,a 42,b 42, x_slope,y_slope,d,mida,midb,x,y; 10

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

x++; x_slope=x_slope+b42; } d=d+a22-y_slope; y--; y_slope=y_slope-a42 ; } } 12

ΚΕΦΑΛΑΙΟ 3 ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΙ ΣΧΗΜΑΤΩΝ ΣΤΙΣ ΔΙΑΣΤΑΣΕΙΣ Μετατόπιση Κλιμάκωση Περιστροφή ΜΕΤΑΤΟΠΙΣΗ Κάθε σημείο P(x,y) του επιπέδου μετατίθεται σε μια καινούργια θέση P (x,y ) πάνω στο επίπεδο, με την προσθήκη κάποιων ποσοτήτων μετατόπιση(translation). Έτσι οι συντεταγμένες του σημείου P θα δίνονται από τις σχέσεις: x =x+t x y =y+t y όπου: x,y οι αρχικές συντεταγμένες του P x,y οι τελικές συντεταγμένες t x, t y οι ποσότητες μεταθέσεις κατά x και y οι παραπάνω σχέσεις εκφρασμένες σε μορφή πινάκων γράφονται x t x x = + y t y y ή P =T+P όπου ο T είναι ο πίνακας μετατόπισης Στο παρακάτω σχήμα φαίνεται ένα αντικείμενο δύο διαστάσεων πριν και μετά την εφαρμογή μετάθεσης στις συντεταγμένες των άκρων του. 13

y y 3 1 1 x 3 x ΚΛΙΜΑΚΩΣΗ Η θέση ενός σημείου P(x,y) (που θεωρείται το τέλος ενός τμήματος με αρχή την αρχή του συστήματος των συντεταγμένων )μεταβάλλεται πάνω στο επίπεδο, αν αλλάξει η κλίμακα (scale) των συντεταγμένων του. Η αλλαγή της κλίμακας στις συντεταγμένες όλων των σημείων λεπτομέρειας ενός σχήματος, έχει ως αποτέλεσμα την αλλαγή της κλίμακας του σχεδίου. Οι συντεταγμένες της καινούργιας θέσης του σημείου, δίνονται από τις σχέσεις: x =x s x y =y s y όπου x,y οι νέες συντεταγμένες x,y οι παλιές συντεταγμένες s x, s y οι συντελεστές κλίμακας κατά x και y Οι σχέσεις αυτές με μορφή πινάκων γράφονται x s x 0 x = y 0 s y y 14

ή P =S P όπου ο S είναι ο πίνακας κλίμακας y y y 2 1 2 x 4 x 0.5 1 x (α) (β) (γ) Σχήματα : (α) το σχήμα πριν από την αλλαγή κλίμακας (β) s x = s y =2 (μεγέθυνση) (γ) ) s x = 1/2, s y =1/4 (σμίκρυνση και παραμόρφωση) Όπως φαίνεται και στα παραπάνω σχήματα, η αλλαγή κλίμακας γίνεται γύρω από την αρχή των συντεταγμένων και απομακρύνει ή φέρνει το αντικείμενο κοντά στην αρχή αυτή, όταν αντίστοιχα γίνεται μεγέθυνση ή σμίκρυνση. Ακόμα, εάν οι συντελεστές s x και s y είναι διαφορετικοί, το σχήμα παραμορφώνεται επειδή αλλάζουν οι αναλογίες των σχημάτων. ΠΕΡΙΣΤΡΟΦΗ Ένα σημείο P(x,y) (που θεωρείται το τέλος τμήματος με αρχή την αρχή των συντεταγμένων του καρτεσιανού συστήματος ) μπορεί να στραφεί κατά γωνία θ γύρω από την αρχή των αξόνων. Οι σχέσεις που καθορίζουν τη περιστροφή(rotation)είναι: x = x cosθ y sinθ y =x sinθ + y cosθ 15

όπου: x, y οι νέες συντεταγμένες x, y οι αρχικές συντεταγμένες θ η γωνία στροφής μετρημένη κατά φορά αντίθετη από τη φορά των δεικτών του ωρολογίου Εάν η γωνία μετράται κατά τη φορά των δεικτών του ωρολογίου οι προηγούμενες σχέσεις γίνονται x =x cosθ + y sinθ y = -x sinθ+ y cosθ Σε μορφή πινάκων οι σχέσεις της στροφής με φορά αντίθετη προς τη φορά των δεικτών του ωρολογίου γράφονται x cosθ -sinθ x y sinθ cosθ y ή P =R P όπου ο R είναι ο πίνακας περιστροφής Στο σχήμα 2 φαίνεται η στροφή ενός αντικειμένου κατά γωνία θ=45 γύρω από την αρχή των αξόνων. Η στροφή του αντικειμένου είναι αποτέλεσμα της στροφής κάθε επί μέρους σημείου λεπτομέρειας του κατά γωνία 45 y P (4.7, 3..9) Θ=30 P (6,1) x σχήμα 1 Στροφή σημείου κατά γωνία θ. Φαίνεται η φορά μέτρησης της θ 16

y y 7.8 4.9 2 5 9 x 2.1 4.9 x πριν από τη στροφή μετά από τη στροφή Σχήμα 2 Στροφή κατά γωνία 45. Η στροφή γίνεται με φορά αντίθετη προς τη φορά των δεικτών του ωρολογίου. 17

ΚΕΦΑΛΑΙΟ 4 Αλγόριθμος διαγράμμισης τυχαίου πολυγώνου Αλγόριθμος δημιουργίας των τριγώνων Delauny ΑΛΓΟΡΙΘΜΟΙ ΧΡΩΜΑΤΙΣΜΟΥ Χρωματισμός Πολύγωνων Γέμισμα με βάση το υπάρχον χρώμα (interior fill) Αλγόριθμος διαγράμμισης τυχαίου πολυγώνου Ο αλγόριθμος που περιγράφεται στη συνέχεια, ακολουθεί την αρχή του ελέγχου της ισοτιμίας και η λογική του βρίσκει εφαρμογή είτε τα πολύγωνα βρίσκονται σε διανυσματική μορφή είτε σε ψηφιδωτή. Σε αυτήν την παράγραφο η μεθοδολογία περιγράφεται θεωρώντας ότι το πολύγωνο δίνεται σε διανυσματική μορφή και υπολογίζονται οι τομές των περιμετρικών πλευρών και των ευθειών της διαγράμμισης. Η αρχή του ελέγχου της ισοτιμίας στηρίζεται στο γεγονός ότι αριθμός των τομών μιας κλειστής καμπύλης (όπως είναι η περιμετρική γραμμή ενός πολυγώνου) και μιας ευθείας γραμμής είναι άρτιος. Έτσι, εάν θεωρήσουμε μια ευθεία γραμμή που τέμνει μια κλειστή επιφάνεια, μπορούμε να εντοπίσουμε τα τμήματα της γραμμής που ανήκουν στο εσωτερικό της επιφάνειας αυτής μετρώντας τις τομές της ευθείας με την κλειστή περιμετρική γραμμή. Τα τμήματα που ορίζονται ανάμεσα σε περιττές (αρχή) και άρτιες (τέλος) τομές, ανήκουν στο εσωτερικό της περιμετρικής γραμμής, ενώ τα τμήματα που ορίζονται 18

Σχ. 1 Τα τμήματα 1-2 και 3-4 είναί εσωτερικά ενώ το 2-3 εξωτερικό. Το σημείο 1,2 είναι σημείο επαφής. από άρτιες (αρχή) και περιττές (τέλος) τομές, βρίσκονται στο εξωτερικό. Στις περιπτώσεις που η ευθεία εφάπτεται της περιμετρικής γραμμής. το σημείο επαφής μετριέται δύο φορές. Για τη σωστή λειτουργία του αλγορίθμου θα πρέπει οι κορυφές του πολυγώνου να δίνονται με συνεχή φορά δεξιόστροφης ή αριστερόστροφης και ταυτόχρονα να είναι γνωστή η τοπολογία των πλευρών του. Στο (α) (β) (γ) (δ) σχήμα 2 φαίνονται περιπτώσεις τυχαίων πολυγώνων τις οποίες αντιμετωπίζει ο αλγόριθμος. (α) Μεμονωμένη κλειστή επιφάνεια (β) Ομάδα κλειστών επιφανειών (γ) Χώρος μεταξύ εξωτερικής και εσωτερικής επιφάνειας (δ) Μικτή περίπτωση των (β) και (γ) τα δεδομένα του αλγορίθμου είναι: 19

1. οι συντεταγμένες των κορυφών της μιας ή των περισσοτέρων περιμετρικών γραμμών των πολυγώνων που διαγραμμίζονται. 2. Ο συνολικός αριθμός των κορυφών όλων των πολυγώνων 3. Ο αριθμός των κορυφών κάθε επί μέρους περιμετρικής γραμμής 4. Η επιθυμητή γωνία κλίσης της διαγράμμισης Η επιθυμητή απόσταση μεταξύ των γραμμών της διαγράμμισης Τα βήματα του αλγορίθμου είναι: 1. Δημιουργία ενός ενιαίου' συνόλου πλευρών, από όλα τα πολύγωνα που διαγραμμίζονται 2. Στροφή του συστήματος συντεταγμένων των κορυφών, κατά γωνία ίση με τη γωνία κλίσης της διαγράμμισης. Στο στραμμένο σύστημα η διαγράμμιση θεωρείται οριζόντια και στην ουσία γίνεται μια σάρωση της κλειστής επιφάνειας, που ξεκινά από το μέγιστο y της περιμετρικής γραμμής (στο στραμμένο σύστημα) και προχωρά προς τα κάτω μέχρι το ελάχιστο y, κατά το επιλεγμένο βήμα διαγράμμισης. 3. Αποθήκευση σε πίνακα των συντεταγμένων x και y εκείνης της κορυφής κάθε πλευράς, η οποία έχει το μεγαλύτερο y (επιλεγμένη κορυφή) καθώς επίσης και των διαφορών Dx και Dy οι οποίες προστιθέμενες στα x και y της επιλεγμένης κορυφής δίνουν τις συντεταγμένες της άλλης κορυφής της πλευράς (βλ. Σχ. 14-14). Σχ. 2 Στην πλευρά ΑΒ η επιλεγμένη κορυφή είναι η Β επειδή Υ β > Υ α D χ = ΧΑ - Χ β και D y = Y A Υ B 20

4. Κωδικοποίηση των πλευρών που ανήκουν στο ενιαίο σύνολο του βήματος (1), έτσι ώστε να φαίνεται σε ποίο από τα πολύγωνα ανήκει η κάθε πλευρά. 5. Ταξινόμηση των πολυγωνικών πλευρών. Η ταξινόμηση που περιγράφεται εδώ, είναι απαραίτητη για την επιτάχυνση της εκτέλεσης του αλγορίθμου. Είναι άσκοπο και ιδιαίτερα χρονοβόρο να διερευνώνται για κάθε θέση της γραμμής σάρωσης όλες οι πλευρές και να υπολογίζονται και τομές που μπορεί να μην ανήκουν στην περίμετρο των πολυγώνων. Αντίθετα, για κάθε θέση της γραμμής σάρωσης πρέπει να είναι γνωστό : α) πόσες και ποιες από τις πλευρές δίνουν τομές με τη συγκεκριμένη γραμμή πάνω στην πολυγωνική περίμετρο, β) πόσες και ποιές από τις πλευρές τελειώνουν και δεν παίρνουν άλλο μέρος στις διερευνήσεις καθώς η σάρωση προχωρεί προς τα κάτω και γ) πόσες και ποιές από τις υπόλοιπες πλευρές έρχονται να πάρουν τη θέση των προηγουμένων που έχουν τελειώσει. Οι πλευρές ταξινομούνται σύμφωνα με την τεταγμένη y της επιλεγμένης τους κορυφής πηγαίνοντας πρώτη η πλευρά με το μεγαλύτερο y. Υποσύνολα πλευρών που έχουν κοινό y αλλά διαφορετικό x επιλεγμένης κορυφής, ταξινομούνται στη συνέχεια σύμφωνα με το x της επιλεγμένης κορυφής πηγαίνοντας πρώτη η πλευρά με το μικρότερο x. Τέλος, εάν υπάρχουν ακόμη αταξινόμητες πλευρές, χρησιμοποιούνται ως κριτήρια ταξινόμησης οι διαφορές D x και D y και οι πλευρές με το μικρότερο D x ή D y πηγαίνουν πρώτες. 'Όλες οι πλευρές που είναι παράλληλες προς τη διαγράμμιση δε λαμβάνονται πουθενά υπόψη. Η σειρά ταξινόμησης των πλευρών στην τελική της μορφή, είναι η σειρά με την οποία η ευθεία της διαγράμμισης, σαρώνοντας την κλειστή πολυγωνική επιφάνεια, θα συναντήσει τις πλευρές. 6. Χαρακτηρισμός των πλευρών, σύμφωνα με το αν η κάθε πλευρά αντικαθίσταται από κάποια άλλη όταν τελειώνει η σάρωσή της ή όχι. Για τον εντοπισμό αυτής της ιδιότητας των πλευρών ακολουθούνται οι εξής κανόνες: α. Μια πλευρά που τελειώνει, δεν αντικαθίσταται ποτέ από πλευρά άλλης πολυγωνικής γραμμής παρά μόνον από πλευρά που ανήκει στην ίδια μ' αυτήν πολυγωνική γραμμή. Σ' αυτό ακριβώς το σημείο, είναι χρήσιμη η κωδικοποίηση των πλευρών που έγινε στο βήμα (4). 21

β. Μια πλευρά αντικαθίσταται από μια άλλη του ιδίου πολυγώνου, μόνον όταν το ελάχιστο y της, δηλαδή το y της μη επιλεγμένης κορυφής, ισούται με το y της επιλεγμένης κορυφής της άλλης πλευράς, που είναι διαδοχική της. Με το τέλος αυτού του βήματος ο αλγόριθμος έχει δημιουργήσει έναν πίνακα που περιέχει τις ταξινομημένες πλευρές και τα απαραίτητα για την εξέλιξη του αλγορίθμου χαρακτηριστικά τους στοιχεία. Στο σχήμα 2 φαίνεται ένα τυχαίο πολύγωνο που πρόκειται να διαγραμμιστεί και στον πίνακα 1 τα χαρακτηριστικά του στοιχεία που προκύπτουν στο τέλος του βήματος (6). Σ χ.1 Οι επιλεγμένες κορυφές των πλευρών είναι οι 2,4,6,7,9,11,και 1 Πλευρά X y D x D y Κωδικός 4-3 4-5 2-1 2-3 6-5 6-7 7-8.... 11-10 X 4 Y 4 X 4 Y 4 X 2 Y 2 X 2 Y 2 X 6 Y 6 X 6 Y 6 X 7 Y 7..... X 11 Y 11 X 3- X 4 X 5- X 4 X 1- X 2 X 3- X 2 X 5- X X 7- X 6 X 8- X 7 Y 3- Y 4 Y 5- Y 4 Y 1- Y 2 Y 3- Y 2 Y 5- Y 6 Y 7- Y 6 Y 8- Y 7 0 0 1 0 0 1 0........ X 10- X 11 Y 10- Y 11 0 22

Πιν. 2 Στην πρώτη στήλη φαίνονται οι πλευρές όπως ταξινομήθηκαν. Ο κωδικός μιας πλευράς είναι ίσος με 0 όταν αυτή δεν αντικαθίσταται από άλλη και ίσος με 1 στην αντίθετη περίπτωση. Σύμφωνα με το σχήμα 2 η πλευρά 2-1 αντικαθίσταται από την 1-12 και η 6-7 από την 78 7. Δημιουργία των λωρίδων μεγίστων. Όταν δύο ή περισσότερες διαδοχικές πλευρές έχουν το ίδιο y επιλεγμένης κορυφής, τότε αυτό το y είναι ένα μέγιστο. Στο βήμα αυτό, το σύνολο της επιφάνειας που πρόκειται να διαγραμμιστεί χωρίζεται σε επιμέρους λωρίδες, που έχουν για ανώτατο και κατώτατο όριο δύο διαδοχικά μέγιστα, εκτός από την τελευταία λωρίδα, που το κατώτατο όριό της είναι το ελάχιστο y όλων των πολυγωνικών ή της μιας πολυγωνικής γραμμής (βλ Σχ.14-16). Σε κάθε λωρίδα, μετά το πέρασμα της γραμμής σάρωσης κάτω από το ανώτατο όριό της, ξεκινά η διαδικασία της διαγράμμίσης Σχ. 3 Λωρίδες μεγίστων πάντα με άρτιο αριθμό πλευρών Τα εσωτερικά τμήματα της γραμμής σάρωσης εντοπίζονται ανάμεσα σε περιττές και άρτιες πλευρές σύμφωνα με την αρχή του ελέγχου της ισοτιμίας. Η δημιουργία των λωρίδων όχι μόνον επιταχύνει την εκτέλεση του αλγορίθμου εφόσον η διαγράμμιση γίνεται τμηματικά, αλλά αποτελεί και το κατάλληλο συμπλήρωμα στην προηγούμενη διαδικασία της ταξινόμησης και του χαρακτηρισμού των πλευρών. Μ' αυτόν τον τρόπο, είναι γνωστό κάθε στιγμή πόσες και ποιές πλευρές παίρνουν μέρος στη διαδικασία. 8. Καταχώρηση των πλευρών στις επί μέρους λωρίδες ανάλογα με τη θέση τους και υπολογισμός του αρτίου πλήθους των πλευρών, που εμπλέκονται στη διαδικασία, μόλις η γραμμή σάρωσης περάσει κάτω από το ανώτατο όριο μιας λωρίδας. Στο σχήμα 14-17 φαίνονται οι σχετικές θέσεις που πρέπει να έχει η πλευρά ως προς τα όρια μιας λωρίδας για να ανήκει σ' αυτήν. 23

Στο σχήμα 3 στη λωρίδα Ι ύπαρχουν δύο πλευρές (2-3 και 3-4) και η διαγράμμιση ξεκινά μ'αυτές. Στη λωρίδα ΠΙ υπάρχουν πέντε πλευρές (10-9, 6-7, 6-5, 3-4 και 4-5) και η διαγράμμιση ξεκινά με τις τέσσερις πρώτες ενώ η πέμπτη χρησιμοποιείται αργότερα και συνεχίζεται και στην επόμενη Σχ.4Σχετικές θέσεις πλευράς και λωρίδας όταν η πλευρά ανήκει στη λωρίδα λωρίδα. Βλέπουμε λοιπόν, ότι οι πλευρές με τις οποίες ξεκινά η διαγράμμιση σε μια λωρίδα, είναι πλευρές που το y της επιλεγμένης τους κορυφής ταυτίζεται με το άνω όριο της λωρίδας ή πλευρές που συνεχίζονται από την προηγούμενη λωρίδα. 9. Υπολογισμός των τομών της γραμμής σάρωσης και των πλευρών που ανήκουν σε μια λωρίδα. Αρχικά στη λωρίδα η διαδικασία ξεκινά με τόσες πλευρές (πάντα άρτιος αριθμός) όσες υπολογίστηκαν στο βήμα (8). Οι πλευρές χρησιμοποιούνται με τη σειρά ταξινόμησής τους. Εάν το y της γραμμής σάρωσης είναι μεγαλύτερο από το ελάχιστο y μιας πλευράς, τότε με τη χρήση των καταχωρημένων συντεταγμένων του βήματος (6), υπολογίζονται οι συντεταγμένες των τομών της πλευράς με τη γραμμή σάρωσης. Σε κάθε θέση της γραμμής υπολογίζονται τόσες τομές όσες είναι οι πλευρές, που πληρούν την παραπάνω προϋπόθεση. Εάν το y της διαγράμμισης είναι μικρότερο από το ελάχιστο y της πλευράς, αυτό σημαίνει ότι η σάρωση έχει ξεπεράσει την πλευρά και πλέον δεν την τέμνει. Στην περίπτωση αυτή, ελέγχεται η τελευταία στήλη του πίνακα του βήματος (6) για να διαπιστωθεί εάν η πλευρά αντικαθίσταται από κάποια διαδοχική της ή όχι (βλ. Σχ. 4). 24

Σχ.4 Στη θέση (α) η γραμμή σάρωσης τέμνει τις πλευρές 1-2, 4-3, 4-5 και 7-6 της λωρίδας. Στη θέση (β) οι πλευρές 1-2 και 7-6 έχουν αντικατασταθεί από τις 2-3 και 5-6 αντίστοιχα. Και στις δύο θέσεις οι τομές έχουν άρτιο πλήθος. Εάν μεν αντικαθίσταται, τότε ο αριθμός των πλευρών παραμένει άρτιος και η γραμμή σάρωσης τέμνει την αντικαταστάτριά της. Εάν πάλι βρεθεί ότι η πλευρά δεν αντικαθίσταται από άλλη, τότε για να διατηρηθεί ο άρτιος αριθμός πλευρών που τέμνει η σάρωση θα πρέπει να υπάρχει και ακόμη μια πλευρά που τελειώνει.ταυτόχρονα μ' αυτή που μας ενδιαφέρει και δεν τέμνεται πια από τη διαγράμμιση (βλ. Σχ. 4). Σχ.5 Στη θέση (α) η γραμμή τέμνει έξι πλευρές. Στη (β) σταματά η 3-4 και ταυτόχρονα η 4-5, χωρίς να αντικαθίστανται από άλλες. Οι πλευρές που απομένουν δηλαδή οι 1-2, 2-3, 5-6 και 6-7 έχουν πάλι άρτιο πλήθος. 10. Στροφή στο αρχικό σύστημα και ταξινόμηση των συντεταγμένων των τομών μια συγκεκριμένης γραμμής σάρωσης με τις αντίστοιχες πλευρές. Εάν ο αριθμός της γραμμής σάρωσης (οι γραμμές μετριούνται από την αρχή της διαγράμμισης) είναι περιττός, οι τομές ταξινομούνται με βάση την τετμημένη τους x πηγαίνοντας πρώτη η τομή με το μικρότερο x. Εάν ο αριθμός είναι άρτιος ταξινομούνται αντίστροφα. Εάν η διαγράμμιση έχει γωνία κλίσης 90 η ταξινόμηση γίνεται με βάση την τεταγμένη y. Τα εσωτερικά τμήματα, δηλαδή τα τμήματα που 25

σχεδιάζονται είναι εκείνα που ορίζονται ανάμεσα σε περιττές και άρτιες τομές όπως αυτές είναι ταξινομημένες. Η ταξινόμηση κατά αύξουσα ή φθίνουσα σειρά σε κάθε γραμμή σάρωσης, γίνεται για να σχεδιάζεται η διαγράμμιση ζιγκ-ζαγκ και να μειώνεται ο χρόνος της σχεδίασης. 11. Τα βήματα (9) και (10) επαναλαμβάνονται για κάθε λωρίδα μεγίστων. Αλγόριθμος δημιουργίας των τριγώνων Delauny Το ουσιαστικό σημείο του αλγορίθμου είναι η εύρεση για κάθε ένα από τα Ν σημεία της κατανομής S, των γειτονικών κατά το διάγραμμα Voronoi (βλ. Σχ.1), δηλαδή των σημείων εκείνων με τα οποία κλείνουν τρίγωνα Delauny. Τα δεδομένα του αλγορίθμου είναι: 1. Το πλήθος των σημείων της τυχαίας κατανομής 2. Οι συντεταγμένες όλων των σημείων στο επίπεδο. Υποθέτουμε ότι ξεκινούμε από ένα τυχαίο σημείο της κατανομής, έστω το σημείο 0 και ότι ένα από τα γειτονικά του κατά Voronoi σημεία είναι το 1. Το ευθύγραμμο τμήμα 0-1 το ονομάζουμε βάση και αποτελεί την αρχή της δημιουργίας των τριγώνων. Το ψάξίμο των γειτονικών σημείων γίνεται σύμφωνα με τη φορά των δεικτών του ωρολογίου. Για τη βάση 0-1 το ζητούμενο γειτονικό σημείο ανάμεσα σε όλα όσα συναντώνται κατά τη δεξιόστροφη φορά, είναι εκείνο που μαζί με το 0 ορίζει τρίγωνο του οποίου ο περιγεγραμμένος κύκλος δεν, περιέχει κανένα από τα σημεία της κατανομής. Σύμφωνα με το σχήμα 15-8, το ζητούμενο γειτονικό είναι το σημείο 2. Στη συνέχεια, βάση γίνεται η γραμμή 0-2 και εντοπίζεται το αντίστοιχο σημείο, που εδώ; είναι το 3. Η διαδικασία συνεχίζεται, μέχρι η δεξιόστροφη διερεύνηση να συναντήσει και πάλι το σημείο 1. 26

Σχ. 1 Κυκλικό ψάξιμο των γειτονικών κατά Voronoi σημείων Σημαντική για την ταχύτητα εκτέλεσης του αλγορίθμου είναι η σωστή επιλογή του ευθυγράμμου τμήματος-βάση, απ' όπου θα ξεκινήσει η διερεύνηση και η δημιουργία των τριγώνων καθώς επίσης και η ταξινόμηση των σημείων της κατανομής κατά x και y, έτσι, ώστε κάθε, φορά να διερευνώνται τα κοντινότερα στη βάση σημεία και κυρίως ο, μικρότερος δυνατόν αριθμός από αυτά. Τα βήματα του αλγόριθμου είναι: "_ Ταξινόμηση των σημείων της κατανομής κατά x και y. Μια αποτελεσματική μεθοδολογία που οδηγεί σε γρήγορες και λίγες διερευνήσεις, είναι η δημιουργία ενός νοητού ορθογωνίου πλέγματος (βλ. Σχ.2) και η ένταξη του κάθε σημείου ανάλογα με τις συντεταγμένες του στο κατάλληλο επί μέρους ορθογώνιο. Στο εσωτερικό κάθε ορθογωνίου τα σημεία αρχικά ταξινομούνται ως προς x και αν κάποια σημεία έχουν το ίδιο y ταξινομούνται ως προς x (βλ. Σχ. 3). Τα βήματα του πλέγματος κατά x και y καθώς και ο μέσος αριθμός σημείων που αντιστοιχεί σε κάθε επί μέρους, ορθογώνιο, εξαρτώνται από τη μορφή και την πυκνότητα της τυχαίας κατανομής (βλ. Σχ. 3). 1. Επιλογή του ευθυγράμμου τμήματος-βάση από το οποίο θα ξεκινήσει η δημιουργία των τριγώνων. Η διερεύνηση των γειτονικών σημείων και το κλείσιμο των τριγώνων ξεκινά από το εσωτερικό της τυχαίας κατανομής. Ως αρχικό σημείο (το αντίστοιχο του σημείου 0 στο σχήμα 1) επιλέγεται εκείνο που βρίσκεται πλησιέστερα στο μέσο x και μέσο y της κατανομής. Ως πρώτη βάση επιλέγεται το ευθύγραμμο τμήμα που συνδέει το αρχικό σημείο με το πλησιέστερο. Από τα υπόλοιπα της κατανομής (τα σημεία Ο και 1 στο σχήμα 3). 27

Σχ. 1 Φαίνεται το ορθογώνιο πλέγμα, η ένταξη των σημείων στα ορθογώνια και η αρχική βάση της κατανομής 0-1. Η διαδικασία εύρεσης τόσο του αρχικού σημείου όσο και του πλησιέστερου σ' αυτό, γίνεται πολύ γρήγόρα εφόσον κάθε φορά διερευνώνται τα σημεία που ανήκουν μόνον στα κατάλληλα ορθογώνια. Πιο συγκεκριμένα, για τον εντοπισμό των δύο παραπάνω σημείων, η διερεύνηση θα ξεκινήσει από το ορθογώνιο που θα βρεθεί ότι περιέχει τη μέση τιμή των x και y (στο εσωτερικό ή στα όριά του) και θα συνεχιστεί εάν χρειαστεί στα ορθογώνια που συνορεύουν μ' αυτό. Έτσι, η διερεύνηση ποτέ δεν επεκτείνεται σε ολόκληρη την κατανομή των σημείων. 28

Σχ. 1 Φαίνεται η ταξινόμηση των σημείων σε κάθε επί μέρους ορθογώνιο 2. εντοπισμός για κάθε βάση του κατάλληλου γειτονικού σημείου, ώστε να κλείσει ένα τρίγωνο Delauny. Η διαδικασία όπως είπαμε ξεκινά από την πρώτη βάση, που επιλέγεται στο εσωτερικό της κατανομής. Για τη βάση αυτή, όπως και για τις επόμενες, ακολουθείται η παρακάτω μεθοδολογία. Με πόλο το αρχικό σημείο και βάση το ευθύγραμμο τμήμα που ορίστηκε στο προηγούμενο βήμα, σαρώνοντας κατά τη φορά των δεικτών του ωρολογίου ψάχνουμε να βρούμε την τρίτη κορυφή του τριγώνου. Είναι προφανές ότι εφόσον ο αλγόριθμος ψάχνει για το κοντινότερο κατά τη δεξιόστροφη φορά σημείο, λαμβάνονται υπ' όψη μόνον τα σημεία που βρίσκονται πάνω από το τμήμα-βάση (βλ. Σχ.2) Επομένως όλα τα ορθογώνια της ταξινόμησης που βρίσκονται κάτω από αυτή τη γραμμή αγνοούνται και τα σημεία που εντάχθηκαν σ αυτά δεν παίρνουν μέρος στη διερεύνηση. Έστω ότι η βάση είναι το τμήμα Α-Β του σχήματος 2 και πόλος το σημείο Β. Αρχικά θεωρούμε τον κύκλο με διάμετρο το τμήμα Α-Β και εντοπίζουμε τα σημεία της κατανομής που πέφτουν μέσα στον κύκλο. Προφανώς τέτοια σημεία θα βρίσκονται μόνο στα ορθογώνια ταξινόμησης που καλύπτονται από την επιφάνεια του κύκλου και βρίσκονται,πάνω από το τμήμα Α- Β. Εάν ένα μόνον από τα παραπάνω σημεία βρεθεί μέσα στον κύκλο, τότε το σημείο αυτό είναι η τρίτη κορυφή ενός τριγώνου Delauny. 29

Σχ. 3 Φαίνεται η κατανομή των σημείων στο ορθογώνιο και οι περιοχές που χρησιμοποιούνται στη διερεύνηση Εάν κανένα σημείο δε βρεθεί μέσα στον.. κύκλο, τότε θεωρούμε ένα δεύτερο κύκλο μεγαλύτερης ακτίνας στον οποίο η Α-Β είναι μια τυχαία χορδή. Εάν και πάλι δε βρεθεί κανένα σημείο πηγαίνουμε σε μεγαλύτερο κύκλο κοκ. Τα κέντρα των κύκλων αυτών βρίσκονται πάνω στη μέσο κάθετο του τμήματος ΑΒ, ενώ η ακτίνα τους αυξάνεται με βήμα που εξαρτάται από τη μορφή της κατανομής των σημείων. Είναι ευνόητο ότι κάθε φορά στις διερευνήσεις συμμετέχουν τα σημεία των ορθογωνίων που καλύπτονται από τους εκάστοτε κύκλους. Εάν σε κάποιον από τους παραπάνω κύκλους βρεθούν περισσότερα από ένα σημεία, επιλέγεται το κατάλληλο σύμφωνα με την εξής λογική: Όλα τα σημεία που ανήκουν στο εσωτερικό του συγκεκριμένου κύκλου σχηματίζουν με τα άκρα της βάσης γωνίες μεγαλύτερες από 90 (στο σχήμα 3 οι γωνίες α). Το γειτονικό κατά Voronoi της βάσης Α-Β, θα ήταν εκείνο που θα σχημάτιζε τη μεγαλύτερη αντικείμενη αμβλεία γωνία. Στο σχήμα 3 στον πρώτο κύκλο το σημείο αυτό είναι το 2. Εάν όλα τα σημεία εντοπιστούν πάνω στην περιφέρεια του κύκλου, οπότε και οι αντικείμενες γωνίες θα είναι όλες ίσες μεταξύ τους επιλέγεται σαν τρίτη κορυφή εκείνο που κατά το δεξιόστροφο σάρωμα συναντάται πρώτο. Στο σχήμα 3 μια τέτοια περίπτωση αποτελούν τα σημεία 11 και 12 στο δεύτερο κύκλο. Ως κορυφή επιλέγεται το 11. 3. Αλλαγή βάσης και εντοπισμός καινούργιας κορυφής. Ο πόλος Β και η πρώτη κορυφή που εντοπίστηκε αποτελούν την καινούργια βάση (η Β-2 στο σχήμα 15-12). Επαναλαμβάνεται και γι' αυτήν τη βάση το βήμα (3). 30

5. Επανάληψη του βήματος (3) και (4) μέχρι σαν κορυφή να αναπροσδιοριστεί η αρχική Α. Στο σημείο αυτό κλείνει το πολύγωνο του πόλου Β. 6. Επανάληψη των βημάτων (3), (4) και (5) για έναν καινούργιο πόλο. 7. Επανάληψη του βήματος (6) μέχρι να κλείσουν όλα τα τρίγωνα. Είναι απαραίτητο κάθε φορά που σχηματίζονται πλευρές τριγώνων, να καταχωρούνται σε κάποιο πίνακα. Πριν να δημιουργηθεί ένα καινούργιο τρίγωνο, ελέγχεται ο πίνακας, για να βρεθεί αν είναι ήδη οι πλευρές του καταχωρημένες. Ένα τρίγωνο γίνεται δεκτό μόνον εάν στον πίνακα δεν υπάρχουν καθόλου οι πλευρές του ή εάν έχουν καταχωρηθεί το πολύ μια φορά. Στην αντίθετη περίπτωση το τρίγωνο, απορρίπτεται και αναζητείται άλλη κορυφή.. Από τη στιγμή που θα δημιουργηθούν όλα τα τρίγωνα του δικτύου ο αλγόριθμος συνεχίζει με τον υπολογισμό και τη χάραξη των ισαριθμικών καμπυλών. Για τη δεύτερη αυτή φάση τα δεδομένα είναι: 1. Το σύνολο των τριγώνων που δημιουργήθηκαν στην προηγούμενη φάση 2. Οι τιμές Z του φαινομένου που μελετάται, σε κάθε κορυφή του δικτύου. 3. Η ισοδιάσταση των ισαριθμικών καμπύλων. Τα βήματα είναι τα ίδια με της προηγούμενης παραγράφου με τη διαφορά ότι αυτή τη φορά χρησιμοποιούνται οι πλευρές των τριγώνων για την παρεμβολή ανάμεσα στις τιμές του φαινομένου. Χρωματισμός Πολύγωνων Για να καλύψουμε τα πολύγωνα με επιφανειακό συμβολισμό που δίνονται σε ψηφιδωτή μορφή. Η χρήση αυτής της μεθοδολογίας απαιτεί, εκτός από τον ορισμό της παραμέτρου, την ύπαρξη ενός γνωστού εσωτερικού σημείου (seed). Αυτού του είδους η διαδικασία χρωματισμού, βρίσκει τις περισσότερες εφαρμογές της στη διαλογική (interactive)σχεδίαση, όπου συνήθως ένας χρήστης με τη βοήθεια μιας διαλογικής συσκευής (πχ. Ποντίκι) σχεδιάζει το περίγραμμα μιας επιφάνειας, επιλέγει ένα εσωτερικό σημείο του πολυγώνου και διαλέγει κάποιο χρώμα με το οποίο γεμίζει τη συγκεκριμένη επιφάνεια. 31

Μόλις οριστεί η περίμετρος και το εσωτερικό σημείο, ακολουθείται πάνω στο επίπεδο μια διαδρομή από εικονοψηφίδα σε εικονοψηφίδα με σκοπό να βρεθούν όλες οι εικονοψηφίδες που είναι προσεγγίσιμες από το αρχικό εσωτερικό σημείο, χωρίς η συγκεκριμένη διαδρομή να τέμνει πουθενά την πολυγωνική περίμετρο. Το μειονέκτημα όλων αυτών των τεχνικών είναι το ότι πρέπει από την αρχή να είναι γνωστό ένα εσωτερικό σημείο, για κάθε μια από τις επιφάνειες που πρόκειται να χρωματιστούν. Τα δεδομένα που είναι απαραίτητα για το ψάξιμο του εσωτερικού των πολύγωνων είναι τα εξής: 1. Οι συντεταγμένες του αρχικού εσωτερικού σημείου 2. Το χρώμα κάλυψης του πολυγώνου 3. Το χρώμα της περιμέτρου του πολυγώνου Η διαδικασία ξεκίνα από τη θέση του γνωστού εσωτερικού σημείου και εξετάζονται οι γειτονικές εικονοψηφίδες για να βρεθεί εάν έχουν το χρώμα των εικονοψηφίδες της περιμέτρου ή όχι. Εάν δεν έχουν το χρώμα της περιμέτρου, αυτό σημαίνει ότι είναι εσωτερικές και τότε βάφονται με το χρώμα που επιλέχτηκε για το χρωματισμό της πολυγωνικής επιφάνειας. Στο σχήμα 1 φαίνονται δύο μεθοδολογίες προσέγγισης, δηλαδή δύο διαφορετικά κριτήρια σύνδεσής του αρχικού σημείου με τις γειτονικές εικονοψηφίδες. Στο σχήμα 1 προσεγγίζονται και εξετάζονται τέσσερις γειτονικές εικονοψηφίδες και συγκεκριμένα αυτές που είναι ακριβώς πάνω, κάτω, (α) (β) 32

σχήμα 1 δύο μέθοδοι προσέγγισης γειτονικών εικονοψηφίδων αριστερά και δεξιά του αρχικού σημείου. Στο σχήμα 1 προσεγγίζονται οκτώ γειτονικές εικονοψηφίδες, που είναι οι τέσσερις προηγούμενες και επί πλέον οι τέσσερις διαγώνιες. Ένας απλός τρόπος για τον χρωματισμό του εσωτερικού ενός πολυγώνου βασίζεται στη συνάφεια (coherence) των pixel που καλύπτει. Μια περιοχή γειτονικών pixel ενός συγκεκριμένου pixel (x,y) μπορεί να θεωρηθεί ότι αποτελείται ή από τα τέσσερα πλησιέστερα δηλ. (x+1,y), (x-1,y)(x,y+1) και (x,y-1)(4-connected) (στο παραπάνω σχήμα) ή από τα οκτώ πλησιέστερα δηλ. τα προηγούμενα 4 και τα 4 πλησιέστερα διαγώνια δηλ. (x-1,y-1), (x+1,y+1) και (x- 11,y+1) (8-connected), στο παραπάνω σχήμα. Από τον τρόπο επιλογής των γειτονικών σημείων, εξαρτάται και η δυνατότητα του αλγορίθμου να χρωματίσει τις διάφορες μορφές των πολυγωνικών επιφανειών. Στο σχήμα2 φαίνεται μια περίπτωση πολύ απλής επιφάνειας, που όμως δεν μπορεί να χρωματιστεί με τη χρήση της πρώτης μεθοδολογίας προσέγγισης γειτονικών εικονοψηφίδων. Εικονοψηφίδες περιμέτρου 1 Βάφεται μόνον μια εικονοψηφίδα 4 3 2 Αρχική εικοψηφίδα (α) (β) σχήμα 2 33

η αρχική εικονοψηφίδα βάφεται με το επιλεγμένο χρώμα για το εσωτερικό του πολυγώνου και αμέσως διερευνώνται οι τέσσερις γειτονικές που στο σχήμα έχουν τους αριθμούς 1,2,3 και 4. Οι εικονοψηφίδες όμως αυτές έχουν το χρώμα της περιμέτρου του πολυγώνου και επομένως καμία τους δεν είναι εσωτερική. Αναγκαστικά λοιπόν, ο αλγόριθμος σταματά εδώ και η υπόλοιπη επιφάνεια δε χρωματίζεται. Προφανώς η διερεύνηση των οκτώ γειτονικών θα είχε σαν αποτέλεσμα το χρωματισμό αυτού του πολυγώνου. Συχνά για οικονομία σε μνήμη αλλά και σε χρόνο στον ηλεκτρονικό υπολογιστή, χρησιμοποιούνται και άλλες μέθοδοι, που χρωματίζουν τη γραμμή σάρωσης στην οποία ανήκει το αρχικό σημείο αντί να εξετάζουν τα γύρω γειτονικά. Σ αυτές τις περιπτώσεις ο αλγόριθμος ξεκινά από το αρχικό σημείο και προχωρά προς τα αριστερά, μέχρι να εντοπίσει κάποια εικονοψηφίδα που ανήκει στην περίμετρο του πολυγώνου. Το ίδιο γίνεται πάνω στη γραμμή σάρωσης και προς τα δεξιά. Στη συνέχεια χρωματίζεται η επόμενη προς τα κάτω γραμμή μέχρι να βρεθεί το κατώτατο άκρο της περιμέτρου. Η ίδια διαδικασία επαναλαμβάνεται και για το άλλο μισό της επιφάνειας που βρίσκεται πάνω από το αρχικό σημείο (σχήμα 3). Είναι βέβαια εμφανές, ότι Αρχικό εσωτερικό σημείο Εσωτερικά σημεία B A C E D Σχήμα 3 αρχικά χρωματίζεται το κάτω μέρος του πολυγώνου (συνεχείς γραμμές )και στη συνέχεια το επάνω (διακεκομμένες ). Επειδή το πολύγωνο είναι μη κυρτό φαίνονται και άλλα σημεία που επιλέχτηκαν για αρχικά εσωτερικά για τη συνέχιση της διαγράμμισης. 34

ένας τέτοιος αλγόριθμός δε μπορεί να χρησιμοποιηθεί για το χρωματισμό μιας μη κυρτής πολυγωνικής επιφάνειας. Για να δουλέψουν αυτές οι μέθοδοι για όλων των ειδών τις επιφάνειες, χρησιμοποιούνται περισσότερα από ένα αρχικά εσωτερικά σημεία. Τα σημεία αυτά επιλέγονται κοντά στα ελάχιστα και στα μέγιστα της πολυγωνικής περιμέτρου όπως φαίνεται και στο σχήμα 3.Στον αλγόριθμο αυτό δίνεται στην είσοδο ένα εσωτερικό σημείο εκκίνησης (x,y) του πολυγώνου, το χρώμα της περιμέτρου και το χρώμα με το οποίο θέλουμε να χρωματίσουμε το πολύγωνο. Ξεκινώντας από το αρχικό σημείο (x,y) μεταχρωματίζουμε τα εσωτερικά σημεία του πολυγώνου εκμεταλλευόμενοι τη συνάφεια των 4 ή 8 πλησιέστερων γειτονικών σημείων. Ο αλγόριθμος δουλεύει αναδρομικά και η αναδρομή διακόπτεται όταν φτάσουμε σε ένα pixel, που ή έχει το χρώμα της περιμέτρου ή το έχουμε ήδη μεταχρωματίσει. Το πρόγραμμα για την περιπτώσει των 4 γειτονικών σημείων είναι: Boundary_fill (x,y,fill_colour,bound_colour) Int x,y, fill_colour,bound_colour; { int current_colour,boumd_colour; current_colour=get_colour(x,y); /* η get_colour επιστρέφει το χρώμα του pixel(x,y)*/ if (( current_colour!=bound_colour)&& (current_colour!=fill_colour)) {setpixel(x,y,fill_colour); boumdary_fill(x+1,y,fill_colour,bound_colour) ; boumdary_fill(x-1,y,fill_colour,bound_colour) ; boumdary_fill(x,y+1,fill_colour,bound_colour) ; boumdary_fill(x,y-1,fill_colour,bound_colour) ; } } ανάλογα με τη μορφή των πολυγώνων της εφαρμογής επιλέγεται ο αντίστοιχος αλγόριθμος των 4 ή 8 γειτονικών σημείων. 35

Γέμισμα με βάση το υπάρχον χρώμα (interior fill) Η μόνη διαφορά από τον προηγούμενο αλγόριθμο είναι ότι αντί για το χρώμα της περιμέτρου δίνεται στην είσοδο το υπάρχον εσωτερικό χρώμα του πολυγώνου και επομένως η αναδρομή σταματάει όταν φτάσουμε σε ένα pixel που δεν έχει το χρώμα αυτό. Στο πρόγραμμα η παράμετρος bound_color μπορεί να μετονομαστεί σε interior_color και η μόνη αλλαγή που χρειάζεται να γίνει στον κώδικα είναι η μετατροπή της συνθήκης σε if (current_color==interior_color_. Οι παραπάνω αλγόριθμοι έχουν το μειονέκτημα ότι για κάθε pixel που χρωματίζεται γίνονται 4 ή 8 αναδρομικές κλήσεις με συνέπεια να έχουν χαμηλή ταχύτητα και εύκολα να τελειώνει ο χώρος στοίβας του υπολογιστή. 36

ΠΡΑΚΤΙΚΟ ΜΕΡΟΣ 37

ΚΕΦΑΛΑΙΟ 5 Μέθοδοι γραφικών Τα βασικά της σχεδίασης Σχεδίαση γραμμών Χρήση του ορίσματος χρώμα Σχεδίαση ορθογωνίων Σχεδίαση κύκλων Σχεδίαση ελλείψεων Καθορισμός του πάχους των γραμμών Καθορισμός συνεχών ή διακεκομμένων γραμμών Στυλ συνεχούς και εσωτερικής συνεχούς γραμμής Χρήση της συνάρτησης RGB Η εργασία μου ΜΕΘΟΔΟΙ ΓΡΑΦΙΚΩΝ Οι μέθοδοι γραφικών είναι κατάλληλες για τις περιπτώσεις όπου η χρήση χειριστηρίων γραφικών απαιτεί περισσότερο κόπο. Για παράδειγμα, η σχεδίαση γραμμών πλέγματος σε ένα γράφημα θα απαιτούσε τη χρήση ενός πίνακα χειριστηρίων Line, ενώ μπορεί να γίνει με λίγο μόνο κώδικα που θα καλεί τη μέθοδο Line. Η παρακολούθηση των θέσεων των χειριστηρίων Line σε ένα πίνακα καθώς η φόρμα αλλάζει μέγεθος είναι πιο επίμονη από την απλή επανασχεδίαση των γραμμών με τη μέθοδο Line. Για παράδειγμα, αν θέλετε να εμφανίσετε προσωρινά κάποιο οπτικό εφέ σε μια φόρμα, όπως μια λωρίδα χρώματος σε ένα πλαίσιο διαλόγου About, μπορείτε να 38

γράψετε λίγες γραμμές κώδικα για να δημιουργήσετε αυτό το προσωρινό εφέ αντί να χρησιμοποιήσετε κάποιο επιπλέον χειριστήριο. Οι μέθοδοι γραφικών προσφέρουν ορισμένα οπτικά εφέ τα οποία δεν είναι διαθέσιμα στα χειριστήρια γραφικών. Για παράδειγμα, με τις μεθόδους γραφικών μπορείτε να σχεδιάσετε ανοιχτά τόξα ή να χρωματίσετε ξεχωριστά πίξελ. Τα γραφικά που δημιουργείται με αυτές τις μεθόδους, εμφανίζονται στη φόρμα σε μια ξεχωριστή στρώση. Η στρώση αυτή βρίσκεται πίσω από τα υπόλοιπα χειριστήρια της φόρμας, επομένως η χρήση μεθόδων γραφικών είναι κατάλληλη όταν θέλετε να δημιουργήσετε γραφικά τα οποία θα εμφανίζονται πίσω από τα υπόλοιπα αντικείμενα της εφαρμογής σας. ΤΑ ΒΑΣΙΚΑ ΤΗΣ ΣΧΕΔΙΑΣΗΣ ΜΑ ΤΙΣ ΜΕΘΟΔΟΥΣ ΓΡΑΦΙΚΩΝ Οι μέθοδοί γραφικών σας επιτρέπουν να σχεδιάζετε διάφορα σχήματα σε φόρμες, σε πλαίσια εικόνων, ή στο αντικείμενο Printer. Για να καθορίσετε που θα σχεδιαστούν τα γραφικά, τοποθετήστε το όνομα της φόρμας ή του πλαισίου εικόνας πριν από το όνομα της μεθόδου γραφικών. Αν παραλείψετε το αντικείμενο, Visual Basic θα υποθέσει ότι θέλετε να δημιουργήσετε το γραφικό στη φόρμα που περιέχει τον κώδικα. Για παράδειγμα, οι επόμενες εντολές σχεδιάζουν ένα σημείο: Σε μια φόρμα με όνομα My Form MyForm.Pset(500,500) Σε ένα πλαίσιο εικόνας με όνομα picpicture1 picpicture1.pset(500,500) Στην τρέχουσα φόρμα PSet(500,500) Κάθε περιοχή σχεδίασης έχει το δικό της σύστημα συντεταγμένων, το οποίο καθορίζει και τις μονάδες σχεδίασης. Επιπλέον, κάθε περιοχή σχεδίασης έχει το δικό της πλήρες σύνολο ιδιοτήτων γραφικών. 39

ΣΧΕΔΙΑΣΗ ΓΡΑΜΜΩΝ Για να σχεδιάσετε μια γραμμή μεταξύ δύο σημείων, χρησιμοποιήστε την απλή μορφή της μεθόδου Line. Η σύνταξή της είναι: [αντικείμενο.]line[(x1,y1)] (x2,y2)], χρώμα] Το όρισμα αντικείμενο είναι προαιρετικό αν το παραλείψετε, η μέθοδος θα σχεδιάσει μια γραμμή στη φόρμα στην οποία ανήκει ο κώδικας (στην τρέχουσα φόρμα). Το πρώτο ζεύγος συντεταγμένων είναι επίσης προαιρετικό. Όπως ισχύει γενικά για τις τιμές συντεταγμένων, τα ορίσματα x και y μπορεί να είναι είτε ακέραιοι είτε πραγματικοί αριθμοί. Για παράδειγμα, η επόμενη εντολή σχεδιάζει μια διαγώνια γραμμή στην τρέχουσα φόρμα: Line (500,500)-(2000,2000) Η Visual Basic δεν σχεδιάζει το τελευταίο σημείο της γραμμής. Η συμπεριφορά αυτή είναι βολική όταν θέλετε να σχεδιάσετε ένα κλειστό σχήμα. Για να σχεδιάσετε και το τελευταίο σημείο χρησιμοποιήστε την εντολή Pset με τη σύνταξη : Pset[Step](0,0)[,χρώμα] Το πρώτο ζεύγος συντεταγμένων (x1,y1) στη σύνταξη της μεθόδου Line είναι προαιρετικό. Αν παραλείψετε αυτές τις συντεταγμένες, η Visual Basic χρησιμοποιεί στη θέση τους τις τρέχουσες συντεταγμένες σχεδίασης του αντικειμένου. Η τρέχουσα θέση σχεδίασης μπορεί να οριστεί μέσω των ιδιοτήτων CurrentX και CurrentY, διαφορετικά ορίζεται από το τελευταίο σημείο που σχεδιάστηκε από την αμέσως προηγούμενη μέθοδος γραφικών ή από τη μέθοδο Print. Αν δεν έχετε χρησιμοποιήσει κάποια μέθοδο γραφικών ή τη μέθοδο Print, ή αν δεν έχετε ορίσει ρητά τις τιμές των ιδιοτήτων CurrentX και CurrentY, η προεπιλεγμένη θέση σχεδίασης θα είναι η αριστερή επάνω γωνία του αντικειμένου. Για παράδειγμα, οι επόμενες εντολές σχεδιάζουν ένα τρίγωνο συνδέοντας τρία σημεία. / καθορισμός συντεταγμένης x του πρώτου σημείου. CurrentX=1500 40

/ καθορισμός συντεταγμένης y του πρώτου σημείου. CurrentY=500 /Σχεδίαση γραμμής προς τα κάτω και δεξιά /από το πρώτο σημείο. Line (3000,2000) /σχεδίαση γραμμής προς τα αριστερά του τρέχοντος σημείου. Line (1500,2000) /σχεδίαση γραμμής προς τα πάνω, μέχρι το αρχικό σημείο. Line (1500,500) Το αποτέλεσμα αυτών των εντολών φαίνεται στην Εικόνα. 1 Οι μέθοδοι Pset, Line, και Circle, καθορίζουν ένα ή περισσότερα σημεία χρησιμοποιώντας τη σύνταξη: (x,y) Πριν από κάθε τέτοιο ζεύγος συντεταγμένων μπορείτε να τοποθετήσετε τη λέξηκλειδί Step για να ορίσετε ότι η συγκεκριμένη θέση είναι σχετική προς το προηγούμενο σημείο που σχεδιάστηκε. Η Visual Basic προσθέτει τις τιμές των x και y στις συντεταγμένες του τελευταίου σημείου που σχεδιάστηκε. Για παράδειγμα, η εντολή: Line(100,200)-(150,250) Είναι ισοδύναμη με την εντολή: Line (100,200)-Step(50,50) Σε πολλές περιπτώσεις, η λέξη-κλειδί Step σας απαλλάσσει από την ανάγκη να παρακολουθείτε συνεχώς το τελευταίο σημείο που σχεδιάστηκε. Άλλωστε, πολύ συχνά θα σας ενδιαφέρει περισσότερο η σχετική θέση ενός σημείου ως προς ένα άλλο, παρά οι απόλυτες συντεταγμένες τους. 41

ΧΡΗΣΗ ΤΟΥ ΟΡΙΣΜΑΤΟΣ ΧΡΩΜΑ Για να καθορίσετε το χρώμα μιας γραμμής, μπορείτε να χρησιμοποιήσετε με τις μεθόδους γραφικών το προαιρετικό όρισμα χρώμα. Για παράδειγμα, η επόμενη εντολή σχεδιάζει μια σκούρα μπλε γραμμή: Line(500,500)-(2000,2000), RGB(0,0,255) Αν παραλείψετε το όρισμα χρώμα, η γραμμή θα σχεδιαστεί στο χρώμα που καθορίζεται από την ιδιότητα ForeColor του αντικειμένου στο οποίο γίνεται η σχεδίαση. ΣΧΕΔΙΑΣΗ ΟΡΘΟΓΩΝΙΩΝ Με τη μέθοδο Line μπορείτε να σχεδιάζετε πλαίσια και να τα γεμίζετε με χρώμα. Το επόμενο παράδειγμα σχεδιάζει ένα πλαίσιο του οποίου η επάνω αριστερή γωνία βρίσκεται στις συντεταγμένες (500,500) και οι πλευρές του έχουν μήκος 1.000 twip: Line (500,500)-Step(1000,0) Line Step(0,1000) Line Step(-1000,0) Line Step(0,-1000) Όμως, για να σχεδιάσετε ένα ορθογώνιο στη Visual Basic υπάρχει ένας πολύ πιο απλός τρόπος. Όταν χρησιμοποιείτε την επιλογή Β με τη μέθοδο Line, η Visual Basic σχεδιάζει ένα ορθογώνιο τοποθετώντας τις δύο απέναντι γωνίες του στις συντεταγμένες που έχετε καθορίσει. Επομένως, θα μπορούσατε να αντικαταστήσετε τις τέσσερις εντολές του προηγούμενου παραδείγματος με αυτήν: Line (500,500)- Step(1000,1000),,B Παρατηρήστε ότι πριν από την επιλογή Β, χρησιμοποιήσατε δύο κόμματα αυτό το κάναμε για να δείξουμε ότι το όρισμα χρώμα έχει παραληφθεί. 42

ΟΙ ΙΔΙΟΤΗΤΕΣ FILLSTYLE ΚΑΙ FILLCOLOR Αν δεν αλλάξετε τη ρύθμιση της ιδιότητας FillStyle (Στυλ γεμίσματος), θα σχεδιάζεται μόνο το περίγραμμα του ορθογωνίου. (Το ορθογώνιο γεμίζεται σύμφωνα με τις προεπιλεγμένες ρυθμίσεις, όμως η προεπιλεγμένη τιμή της FillStyle είναι η 1-Transparent - Διαφανές.) Αν δώσετε στην ιδιότητα FillStyle την τιμή 0, το εσωτερικό του ορθογωνίου θα πάρει το χρώμα που καθορίζεται στην ιδιότητα Fil1Color (Χρώμα γεμίσματος). Ένας άλλος τρόπος για να γεμίσετε ένα ορθογώνιο είναι να χρησιμοποιήσετε την επιλογή F αμέσως μετά την επιλογή Β. (Η επιλογή F δεν μπορεί να χρησιμοποιηθεί χωρίς την Β.) Όταν χρησιμοποιείτε αυτή την επιλογή, η μέθοδος Line παραβλέπει τις ρυθμίσεις των ιδιοτήτων Fil1Color και FillStyle. Όποτε χρησιμοποιείτε την επιλογή F το ορθογώνιο σχεδιάζεται πάντα με συμπαγές γέμισμα. Η επόμενη εντολή σχεδιάζει ένα ορθογώνιο και το γεμίζει με συμπαγές μοτίβο, χρησιμοποιώντας το χρώμα προσκηνίου (ForeColor): Line (500, 500) -Step( 1000, 1000),, BF Μπορείτε να δείτε το αποτέλεσμα αυτής της εντολής στην Εικόνα 1 Εικόνα 1 Ένα πλαίσιο γεμισμένο με συμπαγές μοτίβο 43

ΣΧΕΔΙΑΣΗ ΚΥΚΛΩΝ Η μέθοδος Circle σας επιτρέπει να σχεδιάζετε μια ποικιλία κυκλικών και ελλειπτικών (οβάλ) σχημάτων. Επιπλέον, η μέθοδος Circle σχεδιάζει τόξα (τμήματα κύκλων) καθώς και κυκλικούς τομείς. Μπορείτε να δημιουργήσετε διάφορα είδη καμπύλων γραμμών χρησιμοποιώντας παραλλαγές της μεθόδου Circle. Για τη σχεδίαση ενός κύκλου, η Visual Basic χρειάζεται τη θέση του κέντρου του και το μήκος της ακτίνας του. Η σύνταξη της μεθόδου για τη δημιουργία ενός κανονικού κύκλου είναι: [αντικείμενο.]cίrcle [Step](x,y), ακτίνα[, χρώμα] Οι αγκύλες δείχνουν ότι τόσο το όρισμα αντικείμενο όσο και η λέξη-kλεδί Step είναι προαιρετικά. Αν δεν συμπεριλάβετε το όρισμα αντικείμενο, για τη σχεδίαση θα χρησιμοποιηθεί η τρέχουσα φόρμα. Τα ορίσματα x και y είναι οι συντεταγμένες του κέντρου του κύκλου, ενώ το όρισμα ακτίνα αντιστοιχεί στην ακτίνα του κύκλου. Η επόμενη εντολή σχεδιάζει έναν κύκλο του οποίου το κέντρο βρίσκεται στη θέση (1200,1000) ενώ το μήκος της ακτίνας του είναι 750: Circle (1200, 1000), 750 ΣΧΕΔΙΑΣΗ ΕΛΛΕΙΨΕΩΝ Ο λόγος των διαστάσεων ενός κύκλου καθορίζει αν ο κύκλος αυτός θα είναι απόλυτα στρογγυλός (κύκλος) ή αν θα είναι μακρόστενος (έλλειψη). Η πλήρης σύνταξη της μεθόδου Circle είναι: 44

[αντικείμενο.]cίrcle [Step](x, y), ακτίνα, [χρώμα], [αρχή], [τέλος][, λόγος] Τα ορίσματα αρχή και τέλος είναι προαιρετικά, αλλά ακόμη και αν τα παραλείψετε θα πρέπει να πληκτρολογήσετε τα κόμματα που τα χωρίζουν. Για παράδειγμα, αν συμπεριλάβετε τα ορίσματα ακτίνα και λόγος, αλλά όχι και τα χρώμα, αρχή, και τέλος, θα πρέπει να προσθέσετε στην εντολή τέσσερα διαδοχικά κόμματα για να δείξετε ότι έχετε παραλείψει τρία ορίσματα. Circle (1000, 1000), 500,,,, 2 Το όρισμα λόγος καθορίζει το λόγο της κατακόρυφης προς την οριζόντια διάσταση της έλλειψης. Ο λόγος είναι θετικός αριθμός κινητής υποδιαστολής. Αυτό σημαίνει ότι μπορείτε να χρησιμοποιήσετε ακέραιες ή κλασματικές τιμές, αλλά όχι αρνητικές. Αν στο όρισμα λόγος δώσετε μια μεγάλη τιμή, η έλλειψη θα σχεδιαστεί "τεντωμένη" προς τον κατακόρυφο άξονα, ενώ αν η τιμή του είναι μικρή, η έλλειψη θα σχεδιαστεί "τεντωμένη" κατά τον οριζόντιο άξονα. Επειδή μια έλλειψη στην πραγματικότητα έχει δύο ακτίνες - μία οριζόντια κατά τον άξονα χ και μία κατακόρυφη κατά τον άξονα Υ - η Visual Basic εφαρμόζει το όρισμα ακτίνα της εντολής Circle στον άξονα κατά τον οποίο σχεδιάζεται η μεγάλη ακτίνα. Αν το όρισμα λόγος έχει τιμή μικρότερη της μονάδας, τότε το όρισμα ακτίνα αντιστοιχεί στον άξονα χ' αν το όρισμα λόγος είναι μεγαλύτερο ή ίσο της μονάδας, το όρισμα ακτίνα αναφέρεται στον κατακόρυφο άξονα. Σημείωση Το όρισμα λόγος ορίζει πάντα τον πραγματικό λόγο της κατακόρυφης προς την οριζόντια διάσταση. Για να εξασφαλιστεί ότι αυτό θα ισχύει πάντα (ακόμη και όταν έχετε ενεργοποιήσει κάποια δική σας προσαρμοσμένη κλίμακα) η ακτίνα της έλλειψης εκφράζεται σε μονάδες του οριζόντιου άξονα. Η επόμενη διαδικασία δείχνει πώς οι διαφορετικές τιμές του ορίσματος λόγος καθορίζουν αν το όρισμα ακτίνα θα αναφέρεται στον οριζόντιο ή στον κατακόρυφο άξονα: 45

Private Sub Form_Click () Σχεδiαοη ουμπαυούς έλλειψης. FillStyle = Ο Circle (600, 1000), 800,,,, 3 Σχεδiαοη κενής έλλειψης. FillStyle = 1 Circle (1800, 1000), 800,,,, 1 Ι 3 End Sub Το αποτέλεσμα του προηγούμενου παραδείγματος φαίνεται στην Εικόνα 1 ΕΙΚΟΝΑ 1 ΕΛΛΕΙΨΕΙΣ ΠΟΥ ΕΧΟΥΝ ΣΧΕΔΙΑΣΤΕΙ ΜΕ ΤΗ ΜΕΘΟΔΟ CIRCLE ΚΑΘΟΡΙΣΜΟΣ ΤΟΥ ΠΑΧΟΥΣ ΤΩΝ ΓΡΑΜΜΩΝ Η ιδιότητα DravWίdth καθορίζει το πάχος των γραμμών που σχεδιάζονται με τις μεθόδους γραφικών. Η ιδιότητα ΒοrderWidth καθορίζει το πάχος του περιγράμματος των χειριστηρίων γραμμής (Line) και σχήματος (Shape). Η επόμενη διαδικασία σχεδιάζει γραμμές με διαφορετικά πάχη. Private Sub Form Click () DrawWidth=1 46

Li ne (100, 1000) - ( 3 000, 1 000) DrawWidth=5 Line (100, 1500) -( 3000, 1500) DrawWidth = 8 Li ne (1 00, 2 000) - ( 3 000, 2 000 ) End Sub Τα αποτελέσματα της εκτέλεσης αυτού του κώδικα φαίνονται στην Εικόνα 1. Η Εικόνα 2 δείχνει τρία χειριστήρια Shape με διαφορετικές τιμές για την ιδιότητα BorderWidth. ΕΙΚΟΝΑ 1 ΤΑ ΑΠΟΤΕΛΕΣΜΑΤΑ ΤΗΣ ΑΛΛΑΓΗΣ ΤΗΣ ΙΔΙΟΤΗΤΑΣ DRAWWIDTH ΕΙΚΟΝΑ 2 ΤΑ ΑΠΟΤΕΛΕΣΜΑΤΑ ΤΗΣ BORDERWIDTH ΑΛΛΑΓΗΣ ΤΗΣ ΙΔΙΟΤΗΤΑΣ 47

ΚΑΘΟΡΙΣΜΟΣ ΣΥΝΕΧΩΣ Η ΔΙΑΚΕΚΟΜΜΕΝΩΝ ΓΡΑΜΜΩΝ Η ιδιότητα DrawStyle καθορίζει αν οι γραμμές που σχεδιάζονται με τις μεθόδους γραφικών θα είναι συνεχείς ή διακεκομμένες. Η ιδιότητα BorderStyle των χειριστηρίων σχημάτων (Shape) εξυπηρετεί τον ίδιο σκοπό, αλλά εφαρμόζεται και σε αρκετά άλλα αντικείμενα. Σημείωση Η ιδιότητα BorderStyle των χειριστηρίων σχημάτων εξυπηρετεί διαφορετικούς σκοπούς και χρησιμοποιεί διαφορετικές ρυθμίσεις από την ιδιότητα BorderStyle άλλων αντικειμένων. Η ιδιότητα BorderStyle των χειριστηρίων σχημάτων και γραμμών χρησιμοποιείται όπως και η ιδιότητα DrawStyle που περιγράφουμε σε αυτήν την ενότητα. Για τις φόρμες και τα υπόλοιπα χειριστήρια, η ιδιότητα BorderStyle καθορίζει αν το χειριστήριο ή η φόρμα θα έχει περίγραμμα, καθώς και αν το περίγραμμα αυτό θα είναι σταθερό ή αν ο χρήστης θα μπορεί να αλλάξει το μέγεθός του. ΣΤΥΛ ΣΥΝΕΧΟΥΣ ΚΑΙ ΕΣΩΤΕΡΙΚΗΣ ΣΥΝΕΧΟΥΣ ΓΡΑΜΜΗΣ Το στυλ εσωτερικής συνεχούς γραμμής (DrawStyle = 6 ή BorderStyle = 6) είναι σχεδόν ταυτόσημο με το στυλ συνεχούς γραμμής. Και τα δύο αυτά στυλ δημιουργούν συνεχείς γραμμές. Η διαφορά μεταξύ αυτών των δύο ρυθμίσεων γίνεται ορατή όταν χρησιμοποιείτε μια παχιά γραμμή για να σχεδιάσετε ένα ορθογώνιο ή ένα χειριστήριο σχήματος. Σε αυτές τις περιπτώσεις, με το στυλ συνεχούς γραμμής η γραμμή σχεδιάζεται η μισή έξω και η μισή μέσα από το περίγραμμα του ορθογωνίου ή του σχήματος. Με το στυλ εσωτερικής συνεχούς γραμμής, η γραμμή σχεδιάζεται ολόκληρη μέσα από το περίγραμμα του ορθογωνίου ή του χειριστηρίου σχήματος. Η επόμενη διαδικασία παρουσιάζει όλες τις υποστηριζόμενες ρυθμίσεις της ιδιότητας DrawStyle χρησιμοποιώντας ένα βρόχο στον οποίο η ιδιότητα παίρνει διαδοχικά τις τιμές από 0 ως 6. Τα αποτελέσματα αυτού του κώδικα φαίνονται στην 48

Εικόνα 1. Private Sub Form_Click ( ) Dim Ι As Iηteger, Υ As Loηg For Ι = 0 Το 6 DrawStyl e = Ι Υ = (200 * Ι) + 1000 Liηe (2 00, Υ) - ( 2400, Υ) Next Ι End Sub ΧΡΗΣΗ ΤΗΣ ΣΥΝΑΡΤΗΣΗΣ RGB Μπορείτε να χρησιμοποιήσετε τη συνάρτηση RGB για να καθορίσετε οποιοδήποτε χρώμα. Για να καθορίσετε ένα χρώμα με τη συνάρτηση RGB 1. Καταχωρίστε μια τιμή από Ο έως 255 για καθένα από τα βασικά χρώματα (κόκκινο, πράσινο, και μπλε). Η τιμή Ο αντιστοιχεί στην ελάχιστη ένταση του χρώματος, ενώ η 255 αντιστοιχεί στη μέγιστη. 2. Χρησιμοποιήστε αυτούς τους τρεις αριθμούς ως είσοδο για τη συνάρτηση RGB, ακολουθώντας τη σειρά κόκκινο-πράσινο-μπλε. 3. Αναθέστε την τιμή που επιστρέφει η συνάρτηση σε μια ιδιότητα ή σε ένα όρισμα χρώματος. 49

Κάθε ορατό χρώμα μπορεί να παραχθεί με το συνδυασμό ενός η περισσοτέρων από τα τρία βασικά χρώματα. Για παράδειγμα: ΠΡΑΣΙΝΟ χρώμα για το φόντο. Fοrm1. Βack Cο1οr = RG Β ( Ο, 12 8, Ο) ΚΙΤΡΙΝΟ χρώμα για τ ο φόντο. Fοrm2. Βack Cο1οr = RG Β ( 255, 255, Ο ) ΣΧΕΔΙΑΣΗ σημείου με σκούρο μπλε χρώμα. PSet (100, 100), RGB( Ο, Ο, 64) Η ΔΙΚΙΑ ΜΟΥ ΕΡΓΑΣΙΑ Η δικιά μου εργασία περιέχει ένα σχέδιο με αναπτύξει κώδικα της Visual Basic, και μετακινώ τα αντικείμενα δεξιά αριστερά και πάνω κάτω ανάλογα με της τιμές που δίνει ο χρήστης. Παρακάτω εξηγώ το κώδικα της εργασία μου. Option Explicit Public Sub Text1_Click() Dim a As Single, b As Single a = Val(txtnum1.Text) ScaleLeft = a b = Val(txtnum2.Text) //εδώ έχω φτιάξει τα δυο TetxtBox που θα βάλει τις τιμές ο χρήστης End Sub Public Sub DrawPicture(obj As Object) 50

Form1.BackColor = vbblack //εδώ έχω βάλει χρώμα στην φόρμα //παρακάτω παίρνει τις τιμές που έχει βάλει ο χρήστης για να μετακινηθεί το συγκεκριμένο αντικείμενο ScaleLeft = Val(txtnum1.Text) ScaleTop = Val(txtnum2.Text) If (Option1.Value = True) Then ScaleLeft = Val(txtnum1.Text) ScaleTop = Val(txtnum2.Text) //παρακάτω σχεδιάζω τον ένα άγγελο obj.line (12000, 1700)-Step(-600, 500), &H42FBFB obj.line (12000, 1700)-Step(650, 0), &H42FBFB obj.line (12650, 1700)-Step(680, 750), &H42FBFB obj.line (13340, 2430)-Step(0, 650), &H42FBFB obj.line (13340, 3050)-Step(-100, 150), &H42FBFB obj.line (13260, 3150)-Step(0, 280), &H42FBFB obj.line (13160, 3400)-Step(100, 0), &H42FBFB obj.line (13160, 3410)-Step(0, 350), &H42FBFB obj.line (13160, 3750)-Step(-300, 250), &H42FBFB obj.line (12420, 4000)-Step(450, 0), &H42FBFB obj.line (12420, 4000)-Step(-300, 300), &HA7C1E9 obj.line (12150, 4300)-Step(300, 300), &HA7C1E9 51

obj.line (12450, 4600)-Step(0, 200), &HA7C1E9 obj.line (12450, 4800)-Step(200, 0), &HA7C1E9 obj.line (12630, 4800)-Step(0, 200), &HA7C1E9 obj.line (12530, 4900)-Step(100, 100), &HA7C1E9 obj.line (12500, 4900)-Step(0, 300), &HA7C1E9 obj.line (12300, 5200)-Step(200, 0), &HA7C1E9 obj.line (12300, 5200)-Step(0, 200), &HA7C1E9 obj.line (12300, 5400)-Step(-400, -100), &HA7C1E9 obj.line (11900, 5300)-Step(-200, 400), &HA7C1E9 obj.line (11700, 5700)-Step(200, 100), &HA7C1E9 obj.line (11900, 5700)-Step(0, 250), &HA7C1E9 obj.line (11900, 5950)-Step(200, 0), &HA7C1E9 obj.line (12100, 5950)-Step(150, 100), &HA7C1E9 obj.line (12250, 6050)-Step(200, 0), &H2ECFD8 obj.line (12100, 5950)-Step(50, 200), &HA7C1E9 obj.line (12300, 6050)-Step(50, 0), &HA7C1E9 obj.line (12150, 6150)-Step(600, 0), &HA7C1E9 obj.line (12750, 6150)-Step(300, 200), &HA7C1E9 obj.line (13050, 6350)-Step(-300, 500), &HA7C1E9 obj.line (12250, 6850)-Step(500, 0), &H2ECFD8 obj.line (12250, 6660)-Step(0, 200), &HA7C1E9 obj.line (12250, 6660)-Step(200, 0), &HA7C1E9 obj.line (12450, 6660)-Step(0, 200), &HA7C1E9 obj.line (12250, 6660)-Step(-100, -100), &HA7C1E9 obj.line (11500, 6560)-Step(670, 0), &HA7C1E9 52

obj.line (12000, 6560)-Step(0, 110), &HA7C1E9 obj.line (12000, 6660)-Step(300, 0), &H2ECFD8 obj.line (11700, 6700)-Step(-700, -500), &HA7C1E9 obj.line (11750, 7000)-Step(-50, -300), &H2ECFD8 obj.line (12620, 7790)-Step(-900, -800), &H2ECFD8 obj.line (12620, 7790)-Step(1000, -900), &H2ECFD8 obj.line (12620, 7790)-Step(0, 1000), &HA7C1E9 obj.line (12620, 8790)-Step(-1000, 1000), &HA7C1E9 obj.line (11650, 9780)-Step(0, 400), &HA7C1E9 obj.line (12120, 10550)-Step(-500, -400), &HA7C1E9 obj.line (12030, 10840)-Step(100, -300), &HA7C1E9 obj.line (11610, 10750)-Step(450, 0), &HA7C1E9 obj.line (11600, 10750)-Step(-600, -600), &HA7C1E9 obj.line (11000, 10150)-Step(-100, -300), &HA7C1E9 obj.line (11400, 2200)-Step(0, 200), &H42FBFB obj.line (11400, 2400)-Step(150, 0), &H42FBFB obj.line (11550, 2400)-Step(0, 300), &HA7C1E9 obj.line (10900, 9900)-Step(600, -1000), &HA7C1E9 obj.line (11500, 8900)-Step(-20, -200), &HA7C1E9 obj.line (11500, 8700)-Step(250, -300), &HA7C1E9 obj.circle (11580, 8350), 150, &HA7C1E9, 6, 2, -1.5 obj.line (11480, 7980)-Step(50, 200), &HA7C1E9 obj.circle (11730, 6790), 1300, &HA7C1E9, 3, 4.3, 1 obj.line (11200, 7980)-Step(280, 0), &HA7C1E9 obj.line (10450, 6600)-Step(130, -60), &HA7C1E9 53

obj.line (10580, 6150)-Step(0, 400), &HA7C1E9 obj.line (10880, 5800)-Step(-300, 350), &HA7C1E9 obj.line (10880, 5100)-Step(0, 700), &HA7C1E9 obj.line (10880, 5100)-Step(-150, -30), &HA7C1E9 obj.line (10740, 3980)-Step(0, 1100), &HA7C1E9 obj.line (10740, 3980)-Step(-100, -150), &HA7C1E9 obj.line (10650, 3820)-Step(650, 0), &HA7C1E9 obj.line (11270, 3120)-Step(0, 700), &HA7C1E9 obj.line (11270, 3120)-Step(-70, -200), &HA7C1E9 obj.line (11400, 2850)-Step(-190, 100), &HA7C1E9 obj.line (11400, 2760)-Step(0, 110), &HA7C1E9 obj.line (11550, 2670)-Step(-170, 100), &HA7C1E9 obj.circle (11480, 3680), 1280, &H42FBFB, 6 / 1, 6 / 4, 6 / 6 obj.line (13600, 6900)-Step(500, 500), &HA7C1E9 obj.line (14100, 7400)-Step(0, 500), &HA7C1E9 obj.line (14100, 7900)-Step(100, 0), &HA7C1E9 obj.line (14200, 7900)-Step(50, 450), &HA7C1E9 obj.line (14250, 8350)-Step(90, 0), &HA7C1E9 obj.line (14350, 8350)-Step(50, 200), &HA7C1E9 obj.line (14400, 8550)-Step(300, 400), &HA7C1E9 obj.line (14700, 8950)-Step(200, 0), &HA7C1E9 obj.line (14900, 8820)-Step(0, 150), &HA7C1E9 obj.line (14900, 8800)-Step(270, 0), &HA7C1E9 obj.line (15150, 8820)-Step(0, 500), &HA7C1E9 obj.line (15050, 9380)-Step(100, -100), &HA7C1E9 obj.line (15030, 9380)-Step(0, 150), &HA7C1E9 54

obj.line (14400, 9520)-Step(640, 0), &HA7C1E9 obj.line (14400, 9320)-Step(0, 200), &HA7C1E9 obj.line (14200, 9320)-Step(200, 0), &HA7C1E9 obj.line (14200, 9320)-Step(50, -200), &HA7C1E9 obj.line (13350, 8050)-Step(900, 1100), &HA7C1E9 obj.line (13350, 7790)-Step(0, 300), &HA7C1E9 obj.line (12600, 7780)-Step(750, 0), &HA7C1E9 obj.line (13600, 6450)-Step(0, 450), &H2ECFD8 obj.line (13600, 6450)-Step(120, 0), &H2ECFD8 obj.line (13700, 5600)-Step(0, 850), &H2ECFD8 obj.line (13700, 5600)-Step(550, -550), &H2ECFD8 obj.line (13700, 5050)-Step(550, 0), &H2ECFD8 obj.line (13700, 5050)-Step(0, 150), &H2ECFD8 obj.line (13700, 5200)-Step(150, 0), &H2ECFD8 obj.line (13850, 4770)-Step(0, 450), &H2ECFD8 obj.line (13750, 4770)-Step(100, 0), &H2ECFD8 obj.line (13750, 4650)-Step(0, 140), &H2ECFD8 obj.line (13550, 4650)-Step(210, 0), &H2ECFD8 obj.line (13550, 4650)-Step(0, 140), &H2ECFD8 obj.line (13440, 4780)-Step(120, 0), &H2ECFD8 obj.line (13440, 4380)-Step(0, 400), &H2ECFD8 obj.line (13200, 4380)-Step(250, 0), &H2ECFD8 obj.line (13200, 4380)-Step(0, 400), &H2ECFD8 obj.line (13100, 4780)-Step(100, 0), &H2ECFD8 obj.line (13100, 4780)-Step(0, 200), &H2ECFD8 55

obj.line (13000, 4980)-Step(100, 0), &H2ECFD8 obj.line (13000, 4980)-Step(0, 150), &H2ECFD8 obj.line (12250, 5130)-Step(750, 0), &H2ECFD8 obj.line (12250, 5130)-Step(0, 100), &H2ECFD8 obj.line (12070, 5230)-Step(200, 0), &H2ECFD8 obj.line (12070, 5230)-Step(0, 350), &H2ECFD8 obj.line (11920, 5580)-Step(170, 0), &H2ECFD8 obj.line (11920, 5580)-Step(0, 150), &H2ECFD8 obj.line (11920, 5710)-Step(200, 100), &H2ECFD8 obj.line (12120, 5810)-Step(0, 200), &H2ECFD8 obj.line (12320, 6060)-Step(800, -900), &H2ECFD8 obj.line (13250, 5130)-Step(-150, 30), &H2ECFD8 obj.line (13250, 5130)-Step(100, -250), &H2ECFD8 obj.line (13350, 4890)-Step(100, 0), &H2ECFD8 obj.line (13450, 4890)-Step(0, 250), &H2ECFD8 obj.line (13450, 5140)-Step(170, 0), &H2ECFD8 obj.line (13600, 5160)-Step(0, 80), &H2ECFD8 obj.line (12850, 5840)-Step(600, -700), &H2ECFD8 obj.line (12920, 6010)-Step(700, -800), &H2ECFD8 obj.line (12820, 6910)-Step(-100, -50), &H2ECFD8 obj.line (12820, 6910)-Step(500, -600), &H2ECFD8 obj.line (13300, 6310)-Step(40, -400), &H2ECFD8 obj.line (13300, 6310)-Step(40, -400), &H2ECFD8 obj.line (13320, 5910)-Step(50, -100), &H2ECFD8 obj.line (13380, 5630)-Step(0, 200), &H2ECFD8 56

obj.line (13280, 5630)-Step(120, 0), &H2ECFD8 obj.line (12280, 3310)-Step(-30, -320), &HFA1F29 obj.line (12000, 3000)-Step(270, -5), &HFA1F29 obj.line (12000, 3000)-Step(0, 200), &HFA1F29 obj.line (12000, 3200)-Step(100, 0), &HFA1F29 obj.line (12100, 3200)-Step(0, 120), &HFA1F29 obj.line (12100, 3320)-Step(210, 0), &HFA1F29 obj.line (11600, 2800)-Step(250, -40), &HFA1F29 obj.line (11600, 2800)-Step(0, 150), &HFA1F29 obj.line (11600, 2950)-Step(100, 0), &HFA1F29 obj.line (11700, 2950)-Step(0, 150), &HFA1F29 obj.line (11700, 3100)-Step(150, 0), &HFA1F29 obj.line (11850, 2770)-Step(0, 350), &HFA1F29 obj.line (11880, 3750)-Step(-180, 90), &H3526EA obj.line (11700, 3560)-Step(0, 280), &H3526EA obj.line (11700, 3560)-Step(100, -15), &H3526EA obj.line (11800, 3550)-Step(45, 95), &H3526EA obj.line (11930, 3610)-Step(-90, 40), &H3526EA obj.line (11930, 3610)-Step(-30, 160), &H3526EA obj.line (10750, 4110)-Step(180, 0), &HFFFFFF obj.line (10170, 4780)-Step(600, -700), &HFFFFFF obj.line (9100, 4780)-Step(1100, 0), &HFFFFFF obj.line (9100, 4780)-Step(1300, -1400), &HFFFFFF obj.line (9800, 4380)-Step(700, -800), &HFFFFFF obj.line (10000, 4480)-Step(700, -800), &HFFFFFF 57

obj.line (10200, 4580)-Step(530, -630), &HFFFFFF obj.circle (10680, 4130), 800, &HFFFFFF, 6 / 5, 6 / 3, 6 / 6 obj.line (11100, 3830)-Step(-140, -460), &HFFFFFF obj.line (11100, 3830)-Step(0, 150), &HFFFFFF obj.line (10930, 3980)-Step(180, 0), &HFFFFFF obj.line (10930, 3980)-Step(0, 150), &HFFFFFF obj.line (11680, 4680)-Step(0, 200), &HA7C1E9 obj.line (11530, 4680)-Step(0, 200), &HA7C1E9 obj.line (11530, 4680)-Step(150, 0), &HA7C1E9 obj.line (11530, 4880)-Step(150, 0), &HA7C1E9 //παρακάτω σχεδιάζω την μια νότα ElseIf (Option4.Value = True) Then ScaleLeft = Val(txtnum1.Text) ScaleTop = Val(txtnum2.Text) obj.line (9000, 1600)-Step(330, -120), &H2ECFD8 obj.line (9000, 1600)-Step(0, 730), &H2ECFD8 obj.line (8910, 2330)-Step(100, 0), &H2ECFD8 obj.line (8910, 2280)-Step(0, 50), &H2ECFD8 obj.line (8760, 2330)-Step(150, -50), &H2ECFD8 obj.line (8760, 2330)-Step(0, 150), &H2ECFD8 obj.line (8630, 2540)-Step(150, -90), &H2ECFD8 obj.line (8630, 2540)-Step(0, 250), &H2ECFD8 obj.line (8490, 2790)-Step(150, 0), &H2ECFD8 obj.line (8540, 2980)-Step(-70, -200), &H2ECFD8 obj.line (8540, 2980)-Step(440, 0), &H2ECFD8 58

obj.line (8980, 2800)-Step(0, 180), &H2ECFD8 obj.line (8980, 2800)-Step(150, -80), &H2ECFD8 obj.line (9120, 2620)-Step(0, 130), &H2ECFD8 obj.line (9120, 2620)-Step(150, -80), &H2ECFD8 obj.line (9270, 1900)-Step(0, 650), &H2ECFD8 obj.line (9270, 1900)-Step(100, 0), &H2ECFD8 obj.line (9370, 1900)-Step(0, 100), &H2ECFD8 obj.line (9370, 2000)-Step(200, 0), &H2ECFD8 obj.line (9570, 2000)-Step(0, 200), &H2ECFD8 obj.line (9420, 2200)-Step(170, 0), &H2ECFD8 obj.line (9420, 1700)-Step(0, 500), &H2ECFD8 obj.line (9320, 1700)-Step(100, 0), &H2ECFD8 obj.line (9320, 1500)-Step(0, 200), &H2ECFD8 End If Print End Sub Public Sub Command2_Click() DrawPicture Me End Sub //παρακάτω εκτυπώνει την φόρμα Public Sub Command3_Click() Call PrintForm End Sub ΤΑ ΑΠΟΤΕΛΕΣΜΑΤΑ ΤΟΥ ΠΑΡΑΠΑΝΩ ΚΩΔΙΚΑ 59

Η δεύτερη εργασία μου έχει μια παλέτα χρωμάτων που επιλέγει ο χρηστής το χρώμα που θέλει για να έχει η εικόνα. Η εικόνα έχει φτιαχτεί από σχήματα. Option Explicit //παρακάτω είναι η παλέτα χρωμάτων Public Sub hsbblue_scroll() DoColor End Sub Public Sub hsbgreen_scroll() DoColor 60

End Sub Public Sub hsbred_scroll() DoColor End Sub Public Sub hsbblue_change() hsbblue_scroll End Sub Public Sub hsbgreen_change() hsbgreen_scroll End Sub Public Sub hsbred_change() hsbred_scroll End Sub Public Sub DoColor() txtcolor.backcolor = RGB(hsbRed.Value, hsbgreen.value, hsbblue.value) End Sub //παρακάτω αρχίζω και σχεδιάζω την εικόνα Public Sub drawpicture(obj As Object) //βάζω χρώμα στην φόρμα Form1.BackColor = RGB(256, 150, 0) obj.fillstyle = vbsolid //εδώ σχεδιάζω το κεφάλι του ανθρώπου If (Option1.Value = True) Then obj.fillcolor = txtcolor.backcolor obj.circle (2350, 850), 400 61

// εδώ σχεδιάζω τον λαιμό του ανθρώπου ElseIf (Option2.Value = True) Then obj.line (2300, 1250)-Step(100, 300), RGB(hsbRed.Value, hsbgreen.value, hsbblue.value), BF // εδώ σχεδιάζω το σώμα του ανθρώπου ElseIf (Option4.Value = True) Then obj.line (1850, 1500)-Step(1000, 1000), RGB(hsbRed.Value, hsbgreen.value, hsbblue.value), BF // εδώ σχεδιάζω το πόδι του ανθρώπου ElseIf (Option3.Value = True) Then obj.line (2100, 2000)-Step(100, 1300), RGB(hsbRed.Value, hsbgreen.value, hsbblue.value), BF //εδώ σχεδιάζω τα μάτια του ανθρώπου ElseIf (Option5.Value = True) Then obj.fillcolor = txtcolor.backcolor obj.circle (2050, 850), 200 ElseIf (Option6.Value = True) Then obj.fillcolor = RGB(hsbRed.Value, hsbgreen.value, hsbblue.value) obj.circle (1700, 1850), 150 //εδώ σχεδιάζω τα χέρια του ανθρώπου obj.fillcolor = RGB(hsbRed.Value, hsbgreen.value, hsbblue.value) obj.circle (3000, 1850), 150 //εδώ σχεδιάζω τα χίλια του ανθρώπου ElseIf (Option7.Value = True) Then obj.line (2120, 1130)-Step(150, 30), RGB(hsbRed.Value, hsbgreen.value, hsbblue.value), BF 62

End If End Sub Private Sub Command1_Click() drawpicture Me End Sub Τα αποτελέσματα του παραπάνω κώδικα 63