Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- from graph import *
- from math import sin, cos, pi
- # via https://gist.github.com/blzzua/063b1d8d05663c7c00fdf6fabc3a87b5
- def ellipse( x1, y1, x2, y2, angle_degrees=0, vertex_count = 36):
- """
- Рисует эллипс, вписанный в прямоугольник x1,y1 x x2,y2
- """
- angle_rad = angle_degrees * pi / 180
- print(f'angle_degrees={angle_degrees}, angle_rad={angle_rad}')
- (x1, x2) = (min(x1, x2), max(x1, x2))
- (y1, y2) = (min(y1, y2), max(y1, y2))
- a = (x2 - x1) / 2
- b = (y2 - y1) / 2
- ## https://ru.wikipedia.org/wiki/Эллипс#Уравнения_в_параметрической_форме
- TMP_VERTEX = [ (a * cos( i * 2 * pi / vertex_count), \
- b * sin( i * 2 * pi / vertex_count)) \
- for i in range(vertex_count) ]
- VERTEX = []
- for x,y in TMP_VERTEX:
- tx = x * cos(angle_degrees) + y * sin(angle_degrees) + ( x1 + x2 ) / 2
- ty = -1 * x * sin(angle_degrees) + y * cos(angle_degrees) + ( y1 + y2 ) / 2
- VERTEX.append((tx,ty))
- mypol = polygon(VERTEX)
- return mypol
- if __name__ == '__main__':
- "демонстрация. рисует разноцветные эллипсы"
- from random import randrange
- max_x = 500
- max_y = 600
- min_x = 10
- min_y = 10
- for i in range(20):
- brushColor(randColor())
- penColor(randColor())
- (x1, y1) = (randrange(start=min_x, stop=max_x),
- randrange(start=min_y, stop=max_y))
- (x2, y2) = (randrange(start=min_x, stop=max_x),
- randrange(start=min_y, stop=max_y))
- ellipse(x1, y1, x2, y2, angle_degrees=randrange(180), vertex_count=randrange(8,30) )
- run()
Add Comment
Please, Sign In to add comment