Feb-18-2018, 10:52 PM
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