46 lines
1.8 KiB
Python
46 lines
1.8 KiB
Python
# LAB-41: Classe Point (Punto)
|
|
# Obiettivo: rappresentare un punto nel piano cartesiano e calcolare distanze.
|
|
# Concetti chiave: attributi privati, metodi getter, math.hypot.
|
|
|
|
import math # Importiamo il modulo math per usare hypot()
|
|
|
|
|
|
class Point:
|
|
def __init__(self, x=0.0, y=0.0):
|
|
# I parametri hanno valori di default (0.0), quindi si può creare
|
|
# un punto nell'origine semplicemente scrivendo Point().
|
|
# Il doppio underscore __ rende gli attributi privati (name mangling).
|
|
self.__x = float(x) # convertiamo a float per sicurezza
|
|
self.__y = float(y)
|
|
|
|
def getx(self):
|
|
# Getter: restituisce la coordinata x.
|
|
# Necessario perché __x è privato e non accessibile dall'esterno.
|
|
return self.__x
|
|
|
|
def gety(self):
|
|
# Getter: restituisce la coordinata y.
|
|
return self.__y
|
|
|
|
def distance_from_xy(self, x, y):
|
|
# Calcola la distanza tra questo punto e le coordinate (x, y) fornite.
|
|
# math.hypot(a, b) calcola √(a² + b²), che è esattamente la formula
|
|
# della distanza euclidea: d = √((x2-x1)² + (y2-y1)²)
|
|
return math.hypot(self.__x - x, self.__y - y)
|
|
|
|
def distance_from_point(self, point):
|
|
# Calcola la distanza tra questo punto e un altro oggetto Point.
|
|
# Usiamo i getter dell'altro oggetto per accedere alle sue coordinate private.
|
|
return self.distance_from_xy(point.getx(), point.gety())
|
|
|
|
|
|
# --- TEST ---
|
|
point1 = Point(0, 0) # origine
|
|
point2 = Point(1, 1) # punto a distanza √2 dall'origine
|
|
|
|
# Distanza da point1 a point2: √((1-0)² + (1-0)²) = √2 ≈ 1.4142...
|
|
print(point1.distance_from_point(point2)) # → 1.4142135623730951
|
|
|
|
# Distanza da point2 (1,1) a (2,0): √((2-1)² + (0-1)²) = √2 ≈ 1.4142...
|
|
print(point2.distance_from_xy(2, 0)) # → 1.4142135623730951
|