diff --git a/uebung_05/exercise_01/exercise_01.py b/uebung_05/exercise_01/exercise_01.py new file mode 100644 index 0000000..f18c0e9 --- /dev/null +++ b/uebung_05/exercise_01/exercise_01.py @@ -0,0 +1,20 @@ +class Ball: + __diameter__ = 0.0 + + ## Methods + # Constructor + def __init__(self, diameter = 1.0): + self.__diameter__ = diameter + pass + + # a simple method + def introduction(self): + print(f"My diameter is {self.__diameter__:.3f}.") + pass + +# main code +a = Ball() +b = Ball(2.0) + +a.introduction() +b.introduction() diff --git a/uebung_05/exercise_02/exercise_02.py b/uebung_05/exercise_02/exercise_02.py new file mode 100644 index 0000000..92290c8 --- /dev/null +++ b/uebung_05/exercise_02/exercise_02.py @@ -0,0 +1,51 @@ +import numpy as np + +class Ball: + __diameter__ = 0.0 + + ## Methods + # Constructor + def __init__(self, diameter = 1.0): + self.__diameter__ = diameter + pass + + # a simple method + def introduction(self): + print(f"My diameter is {self.__diameter__:.3f}.") + pass + + # Getter + def get_diameter(self): + return self.__diameter__ + + # overload __add_ (+) + def __add__(self, other): + d1 = self.get_diameter() + + if(isinstance(other, Ball)): + d2 = other.get_diameter() + combined_volume = 1/6 * np.pi * (d1**3 + d2**3) + elif(isinstance(other, int) or isinstance(other, float)): + combined_volume = 1/6 * np.pi*d1**3 + other + else: + raise ValueError("Invalid summand.") + d_combined = np.power(6 * combined_volume / np.pi, 1/3) + return Ball(d_combined) + + # overload __radd__ (number + Ball) + def __radd__(self, other): + return self + other + +# main code +a = Ball() +b = Ball(2.0) + +c = a + b + +d = a + 5 +e = 5 + a + +a.introduction() +b.introduction() +c.introduction() +d.introduction() diff --git a/uebung_05/exercise_03/.exercise_03.py.swp b/uebung_05/exercise_03/.exercise_03.py.swp new file mode 100644 index 0000000..06bd1b1 Binary files /dev/null and b/uebung_05/exercise_03/.exercise_03.py.swp differ diff --git a/uebung_05/exercise_03/: b/uebung_05/exercise_03/: new file mode 100644 index 0000000..5c4e9eb --- /dev/null +++ b/uebung_05/exercise_03/: @@ -0,0 +1,65 @@ +import math + +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): + x = 0.0 + y = 0.0 + + 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): + if isinstance(other, Point) or isinstance(other, int) or isinstance(other, float): + return self + (-other) + else: + raise ValueError("Operand must be Point, int or float.") + + 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) + +print(p2.rot(math.pi * 2)) diff --git a/uebung_05/exercise_03/exercise_03.py b/uebung_05/exercise_03/exercise_03.py new file mode 100644 index 0000000..53fcd5e --- /dev/null +++ b/uebung_05/exercise_03/exercise_03.py @@ -0,0 +1,79 @@ +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): + x = 0.0 + y = 0.0 + + 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): + if isinstance(other, Point) or isinstance(other, int) or isinstance(other, float): + return self + (-other) + else: + raise ValueError("Operand must be Point, int or float.") + + 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) + +plt.plot(p1.get_x(), p1.get_y(), "orange", marker = "o") +plt.plot(p2.get_x(), p2.get_y(), "green", marker = "o") +plt.plot(p3.get_x(), p3.get_y(), "yellow", marker = "o") +plt.plot(p4.get_x(), p4.get_y(), "purple", marker = "o") +plt.plot(p5.get_x(), p5.get_y(), "purple", marker = "o") + +plt.title("Points") +plt.xlabel("x") +plt.ylabel("y") + +plt.show()