Προγραμματιστική Εργασία

Σχετικά έγγραφα
Προγραμματιστική Εργασία

Σχεδίαση & Ανάλυση Αλγορίθμων

Διαφορικός Λογισμός. Κεφάλαιο Συναρτήσεις. Κατανόηση εννοιών - Θεωρία. 1. Τι ονομάζουμε συνάρτηση;

Αλγόριθμοι και Πολυπλοκότητα

ΑΛΓΟΡΙΘΜΟΙ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ ΠΟΛΥΠΛΟΚΟΤΗΤΑ ΚΑΙ ΠΟΛΥΠΛΟΚΟΤΗΤΑ

Άσκηση 3 (ανακοινώθηκε στις 24 Απριλίου 2017, προθεσμία παράδοσης: 2 Ιουνίου 2017, 12 τα μεσάνυχτα).

Τεχνολογίες Υλοποίησης Αλγορίθµων

Δομημένος Προγραμματισμός ΙΙΙ - Java

Περιεχόμενα. Κεφάλαιο 1 ΣΥΣΤΗΜΑΤΑ ΣΥΝΤΕΤΑΓΜΕΝΩΝ ΣΕ ΜΙΑ ΕΥΘΕΙΑ Οι συντεταγμένες ενός σημείου Απόλυτη τιμή...14

Ονοματεπώνυμο Τμήμα. 1. Τι ονομάζουμε εμβαδόν ενός επιπέδου σχήματος (χωρίου) και πως υπολογίζεται αυτό; Απάντηση

F x h F x f x h f x g x h g x h h h. lim lim lim f x

Εξέταση Φεβρουαρίου Λύσεις

Δομές Δεδομένων. Παύλος Εφραιμίδης

x 2 + y 2 + z 2 = R 2.

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

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΔΕΥΤΕΡΑ 11 ΙΟΥΝΙΟΥ 2018 ΜΑΘΗΜΑΤΙΚΑ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ

οµηµένος Προγραµµατισµός ΙΙΙ - Java

Εργαστήριο μαθήματος - Τοπογραφία (Παρατηρητές) Ονοματεπώνυμο ΑΜ. Ασκήσεις Εργαστηρίου τοπογραφίας

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

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

[(W V c ) (W c V c )] c \ W = [(W V c ) (W c V c )] c \ W = [(W V c ) c (W c V c ) c ] \ W = [(W c W ) V ] \ W

< και δεδομένου ότι η f είναι γνησίως μονότονη, συμπεραίνουμε ότι

Η συνάρτηση y = αχ 2. Βρέντζου Τίνα Φυσικός Μεταπτυχιακός τίτλος: «Σπουδές στην εκπαίδευση» ΜEd

7.1 ΜΕΛΕΤΗ ΤΗΣ ΣΥΝΑΡΤΗΣΗΣ

Κεφάλαιο 2: Διανυσματικός λογισμός συστήματα αναφοράς

Τεχνολογίες Υλοποίησης Αλγορίθµων

Οδηγίες για το CABRI - GEOMETRY II Μωυσιάδης Πολυχρόνης - Δόρτσιος Κώστας

f(x) = και στην συνέχεια

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ231: ομές εδομένων και Αλγόριθμοι

Πεπερασμένες Διαφορές.

ΜΕΛΕΤΗ ΣΥΝΑΡΤΗΣΗΣ ΣΤΗΝ Α ΛΥΚΕΙΟΥ

Το µάθηµα Αντικείµενο-Περιεχόµενα µαθήµατος Τρόπος ιδασκαλίας Εργαστήριο Βιβλίο, Βιβλιογραφία On-line Υλικό 2

ΘΕΜΑ Α. β) Για κάθε παραγωγίσιμη συνάρτηση f σε ένα διάστημα Δ, η οποία είναι γνησίως αύξουσα, ισχύει f (x) 0 για κάθε x Δ.

6 Συνεκτικοί τοπολογικοί χώροι

οµηµένος Προγραµµατισµός ΙΙΙ - Java Παύλος Εφραιµίδης οµηµένος Προγρ. ΙΙΙ - 1 Java Το Μάθηµα

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΕΝΤΡΙΚΗΣ ΜΑΚΕΔΟΝΙΑΣ ΣΧΟΛΗ ΤΜΗΜΑ. Μαθηματικά 2. Σταύρος Παπαϊωάννου

Σύντομος οδηγός του μαθήματος

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Φύλλο Εργασίας για την y=αx 2

Δομές Δεδομένων. Ενότητα 2: Περισσότερα για τους δείκτες. Δρ. Γεώργιος Σίσιας Τμήμα Μηχανικών Πληροφορικής ΤΕ

Συστήματα συντεταγμένων

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

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση

3 ο Εργαστήριο Μεταβλητές, Τελεστές

ΤΑΞΗ Α - ΜΑΘΗΜΑΤΙΚΑ ΘΕΜΑΤΑ ΘΕΩΡΙΑΣ (ΓΙΑ ΤΗΝ ΤΕΛΙΚΗ ΕΠΑΝΑΛΗΨΗ)

5ο Μάθημα Αλγόριθμοι Σχεδίασης Βασικών Σχημάτων

Μαθηματική Εισαγωγή Συναρτήσεις

f(x ) 0 O) = 0, τότε το x

x 2 + y 2 x y

ΜΑΘΗΜΑΤΙΚΑ Γ ΓΥΜΝΑΣΙΟΥ

Το σενάριο προτείνεται να διεξαχθεί με τη χρήση του Cabri Geometry II.

Αντικειμενοστραφής Προγραμματισμός

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

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Εργαστήριο μαθήματος - Τοπογραφία. Ονοματεπώνυμο ΑΜ. Ασκήσεις Εργαστηρίου τοπογραφίας

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η

ΑΣΚΗΣΕΙΣ ΣΤΙΣ ΣΥΝΑΡΤΗΣΕΙΣ

Α. Έστω δύο σύνολα Α και Β. Ποιά διαδικασία ονομάζεται συνάρτηση με πεδίο ορισμού το Α και πεδίο τιμών το Β;

ΝΙΚΟΣ ΤΑΣΟΣ. Αλγ ε β ρ α. Γενικής Παιδειασ

Αλγόριθμοι και Πολυπλοκότητα

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

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

Μαθηματική Εισαγωγή Συναρτήσεις

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

turnin Lab2.hs

ΕΚΘΕΣΗ ΠΡΟΟ ΟΥ Υποψήφιος ιδάκτορας: Ιωάννης Κυριαζής

1o. Θ Ε Μ Α Β Ε. Γ Κ Ο Ρ Α. βρίσκεται ολόκληρη μέσα στο τετράγωνο ΑΒΓΔ.

Εισαγωγή Αποκοπή ευθείας σε 2Δ Αποκοπή πολυγώνου σε 2Δ Αποκοπή σε 3Δ. 3ο Μάθημα Αποκοπή. Γραφικα. Ευάγγελος Σπύρου

Εισαγωγή στην Αριθμητική Ανάλυση

Χαριτωμένη Καβουρτζικλή (ΑΕΜ: 2738)

Εισαγωγή στην OpenGL

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

ΣΥΝΑΡΤΗΣΕΩΝ. f3 x = και

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

ΜΕΡΟΣ Β 1.4 ΟΜΟΙΟΘΕΣΙΑ ΟΜΟΙΟΘΕΣΙΑ

ΘΕΜΑ Α. lim f(x) 0 και lim g(x), τότε lim [f(x) g(x)] 0. lim.

Μελέτη της συνάρτησης ψ = α χ 2

Γραφήματα οικογένειας παραβολών

Μαθηµατικά Θετικής και Τεχνολογικής Κατεύθυνσης ΚΕΦΑΛΑΙΟ. 1 ο :Μιγαδικοί Αριθµοί

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

Ασκήσεις μελέτης της 19 ης διάλεξης

Γνωστό: P (M) = 2 M = τρόποι επιλογής υποσυνόλου του M. Π.χ. M = {A, B, C} π. 1. Π.χ.

Να υπολογίζουμε τους τριγωνομετρικούς αριθμούς οξείας γωνίας. Τη γωνία σε κανονική θέση και τους τριγωνομετρικούς αριθμούς γωνίας σε κανονική θέση.

ΘΕΩΡΙΑ ΜΑΘΗΜΑΤΙΚΑ Β ΛΥΚΕΙΟΥ ΚΕΦΑΛΑΙΟ 2 ο : ΙΔΙΟΤΗΤΕΣ ΣΥΝΑΡΤΗΣΕΩΝ

ΘΕΜΑ Α. β) Για κάθε παραγωγίσιμη συνάρτηση f σε ένα διάστημα Δ, η οποία είναι γνησίως αύξουσα, ισχύει f (x) 0 για κάθε x Δ.

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

Το μεσαίο πλήκτρο ενεργοποιεί τα Osnaps μόνο αν η μεταβλητή MBUTTONPAN έχει τιμή 1.

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΕΝΤΡΙΚΗΣ ΜΑΚΕΔΟΝΙΑΣ ΣΧΟΛΗ ΤΜΗΜΑ. Μαθηματικά 2. Σταύρος Παπαϊωάννου

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

bca = e. H 1j = G 2 H 5j = {f G j : f(0) = 1}

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

ΠΕΡΙΦΕΡΕΙΑΚΗ ΔΙΕΥΘΥΝΣΗ Π/ΘΜΙΑΣ & Δ/ΘΜΙΑΣ ΕΚΠΑΙΔΕΥΣΗΣ ΒΟΡΕΙΟΥ ΑΙΓΑΙΟΥ

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η

Εισαγωγή στην OpenGL

ΤΕΛΟΣ 1ΗΣ ΑΠΟ 3 ΣΕΛΙΔΕΣ

ΛΥΜΕΝΕΣ ΑΣΚΗΣΕΙΣ ΣΤΙΣ ΣΥΝΑΡΤΗΣΕΙΣ

ΘΕΜΑ Α. lim f(x) 0 και lim g(x), τότε lim [f(x) g(x)] 0. lim.

τα βιβλία των επιτυχιών

Καρτεσιανές συντεταγμένες Γραφική παράσταση συνάρτησης

ΜΕΛΕΤΗ ΒΑΣΙΚΩΝ ΣΥΝΑΡΤΗΣΕΩΝ

Transcript:

Προγραμματιστική Εργασία Ημερομηνία Παράδοσης: 22 Ιουνίου 2007 1 Τίπρέπεινακάνετεγιατηνεργασίααυτή Θεωρούμε ότι έχουμε ένα πολύγωνο από n ακμές στις δύο διαστάσεις. Οι ακμές είναι δυνατόν να είναι ευθύγραμμα τμήματα ή τόξα κύκλων, τα οποία«κοιτάνε» προς το εξωτερικό του πολυγώνου(βλ. Σχήμα 1). Κατά συνέπεια τα πολύγωνα είναι τοπικά κυρτά(εκτός ενδεχομένως από τις κορυφές). Τα πολύγωνα αυτά το ονομάζουμε κυρτά κατά τμήματα. Γιατηνεργασίααυτή θαπρέπειναγράψετε έναπρόγραμμα τοοποίοναχωρίζειταενλόγω πολύγωνα σε y-μονότονα πολύγωνα: ένα πολύγωνο λέγεται y-μονότονο αν κάθε ευθεία παράλληλη μετονάξονατων xτέμνειτοπολύγωνοσετοπολύδύοσημεία,ανδενέχουμεευθύγραμματμήματα παράλληλα με τον άξονα των x, ή γενικότερα σε δύο συνεκτικά σύνολα(σημεία ή ευθύγραμμα τμήματα), αν επιτρέψουμε ευθύγραμμα τμήματα παράλληλα με τον άξονα των x. Ο αλγόριθμος που σας προτείνεται να υλοποιήσετε είναι η γενίκευση του αλγορίθμου για γραμμικά πολύγωνα που υπάρχει στο βιβλίο των de Berg, van Kreveld, Overmars και Schwarzkopf[2, Κεφάλαιο 2]. Ο αλγόριθμος/κώδικάς σας θα πρέπεινατρέχεισεχρόνο O(n lg n). Τα παραπάνω θα εξηγηθούν με περισσότερες λεπτομέρειες στη συνέχεια. (675,3875) (3074,3876) (2174,3726) (3449,3576) (4874,3576) (4424,2826) (5849,3126) (974,2376) (2549,2600) (2775,1775) (3749,1851) (4349,2226) (5474,2076) (1574,276) (3974,351) Σχήμα 1: Ενα κυρτό κατά τμήματα πολύγωνο αποτελούμενο από τόξα κύκλων και ένα ευθύγραμμο τμήμα. Τα διατεταγμένα ζεύγη είναι συντεταγμένες των αντίστοιχων σημείων. 1

2 Προδιαγραφές Τοπρόγραμμάσαςθαπρέπειναείναιγραμμένοσε CήC++. Θαπρέπεινασυμμορφώνεταιμετις απαιτήσεις που περιγράφονται παρακάτω στις Παραγράφους 3 και 3.2. Μπορείτε να θεωρήσετε ότι τα αρχεία δεδομένων δεν περιέχουν λάθη στην καταγραφή των δεδομένων οπότε δε χρειάζεται τα προγράμματά σας να ελέγχουν για λάθη στα δεδομένα. Οι συντεταγμένες των σημείων θα είναι αριθμοί που θα αναπαρίστανται από ακεραίους(long int). Τα προγράμματά σας θα πρέπει να μεταγλωττίζονται στους υπολογιστές των αιθουσών Η205 ή Λ205 με τους μεταγλωττιστές gcc/g++ της C/C++ που υπάρχουν εγκατεστημένοι στους υπολογιστές αυτούς. Αν θέλετε να χρησιμοποιήσετε τη βιβλιοθήκη Cgal,θαπρέπειναχρησιμοποιήσετεμεταγλωττιστήτης C++,έστωκαιανοκώδικάςσαςείναισε C. Η εργασία αυτή είναι ατομική. Στην κείμενο που θα παραδώσετε, καθώς επίσης και σε κάθε αρχείο με κώδικα που θα παραδώσετε(βλέπε Παράγραφο 5) σημειώστε το ονοματεπώνυμο και τον αριθμό μητρώου σας(αν έχετε), καθώς και τμήμα σας ή το μεταπτυχιακό πρόγραμμα στο οποίο ανήκετε. Αναφέρετε με σαφήνεια όλες τις πηγές σας(βιβλιογραφικές, διαδικτυακές, κτλ.), και ειδικότερα αν πρόκειται για κώδικα. 3 Επικοινωνία με το χρήστη(user interface) Η int main(int argc, char* argv[]) του προγράμματός σας θα πρέπει να βρίσκεται σε ένα αρχείο μεόνομα cg project.cή cg project.cpp(αναλόγωςτουανέχετεγράψειτοπρόγραμμάσαςσε Cή C++ αντίστοιχα). Το πρόγραμμά σας θα πρέπει να παίρνει δύο παραμέτρους(command line arguments). Ηπρώτηθαείναιτοόνοματουαρχείουαπότοοποίοτοπρόγραμμάσαςθαδιαβάζειτατοπολύγωνο. Ηδεύτερηθαείναιτοόνοματουαρχείουστοοποίοτοπρόγραμμάσαςθαγράψειτααποτελέσματα των υπολογισμών σας(τα μονότονα υπο-πολύγωνα). 3.1 Αρχείο δεδομένων πολυγώνου Το αρχείο δεδομένων περιέχει στην πρώτη γραμμή τον αριθμό των ακμών/κορυφών του πολυγώνου, καιενσυνεχείασεκάθεγραμμήένααπόταπαρακάτωδύο: 1. αν πρόκειται για ευθύγραμμο τμήμα, το γράμμα s ακολουθούμενο από τις καρτεσιανές συντεταγμένες των δύο άκρων του ευθυγράμμου τμήματος(4 αριθμοί). Οι δύο πρώτοι αριθμοί αφορούν τις x και y συντεταγμένες του πρώτου σημείου, ενώ οι δύο επόμενοι τις x και y συντεταγμένες του δεύτερου σημείου. 2. αν πρόκειται για τόξο κύκλου, το γράμμα c ακολουθούμενο από τις καρτεσιανές συντεταγμένες τριών σημείων(6 αριθμοί). Το πρώτο και το τελευταίο σημείο είναι τα άκρα του τόξου κύκλου, ενώ το ενδιάμεσο(δεύτερο) σημείο είναι ένα σημείο στο εσωτερικό του τόξου κύκλου. Σε κάθε δυάδα αριθμών ο πρώτος είναι η x-συντεταγμένη του σημείου, ενώ ο δεύτερος είναι η y-συντεταγμένη του σημείου. Για παράδειγμα, ένα αρχείο δεδομένων θα έχει τη μορφή: 5 s 0 0 10 0 c 10 0 11-1 10 20 c 10 20 5 30 0 30 s 0 30 12 10 s 12 10 0 0 2

3.2 Τι πρέπει να επιστρέφουν τα προγράμματά σας(output) Το πρόγραμμά σας θα πρέπει επιστρέφει στο αρχείο εξόδου τα εξής: Στην πρώτη γραμμή τον αριθμό των μονότονων πολυγώνων που υπολογίσατε. Στη συνέχεια δίνετε τα μονότονα πολύγωνα που υπολογίσατε. Κάθε μονότονο πολύγωνο περιγράφεται ως εξής. Στην πρώτη γραμμή δίνετε δύο αριθμούς που αντιστοιχούν στο στο αριθμό των ακμών στην αριστερή και δεξιά, αντίστοιχα, αλυσίδα του μονότονου πολυγώνου, και στη συνέχεια τις ακμές των δύο αλυσίδων, πρώτα τις ακμές της αριστερής και στη συνέχεια τις ακμές της δεξιάς αλυσίδας. Οι ακμές πρέπει να δίδονται σε φθίνουσα σειρά ως προς την y-συνιστώσα τους ανώτερου τους σημείου και κάθε γραμμή πρέπει να καταγράφεται σε ξεχωριστή γραμμή του αρχείου. Οι ακμές είναι δυνατόν να είναι τεσσάρων διαφορετικών τύπων: 1. Ενα από τα δεδομένα ευθύγραμμα τμήματα. Τις ακμές αυτού του τύπου τις καταγράφουμε ως s x1 y1 x2 y2, όπου οι τέσσερεις αριθμοί μετά το s είναι οι συντεταγμένες των άκρων του ευθυγράμμου τμήματος. 2. Ενααπόταδεδομένατόξακύκλου.Τιςακμέςαυτούτουτύπουτιςκαταγράφουμεως c x1 y1 x2 y2 x3 y3, όπουοιέξιαριθμοίμετάτο cείναιοισυντεταγμένεςτωντριώνσημείωνπουορίζουντο τόξο(άκρο ενδιάμεσο σημείο άκρο). 3. Ευθύγραμμη διαγώνιος του πολυγώνου. Οι διαγώνιοι αυτοί μπορεί να ενώνουν άκρα τόξων κύκλου ή ευθυγράμμων τμημάτων, ή είναι δυνατόν το ένα τους άκρο να είναι ακρότατο(άνω ή κάτω) κάποιου τόξου κύκλου. Στην περίπτωση αυτή καταγράφουμε τις διαγωνίους ως εξής: (αʹ) Αν η διαγώνιος συνδέει άκρα ευθυγράμμων τμημάτων ή άκρα τόξων κύκλου, τις καταγράφουμε ως: d x1 y1 x2 y2, όπου οι τέσσερεις αριθμοί μετά το d είναι οι συντεταγμένες των άκρων της διαγωνίου. (βʹ) Αν η διαγώνιος συνδέει το άνω ακρότατο τόξου κύκλου με άκρο ευθυγράμμου τμημάτος ή άκρο τόξου κύκλου, τις καταγράφουμε ως: du x1 y1 x2 y2 x3 y3 x4 y4, όπουοιέξιαριθμοίμετάτο duείναιοισυντεταγμένεςτωντριώνσημείωνπουορίζουν τοτόξοκύκλου(τοεσωτερικόσημείοτουτόξουείναιτο x2 y2),ενώοι x4, y4είναι το άκρο του ευθυγράμμου τμήματος ή τόξου κύκλου. (γʹ) Αν η διαγώνιος συνδέει το κάτω ακρότατο τόξου κύκλου με άκρο ευθυγράμμου τμημάτος ή άκρο τόξου κύκλου, τις καταγράφουμε ως: dl x1 y1 x2 y2 x3 y3 x4 y4, όπουοιέξιαριθμοίμετάτο dlείναιοισυντεταγμένεςτωντριώνσημείωνπουορίζουν τοτόξοκύκλου(τοεσωτερικόσημείοτουτόξουείναιτο x2 y2),ενώοι x4, y4είναι το άκρο του ευθυγράμμου τμήματος ή τόξου κύκλου. 3

4. Τμήμα(κομμάτι) δεδομένου τόξου κύκλου. Το κομμάτι αυτό μπορεί να έχει ως άκρο ένααπόταάκρατουδεδομένουτόξου,ήκαιταδύοάκρατουναείναιεσωτερικάσημεία (ακρότατα) του δεδομένου τόξου. Στην περίπτωση αυτή καταγράφουμε το τόξο κύκλου ως εξής: (αʹ) Αντοτόξοέχεικαιταδύοτουάκραστοεσωτερικότουαρχικούτόξου,καταγράφουμε τοτόξοαυτόως: ci x1 y1 x2 y2 x3 y3 (βʹ) Αντοτόξοέχειωςάκροστοεσωτερικότουαρχικούτόξουτοάνωακρότατοτου αρχικού τόξου και βρίσκεται στα αριστερά του σημείου αυτού, καταγράφουμε το τόξο αυτό ως: cul x1 y1 x2 y2 x3 y3 (γʹ) Αντοτόξοέχειωςάκροστοεσωτερικότουαρχικούτόξουτοάνωακρότατοτου αρχικού τόξου και βρίσκεται στα δεξιά του σημείου αυτού, καταγράφουμε το τόξο αυτό ως: cur x1 y1 x2 y2 x3 y3 (δʹ) Αντοτόξοέχειωςάκροστοεσωτερικότουαρχικούτόξουτοκάτωακρότατοτου αρχικού τόξου και βρίσκεται στα αριστερά του σημείου αυτού, καταγράφουμε το τόξο αυτό ως: cll x1 y1 x2 y2 x3 y3 (εʹ) Τέλος,αντοτόξοέχειωςάκροστοεσωτερικότουαρχικούτόξουτοκάτωακρότατο του αρχικού τόξου και βρίσκεται στα δεξιά του σημείου αυτού, καταγράφουμε το τόξο αυτό ως: clr x1 y1 x2 y2 x3 y3 Για παράδειγμα, ας θεωρήσουμε το πολύγωνο του Σχήματος 1, το οποίο αντιστοιχεί στο παρακάτω αρχείο δεδομένων: 8 c 2174 3726 3074 3876 3449 3576 c 3449 3576 5849 3126 4424 2826 s 4424 2826 3749 1851 c 3749 1851 4349 2226 5474 2076 c 1574 276 3974 351 5474 2076 c 4874 3576 2775 1775 1574 276 c 974 2376 2549 2600 4874 3576 c 974 2376 675 3875 2174 3726 Για το πολύγωνο αυτό η διαμέρισή του σε y-μονότονα πολύγωνα φαίνεται στο Σχήμα 2, ενώ αρχείο εξόδου πρέπει να είναι ως εξής: 5 4 1 cul 2174 3726 3126 4424 3449 3576 d 3449 3576 4874 3576 d 4874 3576 4424 2826 cll 2174 3726 3126 4424 3449 3576 ci 2174 3726 3126 4424 3449 3576 1 4 cul 974 2376 675 3875 2174 3726 cur 974 2376 675 3875 2174 3726 4

d 2174 3726 3449 3576 d 3449 3576 4874 3576 c 974 2376 2549 2600 4874 3576 2 1 cul 2174 3726 3074 3876 3449 3576 d 2174 3726 3449 3576 cur 2174 3726 3074 3876 3449 3576 1 3 c 4874 3576 2775 1775 1574 276 d 4874 3576 4424 2826 s 4424 2826 3749 1851 d 3749 1851 1574 276 3 2 cul 3749 1851 4349 2226 5474 2076 d 3749 1851 1574 276 cll 1574 276 3974 351 5474 2076 cur 3749 1851 4349 2226 5474 2076 clr 1574 276 3974 351 5474 2076 4 Τίσαςδίνεται Στην ιστοσελίδα του μαθήματος θα βρείτε τρία δείγματα αρχείων δεδομένων εισόδου, μεταξύ των οποίων το example1.cin που αντιστοιχεί στα δεδομένα του παραδείγματος της Παραγράφου 3.1 και το example2.cin που αντιστοιχεί στα δεδομένα του Σχήματος 2. Πέραν των δεδομένων που σας δίδονται, σας προτείνω να κατασκευάσετε τα δικά σας δεδομένα για να ελέγξετε την ορθότητα του (675,3875) (3074,3876) (2174,3726) (3449,3576) (4874,3576) (4424,2826) (5849,3126) (974,2376) (2549,2600) (2775,1775) (3749,1851) (4349,2226) (5474,2076) (1574,276) (3974,351) Σχήμα 2: Διαμέριση του πολυγώνου του Σχήματος 1 σε μονότονα πολύγωνα. Τα κόκκινα σημεία είναι ακρότατα(άνω ή κάτω) των αντίστοιχων τόξων κύκλου. 5

αλγορίθμου σας. 5 Τίθαπαραδώσετε Θαπρέπειναπαραδώσετετονκώδικάσας,σεένααρχείοτηςμορφής.zipή.tarή.tar.gzή.tgz. Επίσης θα πρέπει να παραδώσετε ένα δακτυλογραφημένο κείμενο 5-10 σελίδων(κατά προτίμηση σε L A TEX)που θα περιγράφει και θα εξηγεί τον αλγόριθμο που χρησιμοποιήσατε, θα περιγράφει την υλοποίηση του αλγορίθμου σας, και θα αναφέρεται στις δυσκολίες που τυχόν σας παρουσιάστηκαν στην επίλυση των προβλημάτων ή την υλοποίησή τους. 6 Computational Geometry Algorithms Library Η βιβλιοθήκη Computational Geometry Algorithms Library(Cgal) είναι μία βιβλιοθήκη γεωμετικών αλγορίθμων. Είναι γραμμένη σε C++, κάνει ευρεία χρήση των templates της C++, και ακολουθεί αρχές generic programming στη σχεδίαση και χρήση των δομών δεδομένων και αλγορίθμων που προσφέρει (κάτι ανάλογο με την STL). Προκειμένου να αντιμετωπιστούν προβλήματα αριθμητικών λαθών και να επιτευχθεί η απαραίτητη ευστάθεια(robustness) στους αλγορίθμους που προσφέρει, ακολουθείται το λεγόμενο exact computation paradigm: οι αλγόριθμοι θεωρούν ότι οι αριθμητικές πράξεις δεν έχουν αριθμητικά λάθη, και αυτό επιτυγχάνεται με τη χρήση αριθμητικών τύπων πολλαπλής ακρίβειας(είτε ακεραίων/ρητών, είτε κινητής υποδιαστολής). Για την εργασία αυτή μπορείτε να χρησιμοποιήσετε τους αριθμητικούς τύπους που υπάρχουν στη βιβλιοθήκη. Οι αριθμητικοί αυτοί τύποι έχουν την ικανότητα να σας δίνουν με ακρίβεια(δηλαδή χωρίς αριθμητικά λάθη) το πρόσημο αλγεβρικών εκφράσεων που προκύπτουν χρησιμοποιώντας τις πράξεις +,,,καιαναλόγωςτουαριθμητικούτύπου,επίσηςτιςπράξεις /και.σεπερίπτωσηπουθέλετε να χρησιμοποιήσετε τη βιβλιοθήκη κατευθείαν ή θέλετε να μάθετε περισσότερα γι αυτήν μπορείτε να ανατρέξετε στην ιστοσελίδα της βιβλιοθήκης: http://www.cgal.org. 7 Βαθμολόγηση της εργασίας Οι εργασίες σας θα βαθμολογηθούν με βάση τα εξής κριτίρια: το κείμενο που θα παραδώσετε, το σχεδιασμό του κώδικά σας, το κατά πόσο η υλοποίησή σας πετυχαίνει τον επιθυμητό ασυμπτωτικό χρόνο υπολογισμού, την ορθότητα του αλγορίθμου σας(από το αν, δηλαδή, θα δίνει τα σωστά αποτελέσματα στα δεδομένα στα οποία θα ελεγχθεί). Υλοποιήσεις που δεν τηρούν τις προδιαγραφές που αναφέρονται στην Παράγραφο 2 δε θα βαθμολογηθούν και θα θεωρηθεί ότι η προγραμματιστική εργασία δεν έχει παραδοθεί. 6

8 Χρονοδιάγραμμα Στις αρχές Ιουνίου, σε ώρες και μέρες που θα καθοριστούν θα γίνει συνάντηση με κάθε φοιτητή χωριστά, ώστε να συζητηθεί η πρόοδός του/της. Η εργασία θα πρέπει να παραδοθεί μέχρι τις 22 Ιουνίου. 9 Υποδείξεις Προκειμένου να σας είναι πιο εύκολη η εκπόνηση της εργασίας, σας προτείνω τα εξής: 1. Υπολοποιήστε πρώτα τον αλγόριθμο για γραμμικά πολύγωνα. Τα δεδομένα να σας θα είναι πιο απλά και θα μπορέσετε να κάνετε πιο εύκολα debugging στο πρόγραμμά σας. 2. Χρησιμοποιήστε την εντολή typedef για να ορίσετε το δικό σας τύπο αριθμού, π.χ. typedef long int NT; και χρησιμοποιήστε τον τύπο που ορίσατε παντού στο πρόγραμμά σας. Με τον τρόπο αυτό θα σας είναι πολύ πιο εύκολο να χρησιμοποιήσετε αν θέλετε τους ακριβείς αριθμητικούς τύπους της Cgal αλλάζοντας μόνο μία γραμμή. Για παράδειγμα η παραπάνω γραμμή θα μπορούσε να αντικατασταθεί από την typedef CORE::Expr NT; 7

Σχετική βιβλιογραφία [1] T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein. Introduction to Algorithms. MIT Press, 2nd edition, 2001. [2] M. de Berg, M. van Kreveld, M. Overmars, and O. Schwarzkopf. Computational Geometry: Algorithms and Applications. Springer-Verlag, Berlin, Germany, 2nd edition, 2000. [3] J. O Rourke. Computational Geometry in C. Cambridge University Press, 2nd edition, 2001. [4] F. P. Preparata and M. I. Shamos. Computational Geometry: An Introduction. Springer, 1993. [5] R. Sedgewick. Algorithms in C++. Addison-Wesley, 3rd edition, 1998. [6] The Computational Geometry Algorithms Library (Cgal). http://www.cgal.org. 8