мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
python:week15 [09/03/2018 10:52] – [Работа с цветами] ybezrukovpython:week15 [16/03/2018 11:39] (текущий) – [Сегмент] ybezrukov
Строка 115: Строка 115:
   * ''getP1(), getP2()'' - возвращает соответственно, координаты левого нижнего и правого верхнего углов прямоугольника, в который вписан овал.   * ''getP1(), getP2()'' - возвращает соответственно, координаты левого нижнего и правого верхнего углов прямоугольника, в который вписан овал.
  
 +
 +===== Сегмент =====
 +
 +К сожалению, библиотека не содержит в себе встроенной функции для отрисовки сегмента окружности или овала. Однако, это питон и никто не мешает нам дописать необходимую функциональность.
 +
 +Добавим в начало программы следующий код:
 +
 +<code python>
 +class Arc(Oval):        
 +    
 +    def __init__(self, p1, p2,start, extent):
 +        self.extent = extent
 +        self.start = start
 +        super().__init__(p1, p2)
 +
 +    def __repr__(self):
 +        return "Arc({}, {}, {})".format(str(self.p1), str(self.p2), self.extent)
 +
 +    def clone(self):
 +        other = Arc(self.p1, self.p2, self.start, self.extent)
 +        other.config = self.config.copy()
 +        return other
 +
 +    def _draw(self, canvas, options):
 +        p1 = self.p1
 +        p2 = self.p2
 +        x1, y1 = canvas.toScreen(p1.x, p1.y)
 +        x2, y2 = canvas.toScreen(p2.x, p2.y)
 +        options['style'] = tk.PIESLICE
 +        options['extent'] = self.extent
 +        options['start'] = self.start
 +        return canvas.create_arc(x1, y1, x2, y2, options)
 +</code>
 +
 +Теперь в нашей программе появилась возможность рисовать сегменты окружности, например:
 +
 +<code python>
 +arc = Arc(Point(50, 50), Point(100, 100), 45, 270)
 +arc.setFill("yellow")
 +arc.draw(win)
 +</code>
 +
 +  * Arc(point1, point2, start_angle, segemnt_angle) - создает сегмент овала, который вписан в прямоугольник с заданными левым нижним и правым верхним углами. start_angle - начальный угол с которого начинает рисоваться сегмент, segment_angle - угол закрашенного участка.
 +  * getCenter() - возвращает координаты центра овала.
 +  * getP1(), getP2() - возвращает соответственно, координаты левого нижнего и правого верхнего углов прямоугольника, в который вписан овал.
 ===== Многоугольник ===== ===== Многоугольник =====
   * ''Polygon(point1, point2, point3, ...)'' - создает замкнутый многоугольник по заданному набору вершин. В качестве аргумента может быть и список. Например: ''aPolygon = Polygon(Point(1,2), Point(3,4), Point(5,6))'' или ''aPolygon = Polygon([Point(1,2), Point(3,4), Point(5,6)])''   * ''Polygon(point1, point2, point3, ...)'' - создает замкнутый многоугольник по заданному набору вершин. В качестве аргумента может быть и список. Например: ''aPolygon = Polygon(Point(1,2), Point(3,4), Point(5,6))'' или ''aPolygon = Polygon([Point(1,2), Point(3,4), Point(5,6)])''
Строка 152: Строка 197:
 Во втором случае, цвета задаются с помощью функции color_rgb(r, g, b). Ее аргументами являются числовые значения цветовых компонент: красной, зеленой и синей. Значения каждой от 0 до 255. Например aCircle.setFill(color rgb(130, 0, 130)) задаст цвет заливки окружности чуть светлее, чем darkmagenta из предыдущей таблицы. Во втором случае, цвета задаются с помощью функции color_rgb(r, g, b). Ее аргументами являются числовые значения цветовых компонент: красной, зеленой и синей. Значения каждой от 0 до 255. Например aCircle.setFill(color rgb(130, 0, 130)) задаст цвет заливки окружности чуть светлее, чем darkmagenta из предыдущей таблицы.
  
 +
 +===== Задачи =====
 ==== Задание 18 ==== ==== Задание 18 ====
  
 Написать программу, которая рисует на экране точки, расположенные на окружности. Координаты точек требуется вычислять в полярной системе координат. Написать программу, которая рисует на экране точки, расположенные на окружности. Координаты точек требуется вычислять в полярной системе координат.
 +
 +https://nsunc.com/moodle/mod/assign/view.php?id=656
  
 ==== Задание 19 ==== ==== Задание 19 ====
  
 Модифицировать предыдущую программу так, чтобы точки располагались по спирали Модифицировать предыдущую программу так, чтобы точки располагались по спирали
 +
 +https://nsunc.com/moodle/mod/assign/view.php?id=657
  
 ==== Задание 20 ==== ==== Задание 20 ====
Строка 164: Строка 215:
 Модифицировать прогрмму из задания 18 так, чтобы: Модифицировать прогрмму из задания 18 так, чтобы:
  
-1. Вместо точек рисовались окружности +  - Вместо точек рисовались окружности 
-2. Когда рисуется следующая окружность, предыдущая должна удаляться+  Когда рисуется следующая окружность, предыдущая должна удаляться 
 + 
 +https://nsunc.com/moodle/mod/assign/view.php?id=658
  
 ==== Задание 21 (планеты со спутниками) ==== ==== Задание 21 (планеты со спутниками) ====
  
 Добавить еще одну точку для вращения, которая будет двигаться вместе с окружностью. Запустить вокруг нее еще одну окружность. В центре разместить Солнце Добавить еще одну точку для вращения, которая будет двигаться вместе с окружностью. Запустить вокруг нее еще одну окружность. В центре разместить Солнце
 +
 +https://nsunc.com/moodle/mod/assign/view.php?id=659
  
 ==== Задание 22 ==== ==== Задание 22 ====
  
 Написать программу, в которой N точек двигались бы по одной окружности Написать программу, в которой N точек двигались бы по одной окружности
 +
 +https://nsunc.com/moodle/mod/assign/view.php?id=660
  
 ==== Задание 23 ==== ==== Задание 23 ====
  
 Модифицировать программу так, чтобы точки были соединены линиями Модифицировать программу так, чтобы точки были соединены линиями
 +
 +https://nsunc.com/moodle/mod/assign/view.php?id=661
  
 ==== Задание 24 ==== ==== Задание 24 ====
  
 Модифицировать предыдущую программу так, чтобы вышла иллюзия вращающейся пирамидки Модифицировать предыдущую программу так, чтобы вышла иллюзия вращающейся пирамидки
 +
 +https://nsunc.com/moodle/mod/assign/view.php?id=662