Скопировать файлы
Нужно скопировать себе на компьютер в ту же директорию, где будете писать задачи файлы:
class Point
from grid import Grid
class Point:
def __init__(self, x, y, color="blue"):
self.x = x
self.y = y
self.color = color
def __repr__(self):
return '({}, {})'.format(self.x, self.y)
def draw(self, color='blue'):
g.draw_dot(self.x, self.y, color)
def move(self, dx=0, dy=0):
self.x += dx
self.y += dy
def test_point():
p1 = Point(0, 0)
p1.draw()
p2 = Point(50, -50)
p2.draw('red')
if __name__ == '__main__':
g = Grid()
test_point()
g.done()
class Segment2
Начнем создавать класс Segment2 для описания отрезков на плоскости ХУ
from grid import Grid
import math
class Point:
def __init__(self, x, y, color="blue"):
self.x = x
self.y = y
self.color = color # не используется
def __repr__(self):
return '({}, {})'.format(self.x, self.y)
def draw(self, color='blue'):
g.draw_dot(self.x, self.y, color)
def move(self, dx=0, dy=0):
self.x += dx
self.y += dy
class Segment2:
def __init__(self, start, finish):
self.start = start
self.finish = finish
def __repr__(self):
return '[{}, {}]'.format(repr(self.start), repr(self.finish))
def draw(self, color='blue'):
g.draw_line(
self.start.x,
self.start.y,
self.finish.x,
self.finish.y,
color
)
self.start.draw('red')
self.finish.draw('green')
def length(self):
dx = self.start.x - self.finish.x
dy = self.start.y - self.finish.y
return math.sqrt(dx * dx + dy * dy)
def move(self, dx, dy):
self.start.move(dx, dy)
self.finish.move(dx, dy)
def test_point():
p1 = Point(0, 0)
p1.draw()
p2 = Point(50, -50)
p2.draw('red')
def test1():
p1 = Point(-50, -70)
p2 = Point(10, 90)
s = Segment2(p1, p2)
print(s)
print(s.length())
s.draw('violet')
s.move(-30, -10)
s.draw('blue')
g = Grid()
# test_point()
test1()
g.done()
class Rectangle
Конструктор должен быть такой:
class Rectangle:
def __init__(self, lt, rb):
self.lt = lt # left top point
self.rb = rb # right bottom point
Задачи
Задача 1. Трансформация фигуры
Вариант | класс | функция | что делает |
1 | Segment2 | flipH(self) | отображает отрезок относительно оси У |
2 | Segment2 | flipV(self) | отображает отрезок относительно оси X |
3 | Segment2 | move0(self) | передвигает отрезок точкой начала в 0,0 |
4 | Segment2 | sym0(self) | создает центрально симметричный отрезок относительно точки 0,0 |
5 | Segment2 | left(self) | поворачивает отрезок налево на 90 градусов относительно точки 0,0 |
Вариант | класс | функция | что делает |
1 | Rect | flipH(self) | отображает относительно оси У |
2 | Rect | flipV(self) | отображает относительно оси X |
3 | Rect | move0(self) | передвигает отрезок точкой начала в 0,0 |
4 | Rect | sym0(self) | создает центрально симметричный прямоугольник относительно точки 0,0 |
5 | Rect | left(self) | поворачивает прямоугольник налево на 90 градусов относительно точки 0,0 |
Задача 2. Чтение данных
Мьянма: прочитать отрезки из входного файла и нарисовать их.
Остальные: прочитать прямоугольники из входного файла и нарисовать их.
Вариант 1 - отрезки
3
0 0 80 -30
-70 -10 20 10
20 20 30 40
Вариант 2 - отрезки
3
0,0,80,-30
-70,-10,20,10
20,20,30,40
Вариант 3 - отрезки
3
0;0;80;-30
-70;-10;20;10
20;20;30;40
Вариант 4 - отрезки
3
0|0|80|-30
-70|-10|20|10
20|20|30|40
Вариант 5 - отрезки
3
0/0/80/-30
-70/-10/20/10
20/20/30/40
Вариант 6 - прямоугольники
3
0 0 80 -30
-70 10 20 -10
20 40 30 20
Вариант 7 - прямоугольники
3
0,0,80,-30
-70,10,20,-10
20,40,30,20
Вариант 8 - прямоугольники
3
0;0;80;-30
-70;10;20;-10
20;40;30;20
Вариант 9 - прямоугольники
3
0|0|80|-30
-70|10|20|-10
20|40|30|20
Вариант 5 - отрезки
3
0/0/80/-30
-70/-10/20/10
20/20/30/40
Задача 3
Задача 3.1
Отсортировать отрезки по длине
Задача 3.2
Найти самый длинный отрезок
Задача 3.3
Найти самый короткий отрезок
Задача 3.4
Реализовать оператор умножения отрезка на число k, который увеличивает отрезок в k раз относительно его точки старта.
Задача 3.5
Реализовать оператор умножения отрезка на число k, который увеличивает отрезок в k раз относительно его цетра.
Задача 3.6
Написать сложение прямоугольников. Получается прямоугольник, который содержит оба слагаемых.
s1 = Rectangle(Point(0, 0), Point(80, -20))
s2 = Rectangle(Point(-20, 20), Point(10, -50))
s = s1 + s2
print(s1) # [(0, 0), (80, -20)]
print(s2) # [(-20, 20), (10, -50)]
print(s3) # [(-20, 20), (80, -50)]
Задача 3.7
Найти самый большой прямоугольник
Задача 3.8
Отсортировать прямоугольники
Задача 3.9
Реализовать оператор умножения прямоугольника на число k, который увеличивает прямоугольник в k раз относительно его левой верхней точки.
Задача 3.10
Реализовать оператор умножения прямоугольника на число k, который увеличивает прямоугольник в k раз относительно его центра.
tones = [
'violet', # tones[0]
'blue', # tones[1]
'green', # tones[2]
'yellow', # tones[3]
'gold', # tones[4]
'orange', # tones[5]
'red' # tones[6]
]
--
TatyanaDerbysheva - 14 May 2019