Κατασκευή αξόνων

 

Οδηγίες για την Pascal

Tο περιβάλλον της Pascal προσφέρεται σε διάφορες εκδόσεις. Σκοπός του σεναρίου είναι να διερευνήσουν οι μαθητές τη γεωμετρία της οθόνης και τους γεωμετρικούς μετασχηματισμούς με απλό τρόπο και σύμφωνα με την απλή εμπειρία που διαθέτουν πάνω στον προγραμματισμό. Για το λόγο αυτό θα χρησιμοποιήσετε την έκδοση της Pascal σε παραθυρικό περιβάλλον, όμως σε πλατφόρμα του λειτουργικού συστήματος DOS, με την οποία έχετε εξοικειωθεί στη συγγραφή απλών προγραμμάτων και στη χρήση βασικών εντολών. Για να μεταγλωττίσετε τα γραμμένα σε Pascal προγράμματά σας μπορείτε να χρησιμοποιήσετε τον compiler Free Pascal που χρησιμοποιείται στις Διεθνείς Ολυμπιάδες Πληροφορικής.

Για να χρησιμοποιήσετε το γραφικό περιβάλλον της Pascal θα πρέπει να δηλώσετε την κατάλληλη μονάδα (unit). Στο πρόγραμμά σας, μετά την ονομασία program, θα ορίσετε τη μονάδα γραφικών, δίνοντας uses graph;. Στη συνέχεια, με την εντολή Initgraph, το πρόγραμμα επιλέγει την κάρτα γραφικών του υπολογιστή και το mode της κάρτας. Η σύνταξή της έχει ως εξής:

Initgraph (graphdriver, graphmode, drivepath) όπου:

 

ü  Η παράμετρος graphdriver := Detect; επιλέγει αυτόματα την κάρτα.

ü  Η παράμετρος graphmode λαμβάνει την τιμή της μεγίστης ανάλυσης.

ü  Η παράμετρος drivepath ορίζει το μονοπάτι που βρίσκονται τα αρχεία με κατάληξη bgi.

 

Σημείωση: Αν εργάζεστε σε έκδοση της Pascal, που για το γραφικό περιβάλλον χρειάζεται τα αρχεία με κατάληξη bgi, θα πρέπει να δηλώνετε το πλήρες μονοπάτι (drivepath) του φακέλου bgi που περιέχει αυτά τα αρχεία (π.χ. c:/pascal/bgi). Μπορείτε βέβαια να έχετε ένα αντίγραφο του φακέλου bgi στο χώρο αποθήκευσης και εκτέλεσης των προγραμμάτων σας, οπότε δεν χρειάζεται το πλήρες μονοπάτι. Η έκδοση της Free Pascal δεν χρειάζεται το φάκελο bgi. Ωστόσο, δεν δημιουργείται πρόβλημα αν έχει δηλωθεί, ώστε να τρέχουν τα προγράμματα και στις δύο περιπτώσεις.

 

Κάθε πρόγραμμα Pascal που θέλει να απεικονίζει pixels θα πρέπει να περιλαμβάνει τα παραπάνω. Για παράδειγμα, αν θέλουμε να τυπώσουμε ένα pixel (θέση 120,100 κόκκινο), θα πρέπει να γράψουμε το παρακάτω πρόγραμμα:

 

Program open-graphika;

uses Graph;

var grDriver,grMode, X,Y,: Integer;

const drivepath='bgi';

begin

grDriver := Detect;

InitGraph(grDriver, grMode, drivepath);

 

X:= 120;

Y:= 100;

PutPixel(X,Y,LightRED);

 

writeln ('πατήστε ENTER για έξοδο');

Readln;

CloseGraph;

end.

 

Οδηγίες εκτέλεσης προγράμματος

Κατά την εκτέλεση του προγράμματος με τη Free Pascal θα εμφανίζονται δύο παράθυρα:

·         Παράθυρο εκτέλεσης εντολών (Free pascal IDE)

·         Παράθυρο γραφικών (graph window applicacion)

 

Όταν σας ζητείται κάποια εντολή εκτέλεσης θα πρέπει να τη δίνετε από το παράθυρο (Free Pascal IDE), εμφανίζοντάς το, και να επιστρέφετε στο παράθυρο (graph window applicacion) για να βλέπετε τα αποτελέσματα.

 

Μερικές ρουτίνες για τα γραφικά της οθόνης είναι οι εξής:

 

ü  Line (x1, y1, x2, y2): Σχηματίζει γραμμή μεταξύ 2 σημείων (χ1, y1) και (x2, y2).

ü  GetMaxX: Επιστρέφει τη μεγίστη τιμή της οριζόντιας συντεταγμένης.

ü  GetMaxY: Επιστρέφει τη μεγίστη τιμή της κατακόρυφης συντεταγμένης.

ü  Circle (x, y, radius): Σχεδιάζει κύκλο με κέντρο (x, y) και radius=ακτίνα.

ü  OutTextXY(X,Y: Integer; TextString: string); Στέλνει ένα string στην οθόνη.

 

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

 

 

 

 

 

 

 

 

 

 

 

 

                                                          σχήμα 2

 

Το πρόβλημα που προκύπτει είναι ότι δεν μπορούμε να αναπαραστήσουμε σημεία που έχουν μία ή δύο αρνητικές συντεταγμένες. Για το λόγο αυτό θα πρέπει να κατασκευάσετε δύο νέους άξονες με κέντρο κάποιο άλλο σημείο Κ της οθόνης, ορίζοντας τα κατάλληλα σημεία (2 για κάθε άξονα) και χρησιμοποιώντας την εντολή line. Αν Κ(χκκ) το νέο κέντρο, τότε, όπως φαίνεται στο σχήμα 3, τα σημεία που χρειαζόσαστε, μαζί με τις συντεταγμένες τους, είναι τα:

 

Μ(0, yκ), Μ΄(getmaxX, yκ), Ν(χκ ,0) και Ν΄(χκ, getmaxY)

 

 

 

 

 

 

 

 

                                                σχήμα 3

 

Μετά τη δημιουργία αξόνων, το ερώτημα είναι πώς θα προκύψει ο μετασχηματισμός της συμμετρίας. Οι εξισώσεις διαφοροποιούνται, αφού έχουμε μεταφορά των αρχικών μας αξόνων. Εδώ θα μελετήσουμε την περίπτωση, όπου το κέντρο Κ(χκκ) των αξόνων έχει μεταφερθεί στο κέντρο της οθόνης.

 

 

 

 

 

 

 

 

 

 

 

 

                                                σχήμα 4

 

Όπως θα παρατηρήσετε στο παραπάνω σχήμα, αν (X,Y) είναι οι συντεταγμένες ενός σημείου ως προς το νέο σύστημα αξόνων και (X1,Y1) οι συντεταγμένες που εσείς θέλετε να αναπαραστήσετε (τις δίνετε από πληκτρολόγιο), τότε οι μεταξύ τους σχέσεις δίνονται από τους τύπους X=(AB/2)+X1, Y=(AΓ/2)-Υ1.

 

Για να απεικονίσετε σημεία στο νέο σύστημα αξόνων, θα πρέπει να μετατρέψετε τις συντεταγμένες (Χ1, Υ1) σε (Χ, Υ) σύμφωνα με τους παραπάνω τύπους.

 

 

Κατασκευή νέων αξόνων

 

Το κέντρο των αξόνων (σημείο (0,0)) αντιστοιχεί στο πάνω αριστερό άκρο της οθόνης, η τετμημένη ενός σημείου Μ προβάλλεται στον οριζόντιο άξονα και η τεταγμένη του στον κάθετο άξονα. Με βάση τις ρουτίνες getmaxX και getmaxY (όπου getmaxX: επιστρέφει τη μεγίστη τιμή της οριζόντιας συντεταγμένης και getmaxY: επιστρέφει τη μεγίστη τιμή της κατακόρυφης συντεταγμένης), η οθόνη θα έχει την ακόλουθη εμφάνιση.

 

Οθόνη

Το πρόβλημα που προκύπτει είναι ότι δεν μπορούμε να αναπαραστήσουμε σημεία που έχουν μία ή δύο αρνητικές συντεταγμένες. Για το λόγο αυτό θα πρέπει να κατασκευάσετε δύο νέους άξονες με κέντρο κάποιο άλλο σημείο Κ της οθόνης, ορίζοντας τα κατάλληλα σημεία (2 για κάθε άξονα) και χρησιμοποιώντας την εντολή line. Αν Κ(χκκ) το νέο κέντρο, τότε, όπως φαίνεται στο παρακάτω σχήμα, τα σημεία που χρειάζεστε, μαζί με τις συντεταγμένες τους, είναι τα:

 

Μ(0, yκ), Μ΄(getmaxX, yκ), Ν(χκ ,0) και Ν΄(χκ, getmaxY)

 

 

Program axones;

 {ΔΗΜΙΟΥΡΓΙΑ ΑΞΟΝΩΝ}

 uses crt,Graph;

 var grDriver,grMode, Xk,Yk: Integer;

 begin

 grDriver := Detect;

 InitGraph(grDriver, grMode,'bgi');

 setcolor(green);

 outtextXY (150,10, ‘ΔΗΜΙΟΥΡΓΙΑ ΑΞΟΝΩΝ ');

 {ΟΡΙΣΜΟΣ ΚΕΝΤΡΟΥ}

 xk:= 100;

 yk:= 134;

 setcolor(lightred);

 outtextXY (xk+4, yk-8, 'K(100,134)');

 {ΔΗΜΙΟΥΡΓΙΑ ΑΞΟΝΩΝ}

 setcolor(red);

 Line(xk , 0, xk, getmaxY);

 Line(0,yk, getmaxX, yk);

 {EXODOS}

 setcolor(YELLOW);

 outtextXY (550,550, 'MINIMIZE GIA EPISTROFI ');

 writeln ( 'ENTER GIA EXODO');

 Readln;

 

end.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Κατεβάστε το πρόγραμμα εδώ.

Κατεβάστε το εκτελέσιμο αρχείο εδώ.

 

 

Ποιες προσθήκες πρέπει να δημιουργήσετε στο πρόγραμμα my1_8a, ώστε οι συντεταγμένες του κέντρου (χκκ) να δίνονται από το πληκτρολόγιο; Μετονομάστε το πρόγραμμα σε my1_8b και αποθηκεύστε το στο φάκελο     εργασίας σας. Πειραματιστείτε με τις μεταβολές των αξόνων, δίνοντας τις κατάλληλες τιμές στις συντεταγμένες του κέντρου. Για παράδειγμα, μετατοπίστε μόνο τον οριζόντιο άξονα στο 1/3 της οθόνης. Στη συνέχεια μετατοπίστε  και τους δύο άξονες του ερωτήματος 1 κατά 150 pixels.

 

Κατεβάστε το πρόγραμμα εδώ.

Κατεβάστε το εκτελέσιμο αρχείο εδώ.

 

Τι έχετε να παρατηρήσετε για τα σημεία Μ, Μ΄, Ν, Ν΄, αν το κέντρο Κ(χκ,ψκ) των αξόνων μεταφερθεί στο κέντρο της οθόνης; Γράψτε τους τύπους των συντεταγμένων με τη βοήθεια των getmaxX και getmaxY. Κάντε τις κατάλληλες προσθήκες στο πρόγραμμα my1_8a, μετονομάστε το σε my1_8c και αποθηκεύστε το στο φάκελο εργασίας σας.

 

 

Χκ=

 

Υκ=

 

 

Κατεβάστε το πρόγραμμα εδώ.

Κατεβάστε το εκτελέσιμο αρχείο εδώ.