Jypeli 10
The simple game programming library
UnlimitedAngle.cs
Siirry tämän tiedoston dokumentaatioon.
1#region MIT License
2/*
3 * Copyright (c) 2009 University of Jyväskylä, Department of Mathematical
4 * Information Technology.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 */
24#endregion
25
26/*
27 * Authors: Tero Jäntti, Tomi Karppinen, Janne Nikkanen.
28 */
29
30using System;
31using System.Globalization;
32
33namespace Jypeli
34{
39 public struct UnlimitedAngle
40 {
44 public static readonly UnlimitedAngle Zero = new UnlimitedAngle( 0 );
45
49 public static readonly UnlimitedAngle RightAngle = new UnlimitedAngle( 0.5 * Math.PI );
50
54 public static readonly UnlimitedAngle StraightAngle = new UnlimitedAngle( Math.PI );
55
59 public static readonly UnlimitedAngle FullAngle = new UnlimitedAngle( 2 * Math.PI );
60
64 public static readonly UnlimitedAngle Infinity = new UnlimitedAngle( double.PositiveInfinity );
65
66 private double radian;
67
72 public double Degrees
73 {
74 get
75 {
76 return RadianToDegree( radian );
77 }
78 set
79 {
80 radian = DegreeToRadian( value );
81 }
82 }
83
88 public double Radians
89 {
90 get { return radian; }
91 set
92 {
93 radian = (float)value;
94 }
95 }
96
101 {
102 get
103 {
104 if ( radian >= -Math.PI / 4 && radian <= Math.PI / 4 ) return Direction.Right;
105 if ( radian > Math.PI / 4 && radian < 3 * Math.PI / 4 ) return Direction.Up;
106 if ( radian < -Math.PI / 4 && radian > -3 * Math.PI / 4 ) return Direction.Down;
107 return Direction.Left;
108 }
109 }
110
114 public double Sin
115 {
116 get { return Math.Sin( this.Radians ); }
117 }
118
122 public double Cos
123 {
124 get { return Math.Cos( this.Radians ); }
125 }
126
130 public double Tan
131 {
132 get { return Math.Tan( this.Radians ); }
133 }
134
135
136 private UnlimitedAngle( double radians )
137 {
138 this.radian = (float)radians;
139 }
140
141 #region Operators
142
150 {
151 return FromRadians( a.Radians + b.Radians );
152 }
153
161 {
162 return FromRadians( a.Radians - b.Radians );
163 }
164
170 {
171 return FromRadians( -a.Radians );
172 }
173
180 public static UnlimitedAngle operator *( double a, UnlimitedAngle b )
181 {
182 return FromRadians( a * b.Radians );
183 }
184
191 public static UnlimitedAngle operator *( UnlimitedAngle a, double b )
192 {
193 return FromRadians( a.Radians * b );
194 }
195
202 public static UnlimitedAngle operator /( UnlimitedAngle a, double b )
203 {
204 return FromRadians( a.Radians / b );
205 }
206
213 public static bool operator ==( UnlimitedAngle a, UnlimitedAngle b )
214 {
215 return a.Radians == b.Radians;
216 }
217
224 public static bool operator !=( UnlimitedAngle a, UnlimitedAngle b )
225 {
226 return a.Radians != b.Radians;
227 }
228
235 public static bool operator <( UnlimitedAngle a, UnlimitedAngle b )
236 {
237 return a.Radians < b.Radians;
238 }
239
246 public static bool operator <=( UnlimitedAngle a, UnlimitedAngle b )
247 {
248 return a.Radians <= b.Radians;
249 }
250
257 public static bool operator >( UnlimitedAngle a, UnlimitedAngle b )
258 {
259 return a.Radians > b.Radians;
260 }
261
268 public static bool operator >=( UnlimitedAngle a, UnlimitedAngle b )
269 {
270 return a.Radians >= b.Radians;
271 }
272
278 public static explicit operator Angle( UnlimitedAngle angle )
279 {
280 return angle.Limit();
281 }
282
290 {
292 }
293
301 {
303 }
304
305 #endregion
306
310 public Angle Limit()
311 {
312 return Angle.FromRadians( this.radian );
313 }
314
319 public static UnlimitedAngle FromRadians( double radian )
320 {
321 return new UnlimitedAngle( radian );
322 }
323
328 public static UnlimitedAngle FromDegrees( double degree )
329 {
330 return new UnlimitedAngle( DegreeToRadian( degree ) );
331 }
332
338 public static double DegreeToRadian( double degree )
339 {
340 return (float)( degree * ( System.Math.PI / 180 ) );
341 }
342
348 public static double RadianToDegree( double radian )
349 {
350 return radian * ( 180 / Math.PI );
351 }
352
359 public override int GetHashCode()
360 {
361 return Convert.ToInt32( Degrees );
362 }
363
369 public override bool Equals( object obj )
370 {
371 if ( obj is UnlimitedAngle )
372 {
373 return Double.Equals( this.Radians, ( (UnlimitedAngle)obj ).Radians );
374 }
375
376 else if ( obj is Angle )
377 {
378 return Double.Equals( this.Radians, ( (Angle)obj ).Radians );
379 }
380
381 return false;
382 }
383
388 public override string ToString()
389 {
390 return radian.ToString( System.Globalization.NumberFormatInfo.InvariantInfo );
391 }
392
398 public string ToString( IFormatProvider formatProvider )
399 {
400 return radian.ToString( formatProvider );
401 }
402
409 public static UnlimitedAngle Parse( string angleStr, IFormatProvider formatProvider )
410 {
411 return new UnlimitedAngle( double.Parse( angleStr, formatProvider ) );
412 }
413
419 public static UnlimitedAngle Parse( string angleStr )
420 {
421 return new UnlimitedAngle( double.Parse( angleStr, NumberFormatInfo.InvariantInfo ) );
422 }
423
429 public double GetPositiveRadians()
430 {
431 return Radians > 0 ? Radians : Math.PI * 2 + Radians;
432 }
433
439 public double GetPositiveDegrees()
440 {
441 double deg = Degrees;
442 while ( deg < 0 ) deg += 360;
443 return deg;
444 }
445
451 {
452 return Vector.FromAngle( Limit() );
453 }
454
455 #region Arcusfunktiot
456
462 public static UnlimitedAngle ArcSin( double d )
463 {
464 return new UnlimitedAngle( Math.Asin( d ) );
465 }
466
472 public static UnlimitedAngle ArcCos( double d )
473 {
474 return new UnlimitedAngle( Math.Acos( d ) );
475 }
476
482 public static UnlimitedAngle ArcTan( double d )
483 {
484 return new UnlimitedAngle( Math.Atan( d ) );
485 }
486
487 #endregion
488 }
489}
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
Definition: Angle.cs:40
static Angle FromRadians(double radian)
Luo kulman annettujen radiaanien mukaan.
Definition: Angle.cs:315
double Radians
Palauttaa tai asettaa kulman radiaaneina.
Definition: Angle.cs:85
Perussuunta tasossa.
Definition: Direction.cs:47
static Direction Up
Suunta ylös.
Definition: Direction.cs:56
static Direction Right
Suunta oikealle.
Definition: Direction.cs:71
static Direction Down
Suunta alas.
Definition: Direction.cs:61
static Direction Left
Suunta vasemmalle.
Definition: Direction.cs:66
Rajoittamaton kulma (asteina ja radiaaneina). Tietoja kulmasta: http://en.wikipedia....
Angle Limit()
Palauttaa kulman rajoitettuna välille -180 ja 180 astetta.
static bool operator<(UnlimitedAngle a, UnlimitedAngle b)
Vertaa ensimmäisen kulman suuremmuutta toiseen.
static UnlimitedAngle ArcCos(double d)
Palauttaa kulman joka vastaa d:n arcuskosini.
static readonly UnlimitedAngle RightAngle
Suora kulma (90 astetta).
static UnlimitedAngle operator*(double a, UnlimitedAngle b)
Kertoo kulman reaaliluvulla.
static UnlimitedAngle Sum(UnlimitedAngle a, Angle b)
Laskee yhteen rajoittamattoman ja rajoitetun kulman, palauttaen rajoittamattoman kulman.
static bool operator!=(UnlimitedAngle a, UnlimitedAngle b)
Vertaa kahden kulman erisuuruutta.
static bool operator==(UnlimitedAngle a, UnlimitedAngle b)
Vertaa kahden kulman yhtäsuuruutta.
Direction MainDirection
Kulmaa vastaava pääilmansuunta.
override bool Equals(object obj)
Tarkistaa kahden kulman yhtäsuuruuden. Jos parametrinä annetaan jotain muuta kuin kulma,...
static bool operator>(UnlimitedAngle a, UnlimitedAngle b)
Vertaa ensimmäisen kulman pienemmyyttä toiseen.
static UnlimitedAngle Parse(string angleStr)
Muodostaa äärettömän kulman annetusta merkkijonosta
static double RadianToDegree(double radian)
Muuttaa radiaanit asteiksi.
static bool operator<=(UnlimitedAngle a, UnlimitedAngle b)
Vertaa ensimmäisen kulman suuremmuutta/yhtäsuuruutta toiseen.
static readonly UnlimitedAngle FullAngle
Täysikulma (360 astetta).
static readonly UnlimitedAngle Zero
Nollakulma.
static readonly UnlimitedAngle StraightAngle
Oikokulma (180 astetta).
static UnlimitedAngle Parse(string angleStr, IFormatProvider formatProvider)
Muodostaa äärettömän kulman merkkijonosta käyttäen annettua muotoilijaa
static UnlimitedAngle ArcTan(double d)
Palauttaa kulman joka vastaa d:n arcus-tangentti.
string ToString(IFormatProvider formatProvider)
Kulma merkkijonona käyttäen annettua muotoilijaa
Vector GetVector()
Tätä kulmaa vastaava yksikkövektori
static bool operator>=(UnlimitedAngle a, UnlimitedAngle b)
Vertaa ensimmäisen kulman pienemmyyttä/yhtäsuuruutta toiseen.
static UnlimitedAngle ArcSin(double d)
Palauttaa kulman joka vastaa d:n arcus-sini.
static UnlimitedAngle Sum(Angle a, UnlimitedAngle b)
Laskee yhteen rajoitetun ja rajoittamattoman kulman, palauttaen rajoittamattoman kulman.
static UnlimitedAngle operator+(UnlimitedAngle a, UnlimitedAngle b)
Laskee kaksi kulmaa yhteen.
double GetPositiveDegrees()
Palauttaa kulman asteina siten, että se on aina positiivinen. Hyödyllinen esimerkiksi ympyrän kaarien...
static UnlimitedAngle operator/(UnlimitedAngle a, double b)
Jakaa kulman reaaliluvulla.
override string ToString()
Kulma merkkijonoa
static readonly UnlimitedAngle Infinity
Ääretön kulma.
static UnlimitedAngle operator-(UnlimitedAngle a, UnlimitedAngle b)
Vähentää jälkimmäisen kulman ensimmäisestä.
UnlimitedAngle(double radians)
double Degrees
Palauttaa tai asettaa kulman asteina.
double Cos
Kulman kosini.
double Tan
Kulman tangentti.
double Radians
Palauttaa tai asettaa kulman radiaaneina.
static UnlimitedAngle FromDegrees(double degree)
Luo kulman annettujen asteiden mukaan.
static double DegreeToRadian(double degree)
Muuttaa asteet radiaaneiksi.
static UnlimitedAngle FromRadians(double radian)
Luo kulman annettujen radiaanien mukaan.
override int GetHashCode()
Palauttaa kulmaa yksilöivän luvun, tässä tapauksessa kulman asteluvun.
double GetPositiveRadians()
Palauttaa kulman radiaaneina siten, että se on aina positiivinen. Hyödyllinen esimerkiksi ympyrän kaa...
double Sin
Kulman sini.
2D-vektori.
Definition: Vector.cs:67
static Vector FromAngle(Angle angle)
Luo vektorin kulman perusteella yksikköpituudella.
Definition: Vector.cs:133