Uebung 05

This commit is contained in:
Niklas Birk 2023-11-29 19:28:40 +01:00
parent 9ec5cbf084
commit 4c00a2c0b1
5 changed files with 215 additions and 0 deletions

View File

@ -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()

View File

@ -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()

Binary file not shown.

65
uebung_05/exercise_03/: Normal file
View File

@ -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))

View File

@ -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()