33using System.Collections.Generic;
35using Matrix = Microsoft.Xna.Framework.Matrix;
117 result.
X = length * Math.Cos( angle );
118 result.
Y = length * Math.Sin( angle );
146 return Math.Sqrt( (
float)(x * x + y * y) );
157 return left.
Y * right.
Y + left.
X * right.
X;
231 (
X * matrix.M11 ) + (
Y * matrix.M21 ) + matrix.M41,
232 (
X * matrix.M12 ) + (
Y * matrix.M22 ) + matrix.M42
253 double minMagnitude = vectors[0].
Magnitude;
255 for (
int i = 1; i < vectors.Length; i++ )
257 double m = vectors[i].Magnitude;
258 if ( m < minMagnitude )
265 return vectors[minIndex];
276 double maxMagnitude = vectors[0].
Magnitude;
278 for (
int i = 1; i < vectors.Length; i++ )
280 double m = vectors[i].Magnitude;
281 if ( m > maxMagnitude )
288 return vectors[maxIndex];
302 foreach ( var v
in vectors )
322 foreach ( var v
in vectors )
328 return vectors.Length > 0 ?
new Vector( sumX, sumY ) / vectors.Length :
Vector.
Zero;
334 [Save]
public double X;
339 [Save]
public double Y;
354 get {
return X *
X +
Y *
Y; }
375 double a = Math.Atan2(
Y,
X );
388 return ToString( NumberFormatInfo.InvariantInfo );
397 public string ToString( IFormatProvider formatProvider )
399 string x =
X.ToString( formatProvider );
400 string y =
Y.ToString( formatProvider );
401 return string.Format(
"({0},{1})", x, y );
411 return Parse( vectorStr, NumberFormatInfo.InvariantInfo );
421 public static Vector Parse(
string vectorStr, IFormatProvider formatProvider )
423 string[] splitStr = vectorStr.Split(
'(',
',',
')' );
425 if ( splitStr.Length != 4 )
426 throw new FormatException(
"Not a vector string: " + vectorStr );
428 double x =
double.Parse( splitStr[1], formatProvider );
429 double y =
double.Parse( splitStr[2], formatProvider );
431 return new Vector( x, y );
440 return HashCode.Combine(
X.GetHashCode(),
Y.GetHashCode());
451 if (obj is not
Vector)
return false;
458 return (Math.Abs(
X - x) <
double.Epsilon) && (Math.Abs(
Y - y) <
double.Epsilon);
472 result.
X = left.
X + right.
X;
473 result.
Y = left.
Y + right.
Y;
486 result.
X = left.
X - right.
X;
487 result.
Y = left.
Y - right.
Y;
500 result.
X = source.
X * scalar;
501 result.
Y = source.
Y * scalar;
513 return source * scalar;
527 result.
X = source.
X / scalar;
528 result.
Y = source.
Y / scalar;
540 result.
X = -source.
X;
541 result.
Y = -source.
Y;
553 return ( Math.Abs( left.
X - right.
X ) <
double.Epsilon ) && ( Math.Abs( left.
Y - right.
Y ) <
double.Epsilon );
564 return !( left == right );
567 #region AdvMath conversions
588 #region MonoGame conversions
594 public static implicit
operator Vector(Microsoft.Xna.Framework.Vector2 v)
596 return new Vector(v.X, v.Y);
603 public static implicit
operator Microsoft.Xna.Framework.Vector2(
Vector v)
605 return new Microsoft.Xna.Framework.Vector2((
float)v.
X, (
float)v.
Y);
612 public static implicit
operator Vector(Microsoft.Xna.Framework.Vector3 v)
621 public static implicit
operator Microsoft.Xna.Framework.Vector3(
Vector v)
623 return new Microsoft.Xna.Framework.Vector3((
float)v.
X, (
float)v.
Y, 0);
630 public static implicit
operator Vector(Microsoft.Xna.Framework.Vector4 v)
639 public static implicit
operator Microsoft.Xna.Framework.Vector4(
Vector v)
641 return new Microsoft.Xna.Framework.Vector4((
float)v.
X, (
float)v.
Y, 0, 0);
645 #region System.Numerics conversions
662 return new System.Numerics.Vector2((
float)v.
X, (
float)v.
Y);
680 return new System.Numerics.Vector3((
float)v.
X, (
float)v.
Y, 0);
698 return new System.Numerics.Vector4((
float)v.
X, (
float)v.
Y, 0, 0);
Microsoft.Xna.Framework.Matrix Matrix
Microsoft.Xna.Framework.Matrix Matrix
This is the Vector Class.
Scalar X
This is the X value. (Usually represents a horizontal position or direction.)
Scalar Y
This is the Y value. (Usually represents a vertical position or direction.)
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
static Angle FromRadians(double radian)
Luo kulman annettujen radiaanien mukaan.
double Radians
Palauttaa tai asettaa kulman radiaaneina.
static Vector operator/(Vector source, double scalar)
Jakaa vektorin skalaarilla
Vector LeftNormal
Vasen normaali.
static Vector Max(params Vector[] vectors)
Palauttaa pisimmän vektorin.
double Y
Vektorin Y-komponentti
Vector Transform(Matrix matrix)
Kertoo vektorin matriisilla.
Vector Normalize()
Palauttaa uuden vektorin, jonka suunta pysyy samana, mutta pituudeksi tulee 1.0.
Vector RightNormal
Oikea normaali.
static Vector FromAngle(Angle angle)
Luo vektorin kulman perusteella yksikköpituudella.
static Vector Parse(string vectorStr)
Muodostaa (x,y) muodossa olevasta merkkijonsta vektorin
static bool operator!=(Vector left, Vector right)
Ovatko vektorit eri
override string ToString()
Vektori merkkijonona muodossa (x,y)
Vector Project(Vector to)
Laskee ja palauttaa tämän pisteen etäisyyden toiseen pisteeseen.
override int GetHashCode()
Vektorin hajautuskoodi
static double Distance(Vector p1, Vector p2)
Etäisyys kahden pisteen välillä.
static readonly Vector One
Yksikkövektori.
static readonly Vector Zero
Nollavektori.
static Vector FromLengthAndAngle(double length, Angle angle)
Luo vektorin pituuden ja kulman perusteella.
double X
Vektorin X-komponentti.
Angle Angle
Kulma radiaaneina.
static Vector Parse(string vectorStr, IFormatProvider formatProvider)
Muodostaa (x,y) muodossa olevasta merkkijonsta vektorin, jossa x ja y on muotoiltu annetun formaatin ...
double MagnitudeSquared
Vektorin pituuden neliö.
static Vector Min(params Vector[] vectors)
Palauttaa lyhimmän vektorin.
static Vector Average(IEnumerable< Vector > vectors)
Palauttaa kahden tai useamman vektorin keskiarvon.
static Vector ComponentProduct(Vector a, Vector b)
Kertoo kaksi vektoria komponenteittain.
static readonly Vector Diagonal
Diagonaalivektori (1,1)
static Vector operator*(Vector source, double scalar)
Kertoo vektorin skalaarilla
static Vector Average(params Vector[] vectors)
Palauttaa kahden tai useamman vektorin keskiarvon.
override bool Equals(Object obj)
Onko annettu vektori yhtäsuuri tämän kanssa. Tosi, jos vektorien komponentit ovat double....
static bool operator==(Vector left, Vector right)
Ovatko vektorit samat
static Vector operator+(Vector left, Vector right)
Summaa vektorit yhteen
static readonly Vector UnitY
Pystysuuntainen yksikkövektori (pituus 1, suunta ylös).
Vector(double X, double Y)
Luo uuden vektorin komponenteista.
static readonly Vector UnitX
Vaakasuuntainen yksikkövektori (pituus 1, suunta oikealle).
double ScalarProjection(Vector vector)
Skalaariprojektio annettuun vektoriin https://en.wikipedia.org/wiki/Scalar_projection
static double DotProduct(Vector left, Vector right)
Pistetulo.
double Magnitude
Vektorin pituus.
static double CrossProduct(Vector left, Vector right)
Ristitulo. Palauttaa kohtisuoraan vektoreita vastaan olevan uuden vektorin pituuden....
Vector Transpose()
Palauttaa uuden vektorin, jossa x ja y on vaihdettu keskenään.
static Vector operator-(Vector left, Vector right)
Vähentää vektorit toisistaan
string ToString(IFormatProvider formatProvider)
Vektori merkkijonona muodossa (x,y), jossa x ja y on muotoiltu annetun formaatin mukaisesti
double Distance(Vector vector)
Etäisyys kahden pisteen välillä
static Vector FromLengthAndAngle(double length, double angle)
Luo vektorin pituuden ja kulman perusteella.