Guest User

Untitled

a guest
Aug 15th, 2020
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.77 KB | None | 0 0
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. from graph import *
  4. from math import sin, cos, pi
  5. # via https://gist.github.com/blzzua/063b1d8d05663c7c00fdf6fabc3a87b5
  6. def ellipse( x1, y1, x2, y2, angle_degrees=0, vertex_count = 36):
  7.     """
  8.    Рисует эллипс, вписанный в прямоугольник x1,y1 x x2,y2
  9.    """
  10.     angle_rad = angle_degrees * pi / 180
  11.     print(f'angle_degrees={angle_degrees}, angle_rad={angle_rad}')
  12.     (x1, x2) = (min(x1, x2), max(x1, x2))
  13.     (y1, y2) = (min(y1, y2), max(y1, y2))
  14.     a = (x2 - x1) / 2
  15.     b = (y2 - y1) / 2
  16.     ## https://ru.wikipedia.org/wiki/Эллипс#Уравнения_в_параметрической_форме
  17.     TMP_VERTEX = [ (a * cos( i * 2 * pi / vertex_count), \
  18.                     b * sin( i * 2 * pi / vertex_count)) \
  19.                     for i in range(vertex_count) ]
  20.     VERTEX = []
  21.     for x,y in TMP_VERTEX:
  22.         tx =      x * cos(angle_degrees) + y * sin(angle_degrees) + ( x1 + x2 ) / 2
  23.         ty = -1 * x * sin(angle_degrees) + y * cos(angle_degrees) + ( y1 + y2 ) / 2
  24.         VERTEX.append((tx,ty))
  25.  
  26.     mypol = polygon(VERTEX)
  27.     return mypol
  28.  
  29.  
  30. if __name__ == '__main__':
  31.     "демонстрация. рисует разноцветные эллипсы"
  32.     from random import randrange
  33.     max_x = 500
  34.     max_y = 600
  35.     min_x = 10
  36.     min_y = 10
  37.     for i in range(20):
  38.         brushColor(randColor())
  39.         penColor(randColor())
  40.         (x1, y1) = (randrange(start=min_x, stop=max_x),
  41.                     randrange(start=min_y, stop=max_y))
  42.         (x2, y2) = (randrange(start=min_x, stop=max_x),
  43.                     randrange(start=min_y, stop=max_y))
  44.         ellipse(x1, y1, x2, y2, angle_degrees=randrange(180), vertex_count=randrange(8,30) )
  45.     run()
  46.  
Add Comment
Please, Sign In to add comment