⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 angle.cpp

📁 机甲指挥官2源代码
💻 CPP
字号:
//===========================================================================//
// File:	angle.cc                                                         //
// Contents: Implementation details for angle classes                        //
//---------------------------------------------------------------------------//
// Copyright (C) Microsoft Corporation. All rights reserved.                 //
//===========================================================================//

#include "StuffHeaders.hpp"

//
//#############################################################################
//#############################################################################
//
Scalar
	Radian::Normalize(Scalar Value)
{
	Scalar temp = static_cast<Scalar>(fmod(Value,Two_Pi));
	if (temp > Pi)
	{
		temp -= Two_Pi;
	}
	else if (temp <= -Pi)
	{
		temp += Two_Pi;
	}
	return temp;
}

//
//#############################################################################
//#############################################################################
//
Radian&
	Radian::Normalize()
{
	Check_Object(this);
	angle = static_cast<Scalar>(fmod(angle,Two_Pi));
	if (angle > Pi) {
		angle -= Two_Pi;
	}
	else if (angle < -Pi) {
		angle += Two_Pi;
	}
	return *this;
}

//
//#############################################################################
//#############################################################################
//
Radian&
	Radian::Lerp(const Radian &a,const Radian &b,Scalar t)
{
	Scalar a1,a2;

   Check_Pointer(this);
	Check_Object(&a);
	Check_Object(&b);
	a1 = Radian::Normalize(a.angle);
	a2 = Radian::Normalize(b.angle);
	if (a2-a1 > Pi) {
		a2 -= Two_Pi;
	}
	else if (a2-a1 < -Pi) {
		a2 += Two_Pi;
	}
	angle = Stuff::Lerp(a1, a2, t);
	return *this;
}

#if 0
SinCosPair&
	SinCosPair::operator=(const Radian &radian)
{
	Check_Pointer(this);
	Check_Object(&radian);

#if USE_ASSEMBLER_CODE
	Scalar *f = &sine;
	_asm {
		push	ebx
		push	edx

		mov		ebx, f
		mov		edx, radian.angle

		fld		dword ptr [edx]
		fsincos
		fstp	dword ptr [ebx + 4]
		fstp	dword ptr [ebx]

		pop		edx
		pop		ebx
	}

#else
	cosine = cos(radian);
	sine = sin(radian);
#endif
	
	Check_Object(this);
	
	return *this;
}
#endif

//
//#############################################################################
//#############################################################################
//
#if !defined(Spew)
	void
		Spew(
			const char* group,
			const Radian& angle
		)
	{
		Check_Object(&angle);
		SPEW((group, "%f rad+", angle.angle));
	}

	//
	//#############################################################################
	//#############################################################################
	//
	void
		Spew(
			const char* group,
			const Degree& angle
		)
	{
		Check_Object(&angle);
		SPEW((group, "%f deg+", angle.angle));
	}

	//
	//#############################################################################
	//#############################################################################
	//
	void
		Spew(
			const char* group,
			const SinCosPair& angle
		)
	{
		Check_Object(&angle);
		SPEW((group, "{%f,%f}+", angle.cosine, angle.sine));
	}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -