2023-11-29 19:28:40 +01:00

66 lines
1.8 KiB
Plaintext

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