This commit is contained in:
2026-04-13 15:38:51 +02:00
parent ca2901f4e3
commit d3c2b63b5e
3 changed files with 162 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
# 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