generated from mwc/project_drawing
spiderweb with spider finished
I wrote two saparate files to draw spider and spiderweb, then I found that they work individually but cannot draw together in drawing py I tried to 1) change the variable in spider to make it align with spiderweb, not work 2) write them into one file and call their function at end, it work but does not work well Then I realized that it's position thing, when I finish drawing spiderweb, I didn't put the direction back So I tried to fix this in spiderall and it worked; Then I think it should also work in drawing project, which then works too! future project might be make the spider gif from up to down and make firework effect
This commit is contained in:
parent
3b61659fde
commit
a420d01510
Binary file not shown.
Binary file not shown.
Binary file not shown.
20
drawing.py
20
drawing.py
|
@ -4,11 +4,25 @@
|
|||
#
|
||||
# (Halloween Theme with Spider exploding)
|
||||
|
||||
|
||||
from turtle import *
|
||||
from superturtle import *
|
||||
from superturtle.movement import *
|
||||
from spider import *
|
||||
from spiderweb import *
|
||||
|
||||
draw_web(400)
|
||||
hideturtle()
|
||||
done()
|
||||
|
||||
def drawing(side_length):
|
||||
draw_web(side_length)
|
||||
penup()
|
||||
goto(0, 0)
|
||||
setheading(0)
|
||||
pendown()
|
||||
draw_spider()
|
||||
draw_connection_line()
|
||||
hideturtle()
|
||||
done()
|
||||
|
||||
drawing(300)
|
||||
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
from turtle import *
|
||||
from superturtle import *
|
||||
from superturtle.movement import *
|
||||
|
||||
from turtle import *
|
||||
|
||||
def draw_circle(radius, x, y, color=None):
|
||||
"Draw a circle with the given radius at the (x, y) position. Optionally fill with color."
|
||||
penup()
|
||||
goto(x, y - radius) # Move to the correct start point
|
||||
pendown()
|
||||
|
||||
if color:
|
||||
fillcolor(color) # Set the fill color
|
||||
begin_fill() # Start filling the circle with color
|
||||
|
||||
circle(radius) # Draw the circle
|
||||
|
||||
if color:
|
||||
end_fill() # End the filling
|
||||
|
||||
def draw_spider():
|
||||
|
||||
# Step 1: Draw the big circle (spider body) on top of the small circle
|
||||
draw_circle(60, 30, 60, color="grey")
|
||||
|
||||
# Step 2: Draw the small circle (spider head)
|
||||
draw_circle(20, 30, 0, color="black")
|
||||
|
||||
# Step 3: Draw legs on big circle
|
||||
draw_legs(60, 30, 60)
|
||||
|
||||
def draw_legs(radius, x, y):
|
||||
"Draws legs starting from the perimeter of the big circle (spider's body)"
|
||||
leg_length = 50 # Length of the legs
|
||||
pensize(4)
|
||||
|
||||
# Draw legs at equal angles from the top of the big circle
|
||||
angles = [-60, -30, 0, 30, 150, 180, 210, 240] # Angles for legs (top-left, top-right, and bottom)
|
||||
|
||||
for angle in angles:
|
||||
penup()
|
||||
goto(x, y) # Go to the center of the big circle
|
||||
setheading(angle) # Set the heading to the desired angle
|
||||
forward(radius) # Move forward to the perimeter of the big circle
|
||||
pendown()
|
||||
forward(leg_length) # Draw the leg
|
||||
penup()
|
||||
backward(leg_length) # Move back to the perimeter of the big circle
|
||||
|
||||
def draw_connection_line():
|
||||
"Draw a line from the top of the big circle (head) to the center of the small circle (body)"
|
||||
penup()
|
||||
goto(30, 400)
|
||||
pendown()
|
||||
goto(30, 120) # Draw a line to the center of the small circle (spider's body)
|
||||
penup()
|
||||
goto(0, 0)
|
||||
|
||||
# Draw the spider
|
||||
# draw_spider()
|
||||
# draw_connection_line()
|
||||
# hideturtle()
|
||||
# done()
|
||||
|
|
@ -0,0 +1,121 @@
|
|||
from turtle import *
|
||||
from superturtle import *
|
||||
from superturtle.movement import *
|
||||
|
||||
segment_positions = []
|
||||
def draw_web_line(side_length):
|
||||
global segment_positions
|
||||
fly(-350, 350)
|
||||
for side in range(5):
|
||||
draw_segmented_line(side_length)
|
||||
right(22.5)
|
||||
fly(-350, 350)
|
||||
#right(22.5)
|
||||
|
||||
def draw_segmented_line(side_length):
|
||||
"Draws a line with 4 equal segments and marks the points"
|
||||
segment_length = side_length / 4
|
||||
line_segments = []
|
||||
for segment in range(4):
|
||||
forward(segment_length)
|
||||
mark_point() # Mark the points at each segment
|
||||
line_segments.append(pos())
|
||||
segment_positions.append(line_segments)
|
||||
|
||||
|
||||
def mark_point():
|
||||
"Marks a point at the current location"
|
||||
dot(5, "black") # Draw a dot to mark the segment points
|
||||
|
||||
def connect_segments():
|
||||
"Connects the corresponding segment points of adjacent lines"
|
||||
global segment_positions
|
||||
for i in range(4): # Iterate over the 4 segments
|
||||
for j in range(5): # Iterate over the 5 lines
|
||||
next_j = (j + 1) % 5 # To wrap around to the first line after the fifth
|
||||
# Skip connections if either segment is near the x-axis or y-axis
|
||||
if segment_positions[j][i][0] == -350 or segment_positions[next_j][i][1] == 350:
|
||||
continue
|
||||
|
||||
penup()
|
||||
goto(segment_positions[j][i]) # Go to the current segment
|
||||
pendown()
|
||||
goto(segment_positions[next_j][i]) # Draw a line to the next segment
|
||||
|
||||
# Main function to draw the web
|
||||
def draw_web(side_length):
|
||||
draw_web_line(side_length)
|
||||
connect_segments()
|
||||
|
||||
|
||||
# Draw the web lines
|
||||
# draw_web(300)
|
||||
# hideturtle()
|
||||
# done()
|
||||
|
||||
def draw_circle(radius, x, y, color=None):
|
||||
"Draw a circle with the given radius at the (x, y) position. Optionally fill with color."
|
||||
penup()
|
||||
goto(x, y - radius) # Move to the correct start point
|
||||
pendown()
|
||||
|
||||
if color:
|
||||
fillcolor(color) # Set the fill color
|
||||
begin_fill() # Start filling the circle with color
|
||||
|
||||
circle(radius) # Draw the circle
|
||||
|
||||
if color:
|
||||
end_fill() # End the filling
|
||||
|
||||
def draw_spider():
|
||||
|
||||
|
||||
# Step 1: Draw the big circle (spider body) on top of the small circle
|
||||
draw_circle(60, 30, 60, color="grey")
|
||||
|
||||
# Step 2: Draw the small circle (spider head)
|
||||
draw_circle(30, 30, 0, color="black")
|
||||
|
||||
# Step 3: Draw legs on big circle
|
||||
draw_legs(60, 30, 60)
|
||||
|
||||
def draw_legs(radius, x, y):
|
||||
"Draws legs starting from the perimeter of the big circle (spider's body)"
|
||||
leg_length = 50 # Length of the legs
|
||||
pensize(4)
|
||||
|
||||
# Draw legs at equal angles from the top of the big circle
|
||||
angles = [-60, -30, 0, 30, 150, 180, 210, 240] # Angles for legs (top-left, top-right, and bottom)
|
||||
|
||||
for angle in angles:
|
||||
penup()
|
||||
goto(x, y) # Go to the center of the big circle
|
||||
setheading(angle) # Set the heading to the desired angle
|
||||
forward(radius) # Move forward to the perimeter of the big circle
|
||||
pendown()
|
||||
forward(leg_length) # Draw the leg
|
||||
penup()
|
||||
backward(leg_length) # Move back to the perimeter of the big circle
|
||||
|
||||
def draw_connection_line():
|
||||
"Draw a line from the top of the big circle (head) to the center of the small circle (body)"
|
||||
penup()
|
||||
goto(30, 400)
|
||||
pendown()
|
||||
goto(30, 120) # Draw a line to the center of the small circle (spider's body)
|
||||
penup()
|
||||
goto(0, 0)
|
||||
|
||||
def drawing(side_length):
|
||||
draw_web(side_length)
|
||||
penup()
|
||||
goto(0, 0)
|
||||
setheading(0)
|
||||
pendown()
|
||||
draw_spider()
|
||||
draw_connection_line()
|
||||
hideturtle()
|
||||
done()
|
||||
|
||||
drawing(300)
|
11
spiderweb.py
11
spiderweb.py
|
@ -36,7 +36,7 @@ def connect_segments():
|
|||
# Skip connections if either segment is near the x-axis or y-axis
|
||||
if segment_positions[j][i][0] == -350 or segment_positions[next_j][i][1] == 350:
|
||||
continue
|
||||
|
||||
|
||||
penup()
|
||||
goto(segment_positions[j][i]) # Go to the current segment
|
||||
pendown()
|
||||
|
@ -47,8 +47,9 @@ def draw_web(side_length):
|
|||
draw_web_line(side_length)
|
||||
connect_segments()
|
||||
|
||||
# Draw the web lines
|
||||
draw_web(400)
|
||||
hideturtle()
|
||||
done()
|
||||
|
||||
# Draw the web lines
|
||||
# draw_web(300)
|
||||
# hideturtle()
|
||||
# done()
|
||||
|
||||
|
|
Loading…
Reference in New Issue