praktikum_wissenschaftliche.../uebung_05/exercise_03/exercise_03.py

75 lines
2.1 KiB
Python
Raw Permalink Normal View History

2023-11-29 18:28:40 +00:00
import math
import matplotlib.pyplot as plt
class Point:
__x__ = 0.0
__y__ = 0.0
def __init__(self, x = 0.0, y = 0.0):
self.__x__ = x
self.__y__ = y
def __str__(self):
return f"({self.__x__:.3f},{self.__y__:.3f})"
def __neg__(self):
return Point(-self.__x__, -self.__y__)
def __add__(self, other):
if isinstance(other, Point):
return Point(self.__x__ + other.__x__, self.__y__ + other.__y__)
elif isinstance(other, int) or isinstance(other, float):
return Point(self.__x__ + other, self.__y__ + other)
else:
raise ValueError("Operand must be Point, int or float.")
def __radd__(self, other):
return self + other
def __sub__(self, other):
2023-11-29 18:40:30 +00:00
return self + (-other)
2023-11-29 18:28:40 +00:00
def __rsub__(self, other):
return self - other
def __mul__(self, other):
if isinstance(other, Point):
return Point(self.__x__ * other.__x__, self.__x__ * other.__y__)
elif isinstance(other, int) or isinstance(other, float):
return Point(self.__x__ * other, self.__x__ * other)
else:
raise ValueError("Operand must be Point, int or float.")
def __rmul__(self, other):
return self * other
def rot(self, degree):
x = math.cos(degree) * self.__x__ + math.sin(degree) * self.__y__
y = -math.sin(degree) * self.__x__ + math.cos(degree) * self.__y__
return Point(x, y)
def get_x(self):
return self.__x__
def get_y(self):
return self.__y__
p1 = Point()
p2 = Point(1, 1)
p3 = Point (3, 2)
p4 = 2 * p2 + p3 - 1
p5 = p4.rot(math.pi / 2)
2023-11-29 18:40:30 +00:00
plt.plot(p1.get_x(), p1.get_y(), "orange", marker = "o", label = p1)
plt.plot(p2.get_x(), p2.get_y(), "green", marker = "o", label = p2)
plt.plot(p3.get_x(), p3.get_y(), "yellow", marker = "o", label = p3)
plt.plot(p4.get_x(), p4.get_y(), "purple", marker = "o", label = 2 * p2 + p3 - 1)
plt.plot(p5.get_x(), p5.get_y(), "purple", marker = "o", label = f"{p4} rotated 90°")
2023-11-29 18:28:40 +00:00
plt.title("Points")
plt.xlabel("x")
plt.ylabel("y")
2023-11-29 18:40:30 +00:00
plt.legend()
2023-11-29 18:28:40 +00:00
plt.show()