# -*- coding: utf-8 -*- ####ID 25-point-plane-2 #### Άσκηση: (Συνέχεια της προηγούμενης άσκησης) #### Αντιγράψτε από την προηγούμενη άσκηση τους ορισμούς των class Point και class Plane καθώς και όλες τις μεθόδους αυτών. #### #### Προσθέστε τη μέθοδο parallelto στην class Plane η οποία παίρνει ως όρισμα ένα άλλο επίπεδο (τύπου class Plane) #### και επιστρέφει True ή False ανάλογα με το αν το επίπεδο αυτό είναι παράλληλο με το self. Θυμίζουμε ότι δύο επίπεδα #### είναι παράλληλα αν και μόνο αν τα κάθετά τους διανύσματα είναι πολλαπλάσιο το ένα του άλλου, και επίσης ότι #### ένα κάθετο διάνυσμα του επιπέδου Ax+Bx+Cz=D είναι το (A, B, C). #### #### Σας δίδεται γραμμένη η μέθοδος unitnormalvector του class Plane την οποία μπορείτε αν θέλετε να χρησιμοποιήσετε. #### Η μέθοδος αυτή επιστρέφει ένα κάθετο διάνυσμα στο επίπεδο με μήκος 1. Υπάρχουν δύο τέτοια μοναδιαία κάθετα #### διανύσματα για κάθε επίπεδο. #### #### Γράφετε τον κώδικά σας αποκλειστικά ανάμεσα στις γραμμές START και STOP παρακάτω. #### Δεν πρέπει να πειράξετε καθόλου τις υπόλοιπες γραμμές #### #### Για να τρέξετε το πρόγραμμά σας (αποθηκευμένο στο αρχείο user.py) δίνετε την εντολή #### #### python user.py import math #### Απαιτήσεις: Περιγράφονται παρακάτω. #### #### Μην αλλάξετε ό,τι είναι από τη γραμμή START και πάνω #### #### ΔΕΝ ΕΠΙΤΡΕΠΟΝΤΑΙ εντολές print ή input στο πρόγραμμά σας #### ####START Από δω και κάτω γράφετε το πρόγραμμά σας.---------------------------------------------------------------- class Point: # Εδώ ορίζεται το class Point def __str__(self): # Μη πειράξετε αυτή τη μέθοδο """ Επιστρέφει την περιγραφή του αντικειμένου σε μορφή string. Αυτό είναι που τυπώνεται αν καλέσουμε τη συνάρτηση print για αυτό το αντικείμενο """ return '({x}, {y}, {z})'.format(x=self.x, y=self.y, z=self.z) def __init__(self, x=0, y=0, z=0): # Γράψτε αυτή τη μέθοδο ποη δημιουργεί ένα νέο σημείο. Το σημείο αυτό θα πρέπει να έχει # τα πεδία (attributes) x, y και z στα οποία αποθηκεύονται οι συντεταγμένες του. """ Δημιουργούμε σημείο με συντεταγμένες x, y, z """ class Plane: def __str__(self): # Μη πειράξετε αυτή τη μέθοδο """ Επιστρέφει την περιγραφή του αντικειμένου σε μορφή string. Αυτό είναι που τυπώνεται αν καλέσουμε τη συνάρτηση print για αυτό το αντικείμενο """ return '[Plane with equation {A}x+{B}y+{C}z={D}]'.format(A=self.A, B=self.B, C=self.C, D=self.D) def __init__(self, A, B, C, D): # Γράψτε αυτή τη μέθοδο που δημιουργεί ένα νέο επίπεδο με εξίσωση Ax+By+Cz=D. # Το επίπεδο αυτό θα πρέπει να έχει τα πεδία (attributes) A, B, C και D, στα οποία # αποθηκεύονται οι συντελεστές της εξίσωσης. """ Δημιουργούμε επίπεδο με εξίσωση Ax+By+Cz=D """ def contains(self, p): # Γράψτε αυτή τη μέθοδο. Δείτε παρακάτω μετά από τη γραμμή STOP πώς αυτή πρέπει να καλείται. """ Αυτή η μέθοδος πρέπει να επιστρέφει True ή False ανάλογα με το αν το σημείο p (που είναι τύπου class Point) περιέχεται στο επίπεδο """ def unitnormalvector(self): # Μη πειράξετε αυτή τη μέθοδο """ Επιστρέφει (σε μορφή class Point) το ένα από τα δύο μοναδιαία κάθετα διανύσματα του επιπέδου self. Κάθε επίπεδο έχει ακριβώς δύο κάθετα διανύσματα το ένα αντίθετο από το άλλο.""" length = math.sqrt(self.A*self.A+self.B*self.B+self.C*self.C) a = self.A/length; b = self.B/length; c = self.C/length return Point(a, b, c) def parallelto(self, pl): # Γράψτε αυτή τη μέθοδο. Δείτε παρακάτω μετά από τη γραμμή STOP πώς αυτή πρέπει να καλείται. """ Επιστρέφει True αν και μόνο αν τα δύο επίπεδα self και pl είναι παράλληλα μεταξύ τους """ ####STOP Μην αλλάξετε ό,τι είναι από τη γραμμή αυτή και κάτω-------------------------------------------------------- plane1 = Plane(1, 1, 2, -1.7) # Ορίζουμε ένα επίπεδο plane2 = Plane(1, 1, 1, 3) # και άλλο ένα επίπεδο plane3 = Plane(-2, -2, -4, 7) # και άλλο ένα for pl in [plane1, plane2]: # ελέγχουμε αν το plane3 είναι παράλληλο προς τα plane1, plane2 if plane3.parallelto(pl): print pl, "is parallel to", plane3 else: print pl, "is not parallel to", plane3