63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
from math import sqrt
|
|
from multipledispatch import dispatch
|
|
|
|
class PointXY():
|
|
def distance_from_zero(point):
|
|
return sqrt( point.x ** 2 + point.y ** 2 )
|
|
|
|
def distance_to(self, point):
|
|
return sqrt( (point.x - self.x) ** 2 + (point.y - self.y) ** 2)
|
|
|
|
def if_inside(self, r):
|
|
if (r.a.x <= self.x <= r.b.x) and (r.a.y <= self.y <= r.b.y):
|
|
return 'точка внутри прямоуголника'
|
|
else:
|
|
return 'точка вне прямоугольника'
|
|
|
|
def __init__(self, x:int, y:int):
|
|
self.x = x
|
|
self.y = y
|
|
|
|
def __str__(self):
|
|
return 'x = ' + str(self.x) + ' y = ' + str(self.y)
|
|
|
|
class Rect():
|
|
def area(self):
|
|
return self.lenght * self.width
|
|
|
|
def perimeter(self):
|
|
return (self.lenght + self.width) * 2
|
|
|
|
def scale(self, coef):
|
|
self.lenght *= coef
|
|
self.width *= coef
|
|
|
|
def rotate(self):
|
|
self.lenght, self.width = self.width, self.lenght
|
|
|
|
def has_inside(self, p: PointXY):
|
|
if (self.a.x <= p.x <= self.b.x) and (self.a.y <= p.y <= self.b.y):
|
|
return 'точка внутри прямоуголника'
|
|
else:
|
|
return 'точка вне прямоугольника'
|
|
|
|
@dispatch(int, int)
|
|
def __init__(self, x: int, y: int):
|
|
self.lenght = x
|
|
self.width = y
|
|
|
|
@dispatch(PointXY, PointXY)
|
|
def __init__(self, a: PointXY, b: PointXY):
|
|
self.a = a
|
|
self.b = b
|
|
self.lenght = sqrt((a.x - a.x) ** 2 + (b.x - a.y) ** 2)
|
|
self.width = sqrt((b.x - a.x) ** 2 + (b.y - b.x) ** 2)
|
|
|
|
def __str__(self):
|
|
if str(hasattr(self, 'a')) == 'False':
|
|
return 'x = ' + str(self.lenght) + ' y = ' + str(self.width)
|
|
else:
|
|
return 'x = ' + str(self.lenght) + ' y = ' + str(self.width) + ' a(' + str(self.a.x) + ':' + str(self.a.y) + ')' + ' b(' + str(self.b.x) + ':' + str(self.b.y) + ')'
|
|
|
|
|