Files
TeslaRel410/CODE/RP/MUNGA/LINMTRX.HPP
T
CydandClaude Fable 5 fdd9ac9d97 Initial import: Tesla Release 4.10 (Tesla:BattleTech & Tesla:Red Planet)
Archival snapshot of the Virtual World Entertainment Tesla cockpit
software, 1994-1996: MUNGA engine and L4 pod layer source (Borland
C++ 5.0), BT/RP game code, and game content (models, audio, maps,
gauges, Division renderer data). Includes third-party libraries:
Division dVS/DPL graphics, HMI SOS audio, WATTCP networking.

Files are preserved byte-for-byte (.gitattributes disables all
line-ending conversion). README.md documents the layout, target
hardware, and toolchain.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 13:21:58 -05:00

182 lines
4.9 KiB
C++

//===========================================================================//
// File: linmtrx.hh //
// Project: MUNGA Brick: Math Library //
// Contents: Interface specification for the linear matrices //
//---------------------------------------------------------------------------//
// Date Who Modification //
// -------- --- ---------------------------------------------------------- //
// 11/20/94 JMA Initial coding. //
// 12/01/94 JMA Made compatible with SGI CC //
//---------------------------------------------------------------------------//
// Copyright (C) 1994-1995, Virtual World Entertainment, Inc. //
// All Rights reserved worldwide //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
//===========================================================================//
#if !defined(LINMTRX_HPP)
# define LINMTRX_HPP
# if !defined(AFFNMTRX_HPP)
# include <affnmtrx.hpp>
# endif
# if !defined(UNITVEC_HPP)
# include <unitvec.hpp>
# endif
# if !defined(ROTATION_HPP)
# include <rotation.hpp>
# endif
//~~~~~~~~~~~~~~~~~~~~~~~~~~ LinearMatrix ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class LinearMatrix:
public AffineMatrix
{
public:
static const LinearMatrix
Identity;
//
// Constructors
//
LinearMatrix()
{BuildIdentity(); }// JM 11-25-95
LinearMatrix(int)
{BuildIdentity();}
//
// Assignment Operators
//
LinearMatrix&
operator=(const LinearMatrix &m)
{AffineMatrix::operator=(m); return *this;}
LinearMatrix&
operator=(const Origin &p)
{AffineMatrix::operator=(p); return *this;}
LinearMatrix&
operator=(const Hinge &hinge)
{AffineMatrix::operator=(hinge); return *this;}
LinearMatrix&
operator=(const EulerAngles &angles)
{AffineMatrix::operator=(angles); return *this;}
LinearMatrix&
operator=(const YawPitchRoll &angles)
{AffineMatrix::operator=(angles); return *this;}
LinearMatrix&
operator=(const Quaternion &q)
{AffineMatrix::operator=(q); return *this;}
LinearMatrix&
operator=(const Point3D &p)
{AffineMatrix::operator=(p); return *this;}
LinearMatrix&
operator=(const AffineMatrix &m);
LinearMatrix&
operator=(const Matrix4x4 &m);
LinearMatrix&
operator=(const TransposedMatrix &m);
//
// Axis Manipulation
//
void
GetFromAxis(size_t index, UnitVector *v) const
{AffineMatrix::GetFromAxis(index,v);}
void
GetToAxis(size_t index, UnitVector *v) const
{AffineMatrix::GetToAxis(index,v);}
LinearMatrix&
SetFromAxis(size_t index, const UnitVector &v)
{AffineMatrix::SetFromAxis(index,v); return *this;}
LinearMatrix&
SetToAxis(size_t index, const UnitVector &v)
{AffineMatrix::SetToAxis(index,v); return *this;}
//
// Matrix4x4 Multiplication
//
LinearMatrix&
Multiply(
const LinearMatrix& m1,
const LinearMatrix& m2
)
{AffineMatrix::Multiply(m1, m2); return *this;}
LinearMatrix&
operator *=(const LinearMatrix& M)
{LinearMatrix src(*this); return Multiply(src, M);}
//
// Matrix4x4 Inversion
//
LinearMatrix&
Invert(const LinearMatrix& Source);
LinearMatrix&
Invert()
{LinearMatrix src(*this); return Invert(src);}
//
// Rotation and Translation
//
LinearMatrix&
Multiply(const LinearMatrix &m,const Quaternion &q)
{
Check_Pointer(this); Check(&m); Check(&q);
AffineMatrix::Multiply(m,q); return *this;
}
LinearMatrix&
operator*=(const Quaternion &q)
{Check(this); LinearMatrix m(*this); return Multiply(m,q);}
LinearMatrix&
Multiply(const LinearMatrix &m,const Point3D &p)
{
Check_Pointer(this); Check(&m); Check(&p);
AffineMatrix::Multiply(m,p); return *this;
}
LinearMatrix&
operator*=(const Point3D& p)
{Check(this); LinearMatrix m(*this); return Multiply(m,p);}
//
// Support functions
//
LinearMatrix&
Normalize();
Logical
TestInstance() const;
static Logical
TestClass();
private:
LinearMatrix& Solve();
};
inline UnitVector&
UnitVector::Multiply(
const UnitVector &v,
const LinearMatrix &m
)
{Check(&v); Vector3D::Multiply(v,m); return *this;}
inline UnitVector&
UnitVector::operator*=(const LinearMatrix &m)
{UnitVector src(*this); return Multiply(src,m);}
inline Quaternion&
Quaternion::Multiply(
const Quaternion &q,
const LinearMatrix &m
)
{
Cast_Object(Vector3D*,this)->Multiply(SKIPPY_CAST(Vector3D,q),m);
return *this;
}
inline Quaternion&
Quaternion::operator*=(const LinearMatrix &m)
{Quaternion t(*this); return Multiply(t,m);}
#endif