_
This commit is contained in:
49
UI/Objects/nr_objects/EquilateralTriangle.py
Normal file
49
UI/Objects/nr_objects/EquilateralTriangle.py
Normal file
@@ -0,0 +1,49 @@
|
||||
from numpy import array as a
|
||||
import pygame
|
||||
import math
|
||||
|
||||
|
||||
class EquilateralTriangle:
|
||||
def __init__(self, position, side_length, rotation, color, scene, width=0):
|
||||
self.position = position
|
||||
self.side_length = side_length
|
||||
self.rotation = rotation
|
||||
self.color = color
|
||||
self.scene = scene
|
||||
self.width = width
|
||||
self.rotation_point = complex(math.cos(rotation), math.sin(rotation))
|
||||
|
||||
self.pd_ = self.scene.pd_
|
||||
|
||||
self.points = a([
|
||||
complex(0, self.side_length),
|
||||
complex(self.side_length, self.side_length),
|
||||
complex(self.side_length * 0.5,
|
||||
self.side_length - math.sqrt(self.side_length ** 2 - (self.side_length * 0.5) ** 2))
|
||||
])
|
||||
self.points -= complex(self.side_length * 0.5, self.side_length * 0.5)
|
||||
self.points *= self.rotation_point * self.pd_
|
||||
self.points += complex(self.side_length * 0.5, self.side_length * 0.5)
|
||||
rescaled_position = self.scene.matrix @ self.position
|
||||
self.points += complex(rescaled_position[0], rescaled_position[1])
|
||||
self.points = [[point.real, point.imag] for point in self.points]
|
||||
|
||||
def blit(self):
|
||||
if self.pd_ != self.scene.pd_:
|
||||
self.pd_ = self.scene.pd_
|
||||
|
||||
self.points = a([
|
||||
complex(0, self.side_length),
|
||||
complex(self.side_length, self.side_length),
|
||||
complex(self.side_length * 0.5,
|
||||
self.side_length - math.sqrt(self.side_length ** 2 - (self.side_length * 0.5) ** 2))
|
||||
])
|
||||
self.points -= complex(self.side_length * 0.5, self.side_length * 0.5)
|
||||
self.points *= self.rotation_point * self.pd_
|
||||
self.points += complex(self.side_length * 0.5, self.side_length * 0.5)
|
||||
rescaled_position = self.scene.matrix @ self.position
|
||||
self.points += complex(rescaled_position[0], rescaled_position[1])
|
||||
self.points = [[point.real, point.imag] for point in self.points]
|
||||
|
||||
pygame.draw.polygon(self.scene.s, self.color, self.points, self.width)
|
||||
|
Reference in New Issue
Block a user