Tutorial Request: drawing multi sided polygons w/ Bezier Curves
micahmicah last edited by gferreira
I'm still a bit new to programmatic drawing and I was curious about writing scripts to make multi-sided polygons such as triangles, hexagons, etc. using the BezierPath() method.
My math skills are rather rusty at this point so I'd love some pointers.
gferreira last edited by
regular polygons can be described using vectors.
a vector has a length and an angle.
in regular polygons:
- all sides have the same length
- the sum of all external angles is 360°
here is a simple example in code:
# define polygon parameters x, y = 300, 200 sides = 5 perimeter = 1640 angleStart = 0 angleTotal = 360 autoclose = True # calculate side length & angle side = perimeter / sides angleStep = abs(angleTotal / sides) # convert angles to radians! angleStep = radians(angleStep) angleStart = radians(angleStart) # create the polygon shape B = BezierPath() angle = angleStart for i in range(sides): # this is the crucial part: # use trigonometry to calculate point B # from point A, angle, and distance x += cos(angle) * side y += sin(angle) * side if i == 0: B.moveTo((x, y)) else: B.lineTo((x, y)) angle += angleStep if autoclose: B.closePath() fill(0, 1, 1) strokeWidth(30) lineCap('round') lineJoin('round') stroke(1, 0, 1) drawPath(B)
gferreira last edited by gferreira
from turtle import * x, y = 300, 200 sides = 7 side = 100 angleTotal = 360 angleStep = abs(angleTotal / sides) Screen() t = Turtle() for i in range(sides): t.forward(side) t.left(angleStep) done()
↳ run this script in Terminal or SublimeText
micahmicah last edited by
Thank you so much!