Коробки, линии и лучи

Типы

Пересечение луча/отрезка с 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);

Практика


© 2026 Igdrasil Project. Все права защищены.