How do you draw an ellipse/oval in turtle graphics (python)? I want to be able to draw an ellipse and part of an ellipse using the circle() function or similar. I can stamp one using #turtlesize(stretch_wid=None, stretch_len=10, outline=None). But I don't want it to be color filled.
2
votes
5 Answers
7
votes
I made my own function for drawing ovals that I personally think is very useful:
def talloval(r): # Verticle Oval
turtle.left(45)
for loop in range(2): # Draws 2 halves of ellipse
turtle.circle(r,90) # Long curved part
turtle.circle(r/2,90) # Short curved part
def flatoval(r): # Horizontal Oval
turtle.right(45)
for loop in range(2):
turtle.circle(r,90)
turtle.circle(r/2,90)
The r
is the radius of the circle and it controls how big the ellipse is. The reason for the turn left/right is because without it, the ellipse is diagonal.
4
votes
We can make an ellipse using its parametric equation in Turtle module. The code below might be a bit long but using this we can draw the ellipse in any orientation as required.You can edit it according to the requirement.We are basically changing the parametric angle of ellipse and plotting the curve.
import turtle
import math
def ellipse(a, b, h=None, k=None, angle=None, angle_unit=None):
myturtle = turtle.Turtle()
if h is None:
h = 0
if k is None:
k = 0
# Angle unit can be degree or radian
if angle is None:
angle = 360
converted_angle = angle*0.875
if angle_unit == 'd' or angle_unit is None:
converted_angle = angle * 0.875
# We are multiplying by 0.875 because for making a complete ellipse we are plotting 315 pts according
# to our parametric angle value
elif angle_unit == "r":
converted_angle = (angle * 0.875 * (180/math.pi))
# Converting radian to degrees.
for i in range(int(converted_angle)+1):
if i == 0:
myturtle.up()
else:
myturtle.down()
myturtle.setposition(h+a*math.cos(i/50), k+b*math.sin(i/50))
turtle.done()
1
votes
0
votes