📄 linearmatrix.hpp
字号:
//===========================================================================//
// File: linmtrx.hh //
// Contents: Interface specification for the linear matrices //
//---------------------------------------------------------------------------//
// Copyright (C) Microsoft Corporation. All rights reserved. //
//===========================================================================//
#pragma once
#include "Stuff.hpp"
#include "AffineMatrix.hpp"
#include "UnitVector.hpp"
#include "Rotation.hpp"
namespace Stuff {
//~~~~~~~~~~~~~~~~~~~~~~~~~~ LinearMatrix4D ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class LinearMatrix4D:
public AffineMatrix4D
{
public:
static const LinearMatrix4D
Identity;
//
// Constructors
//
LinearMatrix4D()
{}
explicit LinearMatrix4D(int)
{BuildIdentity();}
LinearMatrix4D(const LinearMatrix4D &m)
{*this = m;}
explicit LinearMatrix4D(const Origin3D &p)
{*this = p;}
explicit LinearMatrix4D(const AffineMatrix4D &m)
{*this = m;}
explicit LinearMatrix4D(const Matrix4D &m)
{*this = m;}
explicit LinearMatrix4D(const EulerAngles &angles)
{*this = angles;}
explicit LinearMatrix4D(const YawPitchRoll &angles)
{*this = angles;}
explicit LinearMatrix4D(const UnitQuaternion &q)
{*this = q;}
explicit LinearMatrix4D(const Point3D &p)
{*this = p;}
//
// Assignment Operators
//
LinearMatrix4D&
operator=(const LinearMatrix4D &m)
{AffineMatrix4D::operator=(m); Check_Object(this); return *this;}
LinearMatrix4D&
operator=(const Origin3D &p)
{AffineMatrix4D::operator=(p); Check_Object(this); return *this;}
LinearMatrix4D&
operator=(const AffineMatrix4D &m)
{AffineMatrix4D::operator=(m); Check_Object(this); return *this;}
LinearMatrix4D&
operator=(const Matrix4D &m)
{AffineMatrix4D::operator=(m); Check_Object(this); return *this;}
LinearMatrix4D&
operator=(const EulerAngles &angles)
{
AffineMatrix4D::operator=(angles);
Check_Object(this); return *this;
}
LinearMatrix4D&
operator=(const YawPitchRoll &angles)
{
AffineMatrix4D::operator=(angles);
Check_Object(this); return *this;
}
LinearMatrix4D&
operator=(const UnitQuaternion &q)
{AffineMatrix4D::operator=(q); Check_Object(this); return *this;}
LinearMatrix4D&
operator=(const Point3D &p)
{AffineMatrix4D::operator=(p); Check_Object(this); return *this;}
LinearMatrix4D&
BuildRotation(const EulerAngles &angles)
{AffineMatrix4D::BuildRotation(angles); return *this;}
LinearMatrix4D&
BuildRotation(const YawPitchRoll &angles)
{AffineMatrix4D::BuildRotation(angles); return *this;}
LinearMatrix4D&
BuildRotation(const UnitQuaternion &q)
{AffineMatrix4D::BuildRotation(q); return *this;}
LinearMatrix4D&
BuildRotation(const Vector3D &v)
{AffineMatrix4D::BuildRotation(v); return *this;}
LinearMatrix4D&
BuildTranslation(const Point3D &p)
{AffineMatrix4D::BuildTranslation(p); return *this;}
//
// Axis Manipulation
//
void
GetLocalForwardInWorld(UnitVector3D *v) const
{
Check_Object(this); Check_Pointer(v);
AffineMatrix4D::GetLocalForwardInWorld(v);
Check_Object(v);
}
void
GetWorldForwardInLocal(UnitVector3D *v) const
{
Check_Object(this); Check_Pointer(v);
AffineMatrix4D::GetWorldForwardInLocal(v);
Check_Object(v);
}
void
GetLocalBackwardInWorld(UnitVector3D *v) const
{
Check_Object(this); Check_Pointer(v);
AffineMatrix4D::GetLocalBackwardInWorld(v);
Check_Object(v);
}
void
GetWorldBackwardInLocal(UnitVector3D *v) const
{
Check_Object(this); Check_Pointer(v);
AffineMatrix4D::GetWorldBackwardInLocal(v);
Check_Object(v);
}
void
GetLocalRightInWorld(UnitVector3D *v) const
{
Check_Object(this); Check_Pointer(v);
AffineMatrix4D::GetLocalRightInWorld(v);
Check_Object(v);
}
void
GetWorldRightInLocal(UnitVector3D *v) const
{
Check_Object(this); Check_Pointer(v);
AffineMatrix4D::GetWorldRightInLocal(v);
Check_Object(v);
}
void
GetLocalLeftInWorld(UnitVector3D *v) const
{
Check_Object(this); Check_Pointer(v);
AffineMatrix4D::GetLocalLeftInWorld(v);
Check_Object(v);
}
void
GetWorldLeftInLocal(UnitVector3D *v) const
{
Check_Object(this); Check_Pointer(v);
AffineMatrix4D::GetWorldLeftInLocal(v);
Check_Object(v);
}
void
GetLocalUpInWorld(UnitVector3D *v) const
{
Check_Object(this); Check_Pointer(v);
AffineMatrix4D::GetLocalUpInWorld(v);
Check_Object(v);
}
void
GetWorldUpInLocal(UnitVector3D *v) const
{
Check_Object(this); Check_Pointer(v);
AffineMatrix4D::GetWorldUpInLocal(v);
Check_Object(v);
}
void
GetLocalDownInWorld(UnitVector3D *v) const
{
Check_Object(this); Check_Pointer(v);
AffineMatrix4D::GetLocalDownInWorld(v);
Check_Object(v);
}
void
GetWorldDownInLocal(UnitVector3D *v) const
{
Check_Object(this); Check_Pointer(v);
AffineMatrix4D::GetWorldDownInLocal(v);
Check_Object(v);
}
void
AlignLocalAxisToWorldVector(
const Vector3D &target,
int pointing_axis,
int rotating_axis,
int minor_axis
);
//
// Matrix4D Multiplication
//
LinearMatrix4D&
Multiply(
const LinearMatrix4D& m1,
const LinearMatrix4D& m2
)
{AffineMatrix4D::Multiply(m1, m2); return *this;}
LinearMatrix4D&
operator *=(const LinearMatrix4D& M)
{LinearMatrix4D src(*this); return Multiply(src, M);}
//
// Matrix4D Inversion
//
LinearMatrix4D&
Invert(const LinearMatrix4D& Source);
LinearMatrix4D&
Invert()
{LinearMatrix4D src(*this); return Invert(src);}
//
// Rotation and Translation
//
LinearMatrix4D&
Multiply(const LinearMatrix4D &m,const UnitQuaternion &q)
{
Check_Pointer(this); Check_Object(&m); Check_Object(&q);
AffineMatrix4D::Multiply(m,q); return *this;
}
LinearMatrix4D&
operator*=(const UnitQuaternion &q)
{Check_Object(this); LinearMatrix4D m(*this); return Multiply(m,q);}
LinearMatrix4D&
Multiply(const LinearMatrix4D &m,const Point3D &p)
{
Check_Pointer(this); Check_Object(&m); Check_Object(&p);
AffineMatrix4D::Multiply(m,p); return *this;
}
LinearMatrix4D&
operator*=(const Point3D& p)
{Check_Object(this); LinearMatrix4D m(*this); return Multiply(m,p);}
//
// Support functions
//
LinearMatrix4D&
Normalize();
void
TestInstance() const;
static bool
TestClass();
private:
LinearMatrix4D& Solve();
};
inline UnitQuaternion&
UnitQuaternion::operator*=(const LinearMatrix4D &m)
{UnitQuaternion t(*this); return Multiply(t,m);}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -