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

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
python:week15 [09/03/2018 11:11] 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)])''