📄 origin.hpp
字号:
//===========================================================================//
// File: origin.hh //
// Contents: Implementation details for the position class //
//---------------------------------------------------------------------------//
// Copyright (C) Microsoft Corporation. All rights reserved. //
//===========================================================================//
#pragma once
#include "Stuff.hpp"
#include "Point3D.hpp"
#include "Rotation.hpp"
namespace Stuff {class Origin3D;}
#if !defined(Spew)
void
Spew(
const char* group,
const Stuff::Origin3D& origin
);
#endif
namespace Stuff {
class Motion3D;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Origin3D ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class Origin3D
{
public:
Point3D
linearPosition;
UnitQuaternion
angularPosition;
static const Origin3D
Identity;
//
// Constructors
//
Origin3D()
{}
Origin3D(
const Point3D &t,
const EulerAngles& q
)
{Check_Object(&t); Check_Object(&q); linearPosition = t; angularPosition = q;}
Origin3D(
const Point3D &t,
const UnitQuaternion& q
)
{Check_Object(&t); Check_Object(&q); linearPosition = t; angularPosition = q;}
Origin3D(const Origin3D &origin)
{*this = origin;}
explicit Origin3D(const LinearMatrix4D &matrix)
{*this = matrix;}
//
// Assignment operators
//
Origin3D&
operator=(const Origin3D& p);
Origin3D&
operator=(const LinearMatrix4D &m);
Origin3D&
BuildTranslation(const Point3D& p)
{Check_Pointer(this); Check_Object(&p); linearPosition = p; return *this;}
Origin3D&
BuildRotation(const EulerAngles& q)
{Check_Pointer(this); Check_Object(&q); angularPosition = q; return *this;}
Origin3D&
BuildRotation(const YawPitchRoll& q)
{Check_Pointer(this); Check_Object(&q); angularPosition = q; return *this;}
Origin3D&
BuildRotation(const UnitQuaternion& q)
{Check_Pointer(this); Check_Object(&q); angularPosition = q; return *this;}
//
// Equality operator
//
friend bool
Close_Enough(
const Origin3D &a1,
const Origin3D &a2,
Scalar e=SMALL
);
bool
operator==(const Origin3D& a) const
{return Close_Enough(*this,a,SMALL);}
bool
operator!=(const Origin3D& a) const
{return !Close_Enough(*this,a,SMALL);}
//
// Origin3D motion
//
#if 0
Origin3D&
AddScaled(
const Origin3D& source,
const Motion3D& delta,
Scalar t
);
#endif
Origin3D&
Lerp(
const Origin3D& start,
const Origin3D& end,
Scalar t
);
//
// Support functions
//
#if !defined(Spew)
friend void
::Spew(
const char* group,
const Origin3D& origin
);
#endif
void
TestInstance() const;
static bool
TestClass();
};
inline Point3D&
Point3D::operator=(const Origin3D& p)
{return operator=(p.linearPosition);}
inline EulerAngles&
EulerAngles::operator=(const Origin3D& p)
{return operator=(p.angularPosition);}
inline UnitQuaternion&
UnitQuaternion::operator=(const Origin3D& p)
{return operator=(p.angularPosition);}
}
namespace MemoryStreamIO {
inline Stuff::MemoryStream&
Read(
Stuff::MemoryStream* stream,
Stuff::Origin3D *output
)
{return stream->ReadBytes(output, sizeof(*output));}
inline Stuff::MemoryStream&
Write(
Stuff::MemoryStream* stream,
const Stuff::Origin3D *input
)
{return stream->WriteBytes(input, sizeof(*input));}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -