如何快速判断任意线段与任意AABB是否相交?首先想到的方法是借助射线与AABB求交的算法,获得射线进入和离开的时机,在射线与AABB相交的前提下保证进入时机在线段终点之前。
下面是搜集到的三种算法即实现,并且通过添加轴的的维度完全可以应用于三维情况。
零、 数据结构
import random
import time
import numpy as np
import matplotlib.pyplot as plt
class Vec2D:
    def __init__(self, x, y):
        self.v = np.array([x, y])
    def __sub__(self, other):
        return Vec2D(self.v[0] - other.v[0], self.v[1] - other.v[1])
    def __getitem__(self, index):
        return self.v[index]
    def __mul__(self, scalar):
        return Vec2D(self.v[0] * scalar, self.v[1] * scalar)
    def __add__(self, other):
        return Vec2D(self.v[0] + other.v[0], self.v[1] + other.v[1])
    def ToString(self):
        return f'({self.v[0]},{self.v[1]})'
class Rect:
    def __init__(self, min_x, min_y, max_x, max_y):
        self.min = Vec2D(min_x, min_y)
        self.max = Vec2D(max_x, max_y)
    def ToString(self):
        return f'{{ {self.min.ToString()},{self.max.ToString()} }}'2025/3/25大约 7 分钟
