mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
SourceSDK mathlib port with light modifications. Renamed Vector to Vector3D (to avoid confusion with std::vector (declared as vector) and Vector2D/Vector4D).
51 lines
1.4 KiB
C++
51 lines
1.4 KiB
C++
//===== Copyright (c) 1996-2005, Valve Corporation, All rights reserved. ======//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $NoKeywords: $
|
|
//=============================================================================//
|
|
#include "core/stdafx.h"
|
|
#include "mathlib/vector.h"
|
|
#include "mathlib/mathlib.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Calculate the volume of a tetrahedron with these vertices
|
|
// Input : p0 - points of tetrahedron
|
|
// p1 -
|
|
// p2 -
|
|
// p3 -
|
|
// Output : float (volume in units^3)
|
|
//-----------------------------------------------------------------------------
|
|
static float TetrahedronVolume(const Vector3D& p0, const Vector3D& p1, const Vector3D& p2, const Vector3D& p3)
|
|
{
|
|
Vector3D a, b, c, cross;
|
|
float volume = 1.0f / 6.0f;
|
|
|
|
a = p1 - p0;
|
|
b = p2 - p0;
|
|
c = p3 - p0;
|
|
cross = CrossProduct(b, c);
|
|
|
|
volume *= DotProduct(a, cross);
|
|
if (volume < 0)
|
|
return -volume;
|
|
return volume;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Calculate a triangle area with these vertices
|
|
// Input : p0 - points of tetrahedron
|
|
// p1 -
|
|
// p2 -
|
|
// Output : float (area)
|
|
//-----------------------------------------------------------------------------
|
|
static float TriangleArea(const Vector3D& p0, const Vector3D& p1, const Vector3D& p2)
|
|
{
|
|
Vector3D e0 = p1 - p0;
|
|
Vector3D e1 = p2 - p0;
|
|
Vector3D cross;
|
|
|
|
CrossProduct(e0, e1, cross);
|
|
return 0.5 * cross.Length();
|
|
}
|