Коробки, линии и лучи
Типы
FBox2/FBox3— осевые AABB.FLine2/FLine3— отрезки.FRay2/FRay3— лучи (origin + direction).
Пересечение луча/отрезка с AABB
var ray = new FRay3(new FVector3(0, 0, -5), FVector3.UnitZ);
var box = new FBox3(new FVector3(-1), new FVector3(1));
var hits = MathUtils.Intersection(ray, box); // float[]? t-параметры
if (hits != null)
{
var t = hits[0];
var point = ray.Origin + ray.Direction * t;
}
Трансформированная коробка
var size = new FVector2(2, 1);
// Мировая матрица коробки: сначала вращаем, потом смещаем
var world = FMatrix3x3.Identity;
FMatrix3x3.Rotate(ref world, MathF.PI / 6);
FMatrix3x3.Translate(ref world, new FVector2(1, 0));
// Intersection ожидает матрицу, переводящую отрезок в локаль коробки → берём inverse
var toLocal = world.Inverse;
var line = new FLine2(new FVector2(-3, 0), new FVector2(3, 0));
var ts = MathUtils.Intersection(line, size, toLocal);
Практика
- Результат
Intersection— массив t-параметров (1 или 2 значения). Проверяйте на null. - Для AABB в мировых координатах используйте перегрузки без матриц; для локальных — с матрицей.
FBox3.Union/Intersectionпомогают быстро строить объём по нескольким примитивам.
© 2026 Igdrasil Project. Все права защищены.