from turtle import Turtle
import random
from math import sqrt, degrees, asin, acos, atan
class Shape():
turtle = Turtle()
class Circle(Shape):
def __init__(self, center, radius):
self.center = center
self.radius = radius
def get_area(self):
return 3.14*self.radius*self.radius
def draw(self):
Shape.turtle.penup()
Shape.turtle.setposition(self.center[0], self.center[1] - self.radius)
Shape.turtle.pendown()
Shape.turtle.circle(self.radius)
Shape.turtle.penup()
class Rectangle:
def __init__(self, upper_left, lower_right):
self.upper_left = upper_left
self.lower_right = lower_right
def draw(self):
min_x = min(self.upper_left[0], self.lower_right[0])
min_y = min(self.upper_left[1], self.lower_right[1])
width = max(self.upper_left[0], self.lower_right[0]) -min_x
height = max(self.upper_left[1], self.lower_right[1]) -min_y
Shape.turtle.penup()
Shape.turtle.setposition(self.upper_left)
Shape.turtle.pendown()
Shape.turtle.forward(width)
Shape.turtle.right(90)
Shape.turtle.forward(height)
Shape.turtle.right(90)
Shape.turtle.forward(width)
Shape.turtle.right(90)
Shape.turtle.forward(height)
Shape.turtle.penup()
def get_area(self):
min_x = min(self.upper_left[0], self.lower_right[0])
min_y = min(self.upper_left[1], self.lower_right[1])
width = max(self.upper_left[0], self.lower_right[0]) -min_x
height = max(self.upper_left[1], self.lower_right[1]) -min_y
return width * height
class RightTriangle:
def __init__(self, A, B):
self.A = A
self.B = B
def draw(self):
a = (self.B[0] - (self.A[0]))
b = (self.B[1] - (self.A[1]))
c = (sqrt((self.B[0] - self.A[0])**2 + (self.B[1] - self.A[1])**2))
angleA = degrees(atan(a/b))
angleB = degrees(atan(b/a))
Shape.turtle.penup()
Shape.turtle.setposition(self.A)
Shape.turtle.pendown()
Shape.turtle.forward(a)
Shape.turtle.right(90)
Shape.turtle.forward(b)
Shape.turtle.right(180-angleA)
Shape.turtle.forward(c)
Shape.turtle.penup()
def get_area(self):
base = (self.B[0] - self.A[0])
height = (self.B[1] - self.A[1])
return (base * height)/2
def random_shapes(count):
def random_point():
return (random.randint(-200,200), random.randint(-200,200))
shapes = []
for i in range(1, count+1):
shape_type = random.randint(1, 3)
if shape_type == 1:
shapes += [Circle(random_point(), random.randint(1,200))]
elif shape_type == 2:
shapes += [Rectangle(random_point(), random_point())]
elif shape_type == 3:
shapes += [RightTriangle(random_point(), random_point())]
return shapes
def main():
shapes = random_shapes(15)
total_area = 0
for s in shapes:
s.draw()
total_area += s.get_area()
input ('Hit <enter> key to end.')
print ('Total area = ', total_area)
input ('Have a nice day!')
main()So I have gotten a little closer but some are not right triangles and others never complete. Any suggestions? https://imgur.com/a/ziRDf
Turtle drawing Right Triangle
Users browsing this thread: 1 Guest(s)
