(Представьте, что картинка в 3D)
Я создал объект Cuboid, который хранит все координаты углов в кубоиде, точно так же, как прямоугольный объект Pygame,Мне нужен перекрывающийся объем двух вышеупомянутых кубоидов, чтобы затем сделать из него новый кубоидный объект (серый прямоугольник на рисунке, опять же, представьте, что он в 3D).
Существует ли для этого общая алгебраическая формула или мне нужно создать метод для каждого конкретного случая?
Я использую систему координат Пиглетс, то есть, рост вверх положителен yдвижение вправо положительно х, а движение вперед положительно z.
Кубоид Класс:
def __init__(self, pos, width, height, depth):
self.pos = pos
self.width = width
self.height = height
self.depth = depth
self.Update()
def Update(self):
self.size = (self.width, self.height, self.depth)
self.topleft_front = (self.pos[0], self.pos[1] + self.height, -self.pos[2])
self.topright_front = (self.pos[0] + self.width, self.pos[1] + self.height, -self.pos[2])
self.bottomleft_front = (self.pos[0], self.pos[1], -self.pos[2])
self.bottomright_front = (self.pos[0] + self.width, self.pos[1], -self.pos[2])
self.topleft_back = (self.pos[0], self.pos[1] + self.height, -self.pos[2] - self.depth)
self.topright_back = (self.pos[0] + self.width, self.pos[1] + self.height, -self.pos[2] - self.depth)
self.bottomleft_back = (self.pos[0], self.pos[1], -self.pos[2] - self.depth)
self.bottomright_back = (self.pos[0] + self.width, self.pos[1], -self.pos[2] - self.depth)
self.center = (self.pos[0] + self.width / 2, self.pos[1] + self.height / 2, -self.pos[2] - self.depth / 2)
def collidecube(self, cube):
if (self.pos[0] < cube.pos[0] + cube.width) and (
self.pos[0] + self.width > cube.pos[0]) and (
self.pos[1] < cube.pos[1] + cube.height) and (
self.pos[1] + self.height > cube.pos[1]) and (
self.pos[2] < cube.pos[2] + cube.depth) and (
self.pos[2] + self.depth > cube.pos[2]):
return True
else:
return False
def Clip(self, cube):
if self.collidecube(cube):
pass