# -*- coding: utf-8 -*- ####ID 26-point-plane-3 #### Άσκηση: (Συνέχεια της προηγούμενης άσκησης) #### Αντιγράψτε από την προηγούμενη άσκηση (25-point-plane-2) τους ορισμούς των class Point και class Plane καθώς και όλες τις μεθόδους αυτών. #### #### Προσθέστε στην class Plane τη μέθοδο identicalto που επστρέφει True ή False ανάλογα με το αν τα δύο επίπεδα είναι το ίδιο επίπεδο ή όχι. #### #### Δύο επίπεδα με εξισώσεις Ax+By+Cz=D και ax+by+cz=d είναι το ίδιο επίπεδο αν και μόνο αν οι εξισώσεις αυτές ικανοποιούνται #### από το ίδιο σύνολο σημείων (x, y, z). Αυτό συμβαίνει αν και μόνο αν τα δύο διανύσματα (A, B, C, D) και (a, b, c, d) είναι #### πολλαπλάσια το ένα του άλλου. Επίσης αυτό συμβαίνει αν και μόνο αν τα δύο επίπεδα είναι παράλληλα και περιέχουν κάποιο κοινό σημείο. #### #### Δώστε ιδιαίτερη προσοχή στο γεγονός ότι κάποιοι από τους συντελεστές A, B, C μπορεί να είναι 0 και άρα δε μπορείτε να διαιρέσετε #### με αυτούς. Δεν μπορούν όμως όλοι οι A, B, C να είναι μηδέν γιατί τότε δεν πρόκειται για εξίσωση επιπέδου. #### #### Γράφετε τον κώδικά σας αποκλειστικά ανάμεσα στις γραμμές 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 είναι παράλληλα μεταξύ τους """ def identicalto(self, pl): # Γράψτε αυτή τη μέθοδο. Δείτε παρακάτω μετά από τη γραμμή STOP πώς αυτή πρέπει να καλείται. """ Επιστρέφει True αν και μόνο αν τα δύο επίπεδα self και pl είναι ταυτόσημα, αλλιώς False """ ####STOP Μην αλλάξετε ό,τι είναι από τη γραμμή αυτή και κάτω-------------------------------------------------------- plane1 = Plane(0, 1, 2, -4) # Ορίζουμε ένα επίπεδο plane2 = Plane(0, 1, 2, -3) # και άλλο ένα επίπεδο plane3 = Plane(0, -2, -4, 8) # και άλλο ένα for pl in [plane1, plane2]: # ελέγχουμε αν το plane3 είναι ίδιο με τα plane1, plane2 if plane3.identicalto(pl): print pl, "is the same as", plane3 else: print pl, "is not the same as", plane3