diff --git a/Source/OpenTK/Math/Vector2.cs b/Source/OpenTK/Math/Vector2.cs new file mode 100644 index 00000000..8cdf6c64 --- /dev/null +++ b/Source/OpenTK/Math/Vector2.cs @@ -0,0 +1,161 @@ +#region --- License --- +/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos + * See license.txt for license info + */ +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; + +namespace OpenTK.Math +{ + /// + /// Represents a 2D vector. + /// + [StructLayout(LayoutKind.Sequential)] + public struct Vector2 + { + /// + /// The X coordinate of the Vector2. + /// + public float X; + + /// + /// The Y coordinate of the Vector2. + /// + public float Y; + + /// + /// Constructs a new Vector2. + /// + /// The x coordinate of the net Vector2. + /// The y coordinate of the net Vector2. + public Vector2(float x, float y) + { + X = x; + Y = y; + } + + /// + /// Adds the given Vector2 to the current Vector2. + /// + /// The right operand of the addition. + /// A new Vector2 containing the result of the addition. + public Vector2 Add(Vector2 right) + { + return new Vector2(X + right.X, Y + right.Y); + } + + /// + /// Adds the given Vector3 to the current Vector2. + /// + /// The right operand of the addition. + /// A new Vector3 containing the result of the addition. + public Vector3 Add(Vector3 right) + { + return new Vector3(X + right.X, Y + right.Y, right.Z); + } + + /// + /// Adds the given Vector4 to the current Vector2. + /// + /// The right operand of the addition. + /// A new Vector4 containing the result of the addition. + public Vector4 Add(Vector4 right) + { + return new Vector4(X + right.X, Y + right.Y, right.Z, right.W); + } + + /// + /// Subtracts the given Vector2 from the current Vector2. + /// + /// The right operand of the subtraction. + /// A new Vector2 containing the result of the subtraction. + public Vector2 Sub(Vector2 right) + { + return new Vector2(X - right.X, Y - right.Y); + } + + /// + /// Subtracts the given Vector3 from the current Vector2. + /// + /// The right operand of the subtraction. + /// A new Vector3 containing the result of the subtraction. + public Vector3 Sub(Vector3 right) + { + return new Vector3(X - right.X, Y - right.Y, -right.Z); + } + + /// + /// Subtracts the given Vector4 from the current Vector2. + /// + /// The right operand of the subtraction. + /// A new Vector4 containing the result of the subtraction. + public Vector4 Sub(Vector4 right) + { + return new Vector4(X - right.X, Y - right.Y, -right.Z, -right.W); + } + + /// + /// Computes the dot product between the curren Vector2 and the given Vector2. + /// + /// The right operand of the dot product. + /// A float containing the result of the dot product. + public float Dot(Vector2 right) + { + return X * right.X + Y * right.Y; + } + + /// + /// Computes the dot product between the curren Vector2 and the given Vector3. + /// + /// The right operand of the dot product. + /// A float containing the result of the dot product. + public float Dot(Vector3 right) + { + return X * right.X + Y * right.Y; + } + + /// + /// Computes the dot product between the curren Vector2 and the given Vector4. + /// + /// The right operand of the dot product. + /// A float containing the result of the dot product. + public float Dot(Vector4 right) + { + return X * right.X + Y * right.Y; + } + + public static Vector2 operator +(Vector2 left, Vector2 right) + { + return left.Add(right); + } + + public static Vector3 operator +(Vector2 left, Vector3 right) + { + return left.Add(right); + } + + public static Vector4 operator +(Vector2 left, Vector4 right) + { + return left.Add(right); + } + + public static Vector2 operator -(Vector2 left, Vector2 right) + { + return left.Sub(right); + } + + public static Vector3 operator -(Vector2 left, Vector3 right) + { + return left.Sub(right); + } + + public static Vector4 operator -(Vector2 left, Vector4 right) + { + return left.Sub(right); + } + } +} diff --git a/Source/OpenTK/Math/Vector3.cs b/Source/OpenTK/Math/Vector3.cs new file mode 100644 index 00000000..8483993f --- /dev/null +++ b/Source/OpenTK/Math/Vector3.cs @@ -0,0 +1,26 @@ +#region --- License --- +/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos + * See license.txt for license info + */ +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; + +namespace OpenTK.Math +{ + [StructLayout(LayoutKind.Sequential)] + public struct Vector3 + { + public float X, Y, Z; + + public Vector3(float x, float y, float z) + { + X = x; + Y = y; + Z = z; + } + } +} diff --git a/Source/OpenTK/Math/Vector4.cs b/Source/OpenTK/Math/Vector4.cs new file mode 100644 index 00000000..1ceb7b72 --- /dev/null +++ b/Source/OpenTK/Math/Vector4.cs @@ -0,0 +1,27 @@ +#region --- License --- +/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos + * See license.txt for license info + */ +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; + +namespace OpenTK.Math +{ + [StructLayout(LayoutKind.Sequential)] + public struct Vector4 + { + public float X, Y, Z, W; + + public Vector4(float x, float y, float z, float w) + { + X = x; + Y = y; + Z = z; + W = w; + } + } +}