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

📄 angle.cs

📁 功能:基于windows mobile 的地图查看器。使用vs2005开发
💻 CS
字号:
using System;
using System.Globalization;

namespace WorldWindow
{
	/// <summary>
	/// A geometric angle
	/// </summary>
	public struct Angle
	{
		public double Radians;

		/// <summary>
		/// Creates a new angle from angle in radians.
		/// </summary>
		public static Angle FromRadians(double radians)
		{
			Angle res = new Angle();
			res.Radians = radians;	
			return res;
		}

		/// <summary>
		/// Creates a new angle from angle in degrees.
		/// </summary>
		public static Angle FromDegrees(double degrees)
		{
			Angle res = new Angle();
			res.Radians = Math.PI * degrees / 180.0f;
			return res;
		}

		/// <summary>
		/// A zeroed angle
		/// </summary>
		public static readonly Angle Zero;

		/// <summary>
		/// Minimum value for angle
		/// </summary>
		public static readonly Angle MinValue = Angle.FromRadians(double.MinValue);

		/// <summary>
		/// Maximum value for angle
		/// </summary>
		public static readonly Angle MaxValue = Angle.FromRadians(double.MaxValue);

		/// <summary>
		/// Angle containing Not a Number
		/// </summary>
		public static readonly Angle NaN = Angle.FromRadians(double.NaN);

		public double Degrees
		{
			get { return MathEngine.RadiansToDegrees(this.Radians);}
			set { this.Radians = MathEngine.DegreesToRadians(value); }
		}


		/// <summary>
		/// Returns the absolute value of the specified angle
		/// </summary>
		public static Angle Abs( Angle a )
		{
			return Angle.FromRadians(Math.Abs(a.Radians));
		}

		/// <summary>
		/// Checks for angle containing "Not a Number"
		/// </summary>
		public static bool IsNaN(Angle a)
		{
			return double.IsNaN(a.Radians);
		}

		public override bool Equals(object obj) 
		{
			if (obj == null || GetType() != obj.GetType()) 
				return false;
			Angle a = (Angle)obj;
			return Math.Abs(Radians - a.Radians) < Single.Epsilon;
		}
	
		public static bool operator ==(Angle a, Angle b) {
			return Math.Abs(a.Radians - b.Radians) < Single.Epsilon;
		}

		public static bool operator !=(Angle a, Angle b) {
			return Math.Abs(a.Radians - b.Radians) > Single.Epsilon;
		}

		public static bool operator <(Angle a, Angle b) 
		{
			return a.Radians < b.Radians;
		}

		public static bool operator >(Angle a, Angle b) 
		{
			return a.Radians > b.Radians;
		}

		public static Angle operator +(Angle a, Angle b) 
		{
			double res = a.Radians + b.Radians;
			return Angle.FromRadians(res);
		}

		public static Angle operator -(Angle a, Angle b) 
		{
			double res = a.Radians - b.Radians;
			return Angle.FromRadians(res);
		}

		public static Angle operator *(Angle a, double times) 
		{
			return Angle.FromRadians(a.Radians * times);
		}

		public static Angle operator *(double times, Angle a) 
		{
			return Angle.FromRadians(a.Radians * times);
		}

		public static Angle operator /(double divisor, Angle a) 
		{
			return Angle.FromRadians(a.Radians / divisor);
		}

		public static Angle operator /(Angle a, double divisor) 
		{
			return Angle.FromRadians(a.Radians / divisor);
		}

		public override int GetHashCode() 
		{
			return (int)(Radians*100000);
		}

		/// <summary>
		/// Normalizes the angle so it is between 0

⌨️ 快捷键说明

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