Я пытался реализовать версию теоремы о разделяющей оси, используя приведенный ниже фрагмент. В настоящее время во фрагменте не указана минимальная дистанция перевода, и я не могу понять, где ее найти.
Я пытался реализовать версию теоремы о разделяющей оси, используя приведенный ниже фрагмент. В настоящее время во фрагменте не указана минимальная дистанция перевода, и я не могу понять, где ее найти. [code]#include
// define the operations to be used in our 3D vertices struct vec3 { float x, y, z; vec3 operator- (const vec3 & rhs) const { return{ x - rhs.x, y - rhs.y, z - rhs.z }; } float operator* (const vec3 & rhs) const { return{ x * rhs.x + y * rhs.y + z * rhs.z }; } // DOT PRODUCT vec3 operator^ (const vec3 & rhs) const { return{ y * rhs.z - z * rhs.y, z * rhs.x - x * rhs.z, x * rhs.y - y * rhs.x }; } // CROSS PRODUCT vec3 operator* (const float& rhs)const { return vec3{ x * rhs, y * rhs, z * rhs }; } };
// set the relevant elements of our oriented bounding box struct OBB { vec3 Pos, AxisX, AxisY, AxisZ, Half_size; };
// check if there's a separating plane in between the selected axes bool getSeparatingPlane(const vec3& RPos, const vec3& Plane, const OBB& box1, const OBB&box2) { return (fabs(RPos*Plane) > (fabs((box1.AxisX*box1.Half_size.x)*Plane) + fabs((box1.AxisY*box1.Half_size.y)*Plane) + fabs((box1.AxisZ*box1.Half_size.z)*Plane) + fabs((box2.AxisX*box2.Half_size.x)*Plane) + fabs((box2.AxisY*box2.Half_size.y)*Plane) + fabs((box2.AxisZ*box2.Half_size.z)*Plane))); }
// test for separating planes in all 15 axes bool getCollision(const OBB& box1, const OBB&box2) { static vec3 RPos; RPos = box2.Pos - box1.Pos;