Пример #1
0
class Actor:
    def __init__(self, x, y, width, height, sprite=None, color=None):
        self.aabb = Aabb(x, y, x + width, y + height)
        self.sprite = None

    def move(self, dx, dy):
        self.aabb.move(dx, dy)
Пример #2
0
def random_aabb(H, W, identifier=None):
    """
    H*Wの領域に、ランダムなaabbを一つ作成する。
    """
    p1 = [random.uniform(0, W), random.uniform(0, H)]
    p2 = [random.uniform(0, W), random.uniform(0, H)]
    return Aabb(p1, p2, identifier=identifier)
def surrounding_box(box0, box1):
    small = Vec3(min(box0.min["x"], box1.min["x"]),
                 min(box0.min["y"], box1.min["y"]),
                 min(box0.min["z"], box1.min["z"]))
    big = Vec3(max(box0.max["x"], box1.max["x"]),
               max(box0.max["y"], box1.max["y"]),
               max(box0.max["z"], box1.max["z"]))
    return Aabb(small, big)
Пример #4
0
    def register(self, aabb: Aabb):
        """AabbをLQTに登録する。情報を変更した場合も再登録する。
        """
        logger.debug(f"lqt register {aabb}")
        # Aabbが既に空間に登録されている場合、登録を解除する。
        if aabb.cell is not None:
            aabb.cell.remove(aabb)
            aabb.cell = None

        # aabbのモートンオーダを求める
        (x1, y1), (x2, y2) = aabb.get_points()
        mn1 = get_2d_morton_number(int(x1 / self.U), int(y1 / self.U))
        mn2 = get_2d_morton_number(int(x2 / self.U), int(y2 / self.U))

        if mn1 == mn2:
            # モートンオーダが完全に一致する場合は、最下層のmn1(=mn2)に属する。
            l, mn = self.L-1, mn1
        else:
            l, mn = self.common_ancestor(mn1, mn2)

        cell = self.data[self.index_from_lm(l, mn)]
        cell.add(aabb)
        aabb.registered(cell)
        return
Пример #5
0
 def bounding_box(self,t0,t1):
   rad = Vec3(self.radius,self.radius,self.radius)
   box = Aabb(self.center- rad,self.center + rad)
   return box
Пример #6
0
 def bounding_box(self,t0,t1):
   box = Aabb(self.pmin,self.pmax)
   return box
Пример #7
0
 def bounding_box(self,t0,t1):
   box = Aabb(Vec3(self.k-0.0001,self.y0,self.z0),Vec3(self.k+0.0001,self.y1,self.z1))
   return box
Пример #8
0
 def __init__(self, x, y, width, height, sprite=None, color=None):
     self.aabb = Aabb(x, y, x + width, y + height)
     self.sprite = None