Reputation:
I need to draw the image on the right , however my code generates the image on the left .How do I fix this error? I have tried manipulating the s value ,however that messes up the code further.On both the x and y axis , my s is increasing ,however we do not want that .We want the value of s to remain the same uptil a point .
import turtle
T = turtle.Turtle()
turtle.tracer(0,0)
T.speed(0)
T.pensize(3)
zoom = 40
def drawshape(A,sidelength,s):
for x in range(s):
angle=360/s
A.forward(sidelength)
A.right(angle)
def patternA(T,n,s):
for j in range(0,(n+1) // 2):
T.penup()
for i in range(1,(n+1)//2):
if s <= 1 :
return()
else:
T.penup()
T.setpos((j)* zoom, (i) * zoom)
T.pendown()
sidelength=12
drawshape(T,sidelength,s)
T.penup()
s=s-1
s=3
for i in range(((n+1)//2),n+1):
T.penup()
if s <= 1 :
return()
else:
T.penup()
T.setpos((j)* zoom, (i) * zoom)
T.pendown()
sidelength=12
drawshape(T,sidelength,s)
T.penup()
s=s+1
s=6
n=7
patternA(T,n,s)
def patternB(T,n,s):
for j in range(1,((n+1)//2)):
for i in range(1,(n+1)//2):
if s <= 1 :
return()
else:
T.penup()
T.setpos((-j)* zoom, (i) * zoom)
T.pendown()
sidelength=12
drawshape(T,sidelength,s)
s=s-1
s=3
for i in range(((n+1)//2),n+1):
if s <= 1 :
return()
else:
T.penup()
T.setpos((-j)* zoom, (i) * zoom)
T.pendown()
sidelength=12
drawshape(T,sidelength,s)
s=s+1
s=5
n=7
patternB (T, n, s)
turtle.update()
turtle.done()
Upvotes: 0
Views: 383
Reputation: 41872
The key to this problem is to take the min()
of the polygon's distance from the X and Y axes. Here's a solution that's a minor change to my answer to your earlier "Drawing a pattern using turtle" question:
from turtle import Screen, Turtle
DISTANCE = 50
def dualsaddle(t, n, minimum=3):
assert n % 2 == 1, "n should be odd"
t.penup()
for x in range(-n // 2 + 1, n // 2 + 1):
t.setx(x * DISTANCE)
for y in range(-n // 2 + 1, n // 2 + 1):
t.sety(y * DISTANCE)
t.pendown()
t.circle(10, steps=minimum + min(abs(x), abs(y)))
t.penup()
screen = Screen()
screen.tracer(False)
turtle = Turtle()
turtle.hideturtle()
turtle.pensize(3)
dualsaddle(turtle, 7)
screen.tracer(True)
screen.exitonclick()
Upvotes: 1
Reputation:
Here is my attempt-
import turtle
T=turtle.Turtle()
zoom = 50
T.speed(0)
turtle.tracer(0,0)
def drawshape(T,sidelength,s):
for x in range(s):
angle=360/s
T.pendown()
T.forward(sidelength)
T.right(angle)
T.penup()
def dualsaddle(T, n):
T.penup()
for x in range(-n // 2 + 1, n // 2 + 1):
T.setx(x * zoom)
for y in range(-n // 2 + 1, n // 2 + 1):
T.sety(y * zoom)
sidelength=10
if abs(x)==0 or abs(y)==0:
drawshape(T,sidelength,3)
elif abs(x)==1 or abs(y)==1:
drawshape(T,sidelength,4)
elif abs(x)==2 or abs(y)==2:
drawshape(T,sidelength,5)
elif abs(x)==3 or abs(y)==3:
drawshape(T,sidelength,6)
for i in range (7):
dualsaddle(turtle, 7)
turtle.hideturtle()
turtle.update()
turtle.done()
Upvotes: 1