亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? angle.hpp

?? 機甲指揮官2源代碼
?? HPP
字號:
//===========================================================================//
// File:	angle.hh                                                         //
// Contents: Interface specification for angle classes                       //
//---------------------------------------------------------------------------//
// Copyright (C) Microsoft Corporation. All rights reserved.                 //
//===========================================================================//

#pragma once

#include "Stuff.hpp"
#include "Scalar.hpp"

namespace Stuff {
	class Radian;
	class Degree;
	class SinCosPair;
}

#if !defined(Spew)
	void
		Spew(
			const char* group,
			const Stuff::Radian& angle
		);
	void
		Spew(
			const char* group,
			const Stuff::Degree& angle
		);
	void
		Spew(
			const char* group,
			const Stuff::SinCosPair& angle
		);
#endif

namespace Stuff {

	class Degree;
	class SinCosPair;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Radian ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

	class Radian
	{
	public:
		Scalar
			angle;

		//
		// Constructors
		//
		Radian()
			{}
		Radian(Scalar a)
			{angle = a;}
		Radian(const Radian &a)
			{angle = a.angle;}
		explicit Radian(const Degree &degree)
			{*this = degree;}
		explicit Radian(const SinCosPair &pair)
			{*this = pair;}

		//
		// Assignment operators
		//
		Radian&
			operator=(Scalar angle)
				{
					Check_Pointer(this);
					this->angle = angle; return *this;
				}
		Radian&
			operator=(const Radian &radian)
				{
					Check_Pointer(this); Check_Object(&radian);
					angle = radian.angle; return *this;
				}
		Radian&
			operator=(const Degree &degree);
		Radian&
			operator=(const SinCosPair &pair);

		//
		// Casting
		//
		operator Scalar() const
			{Check_Object(this); return angle;}

		//
		// These comparator functions are not designed to make exact comparisons
		// of Scalaring point numbers, but rather to compare them to within some
		// specified error threshold
		//
		bool
			operator!() const
				{Check_Object(this); return Small_Enough(angle);}

		bool
			operator==(const Radian &r) const
				{Check_Object(this); Check_Object(&r); return Close_Enough(angle,r.angle);}
		bool
			operator==(float r) const
				{Check_Object(this); return Close_Enough(angle,r);}

		bool
			operator!=(const Radian &r) const
				{Check_Object(this); Check_Object(&r); return !Close_Enough(angle,r.angle);}
		bool
			operator!=(float r) const
				{Check_Object(this); return !Close_Enough(angle,r);}

		//
		// Math operators
		//
		Radian&
			Negate(Scalar r)
				{Check_Pointer(this); angle = -r; return *this;}

		Radian&
			Add(Scalar r1,Scalar r2)
				{Check_Pointer(this); angle = r1 + r2; return *this;}
		Radian&
			operator+=(Scalar r)
				{Check_Object(this); angle += r; return *this;}

		Radian&
			Subtract(Scalar r1,Scalar r2)
				{Check_Pointer(this); angle = r1 - r2; return *this;}
		Radian&
			operator-=(Scalar r)
				{Check_Object(this); angle -= r; return *this;}

		Radian&
			Multiply(Scalar r1,Scalar r2)
				{Check_Pointer(this); angle = r1 * r2; return *this;}
		Radian&
			operator*=(Scalar r)
				{Check_Object(this); angle *= r; return *this;}

		Radian&
			Divide(Scalar r1,Scalar r2)
				{
					Check_Pointer(this); Verify(!Small_Enough(r2));
					angle = r1 / r2; return *this;
				}
		Radian&
			operator/=(Scalar r)
				{Check_Object(this); Verify(!Small_Enough(r)); angle /= r; return *this;}

		//
		// Template support
		//
		Radian&
			Lerp(
				const Radian &a,
				const Radian &b,
				Scalar t
			);

		//
		// Support functions
		//
		static Scalar
			Normalize(Scalar Value);
		Radian&
			Normalize();

		#if !defined(Spew)
			friend void
				::Spew(
					const char* group,
					const Radian& angle
				);
		#endif
		void
			TestInstance() const
				{}
		static bool
			TestClass();
	};

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Degree ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

	class Degree
	{
	 public:
		Scalar
			angle;

		//
		// constructors
		//
		Degree()
			{}
		Degree(Scalar a)
			{angle = a;}
		Degree(const Degree &a)
			{angle = a.angle;}
		explicit Degree(const Radian &radian)
			{*this = radian;}

		//
		// Assignment operators
		//
		Degree&
			operator=(const Degree &degree)
				{Check_Object(this); Check_Object(&degree); angle = degree.angle; return *this;}
		Degree&
			operator=(Scalar angle)
				{Check_Object(this); this->angle = angle; return *this;}
		Degree&
			operator=(const Radian &radian)
				{
					Check_Object(this); Check_Object(&radian);
					angle = radian.angle * Degrees_Per_Radian; return *this;
				}

		//
		// Support functions
		//
		#if !defined(Spew)
			friend void
				::Spew(
					const char* group,
					const Degree& angle
				);
		#endif
		void
			TestInstance() const
				{}
		static bool
			TestClass();
	};

	inline Radian&
		Radian::operator=(const Degree& degree)
			{
				Check_Pointer(this); Check_Object(&degree);
				angle = degree.angle * Radians_Per_Degree; return *this;
			}

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SinCosPair ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

	class SinCosPair
	{
	 public:
		Scalar
			sine,
			cosine;

		//
		// Constructors
		//
		SinCosPair()
			{}
		SinCosPair(Scalar sin, Scalar cos)
			{Check_Pointer(this); sine = sin; cosine = cos; Check_Object(this);}
		SinCosPair(const SinCosPair &pair)
			{
				Check_Pointer(this); Check_Object(&pair);
				sine = pair.sine; cosine = pair.cosine;
			}
		explicit SinCosPair(const Radian &radian)
			{*this = radian;}

		//
		// Assignment operators
		//
		SinCosPair&
			operator=(const SinCosPair &pair)
				{
					Check_Pointer(this); Check_Object(&pair);
					sine = pair.sine; cosine = pair.cosine; return *this;
				}
		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;
				}

		//
		// Support functions
		//
		#if !defined(Spew)
			friend void
				::Spew(
					const char* group,
					const SinCosPair& angle
				);
		#endif
		void
			TestInstance() const
				{}
		static bool
			TestClass();
	};

	inline Radian&
		Radian::operator=(const SinCosPair& pair)
			{
				Check_Pointer(this); Check_Object(&pair);
				angle = Arctan(pair.sine, pair.cosine); return *this;
			}

}

namespace MemoryStreamIO {

	inline Stuff::MemoryStream&
		Read(
			Stuff::MemoryStream* stream,
			Stuff::Radian *output
		)
			{return stream->ReadBytes(output, sizeof(*output));}
	inline Stuff::MemoryStream&
		Write(
			Stuff::MemoryStream* stream,
			const Stuff::Radian *input
		)
			{return stream->WriteBytes(input, sizeof(*input));}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久亚洲综合色一区二区三区| 国产精品美女久久久久久久久久久 | 日韩国产精品久久| 国产色一区二区| 在线综合+亚洲+欧美中文字幕| 成人av中文字幕| 91欧美一区二区| 国产一区二区三区国产| 亚洲va在线va天堂| 国产精品卡一卡二| 精品国产伦一区二区三区观看体验| 日本电影亚洲天堂一区| 懂色一区二区三区免费观看| 蜜桃91丨九色丨蝌蚪91桃色| 一区二区三区在线视频免费| 日韩国产成人精品| 一区二区欧美视频| 亚洲特黄一级片| 欧美国产欧美亚州国产日韩mv天天看完整| 日韩一区二区三| 欧美日韩不卡一区二区| 色婷婷av一区二区三区大白胸| 成人开心网精品视频| 国产一区二区三区在线观看精品| 日本v片在线高清不卡在线观看| 亚洲一区二区三区激情| 一区二区三区在线高清| 日韩理论电影院| 亚洲丝袜美腿综合| 亚洲视频图片小说| 中文字幕欧美一| 国产精品传媒视频| 亚洲欧美激情插| 亚洲久本草在线中文字幕| 亚洲欧美日韩精品久久久久| 亚洲欧美怡红院| 亚洲人成网站在线| 亚洲综合网站在线观看| 一二三四社区欧美黄| 亚洲国产精品欧美一二99| 中文字幕成人av| 日韩伦理电影网| 一区二区三区高清不卡| 亚洲电影一级黄| 日本va欧美va欧美va精品| 日韩av一区二区三区四区| 久久丁香综合五月国产三级网站| 久久99日本精品| 国产成人精品免费在线| 处破女av一区二区| 91在线一区二区三区| 色哟哟亚洲精品| 欧美日韩在线播放三区| 日韩视频不卡中文| 久久精品亚洲国产奇米99| 国产精品网友自拍| 亚洲免费色视频| 日韩一区精品视频| 精品一区精品二区高清| 顶级嫩模精品视频在线看| 99久久国产综合精品女不卡| 欧美网站大全在线观看| 欧美一级二级三级乱码| 国产欧美日韩激情| 一区二区三区在线高清| 奇米综合一区二区三区精品视频| 国产一区二区三区四区在线观看| 99视频精品全部免费在线| 欧美中文字幕久久| 日韩欧美亚洲一区二区| 国产欧美精品一区aⅴ影院| 亚洲六月丁香色婷婷综合久久 | 中文成人综合网| 亚洲免费在线电影| 久久精品国产一区二区三区免费看| 国产精品一二三四区| 欧洲视频一区二区| 亚洲精品在线免费观看视频| 亚洲欧洲精品成人久久奇米网| 国产午夜亚洲精品理论片色戒 | 欧美亚洲禁片免费| 欧美一二三在线| 国产精品家庭影院| 免费观看成人av| 99国内精品久久| 欧美丰满少妇xxxxx高潮对白| 2023国产一二三区日本精品2022| 亚洲欧美视频在线观看| 韩国一区二区视频| 欧美性色综合网| 欧美国产日韩在线观看| 琪琪一区二区三区| 日本高清不卡视频| 中文一区二区完整视频在线观看| 偷窥国产亚洲免费视频| 99久久精品免费| 国产午夜精品福利| 日本vs亚洲vs韩国一区三区二区| heyzo一本久久综合| 精品国产乱码久久久久久久久| 伊人色综合久久天天人手人婷| 国产精品996| 日韩三级在线观看| 亚洲成av人片一区二区梦乃| 成人午夜伦理影院| 久久综合色之久久综合| 日韩黄色免费电影| 日本道在线观看一区二区| 国产欧美日韩综合精品一区二区 | 99精品视频在线播放观看| 精品国产一区二区三区不卡| 亚洲第一二三四区| 91福利视频久久久久| 亚洲色图视频网| 波多野结衣在线一区| 久久久久亚洲蜜桃| 精品一区二区三区欧美| 91精品欧美福利在线观看| 亚洲国产日产av| 欧美视频一区二区三区| 亚洲综合图片区| 日本精品裸体写真集在线观看 | 水蜜桃久久夜色精品一区的特点 | 欧美一卡二卡在线观看| 亚洲午夜免费福利视频| 在线看日本不卡| 一区二区在线免费| 色999日韩国产欧美一区二区| 亚洲欧洲成人精品av97| 波多野洁衣一区| 中文字幕亚洲欧美在线不卡| 成人一区二区视频| 国产精品沙发午睡系列990531| 国产不卡视频在线观看| 国产喷白浆一区二区三区| 国产精品18久久久久久vr| 久久蜜桃一区二区| 国产成人综合在线观看| 国产精品麻豆视频| 91丨porny丨首页| 亚洲黄色免费电影| 欧美日韩国产一区| 免费视频最近日韩| 日韩精品在线网站| 国产风韵犹存在线视精品| 国产欧美一区二区精品仙草咪| 国产成人av电影在线| 日韩伦理av电影| 欧美午夜精品免费| 日本亚洲欧美天堂免费| 日韩欧美国产综合一区| 777奇米四色成人影色区| 不卡的电影网站| 色婷婷综合激情| 2020国产精品自拍| 国产精品综合一区二区三区| 久久精品日产第一区二区三区高清版| 国产一区二区三区黄视频| 国产精品蜜臀av| 欧美性猛交xxxxxxxx| 亚洲成人1区2区| 欧美精品一区二区三区久久久 | 欧美在线不卡一区| 日本欧美久久久久免费播放网| 精品国产不卡一区二区三区| 成人h版在线观看| 午夜精品一区二区三区电影天堂| 日韩欧美国产小视频| 成人激情av网| 亚洲二区视频在线| 精品国产免费人成在线观看| 99免费精品在线观看| 日产国产欧美视频一区精品| 久久精品欧美日韩精品| 日本道精品一区二区三区 | 日本最新不卡在线| 欧美激情自拍偷拍| 欧美日韩国产小视频在线观看| 久久精品国产亚洲一区二区三区| ㊣最新国产の精品bt伙计久久| 亚洲欧美日韩在线不卡| 亚洲一区影音先锋| 丝瓜av网站精品一区二区| 精品视频资源站| 国产一区在线不卡| 一级精品视频在线观看宜春院| 亚洲精品在线三区| 欧美日韩另类国产亚洲欧美一级| 国产精品一色哟哟哟| 午夜伊人狠狠久久| 中文字幕av免费专区久久| 日韩一区二区免费高清| 91老师片黄在线观看| 国产一区二区三区精品欧美日韩一区二区三区| 亚洲美女在线一区| 国产欧美中文在线| 欧美草草影院在线视频| 在线观看免费成人| 99精品欧美一区| 国产精品一二三四区|