Vector3D.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace bbiwarg.Utility
  7. {
  8. public class Vector3D
  9. {
  10. public float X { get; private set; }
  11. public float Y { get; private set; }
  12. public float Z { get; private set; }
  13. public int IntX { get { return (int)X; } }
  14. public int IntY { get { return (int)Y; } }
  15. public int IntZ { get { return (int)Z; } }
  16. public float Length { get { return (float)Math.Sqrt(X * X + Y * Y + Z * Z); } }
  17. public Vector3D(float x, float y, float z)
  18. {
  19. X = x;
  20. Y = y;
  21. Z = z;
  22. }
  23. public float getDistanceTo(Vector3D point)
  24. {
  25. return (this - point).Length;
  26. }
  27. public static Vector3D operator *(float scalar, Vector3D v)
  28. {
  29. return new Vector3D(scalar * v.X, scalar * v.Y, scalar * v.Z);
  30. }
  31. public static Vector3D operator *(Vector3D v, float scalar)
  32. {
  33. return new Vector3D(scalar * v.X, scalar * v.Y, scalar * v.Z);
  34. }
  35. public static Vector3D operator /(Vector3D v, float scalar)
  36. {
  37. return new Vector3D(v.X / scalar, v.Y / scalar, v.Z / scalar);
  38. }
  39. public static Vector3D operator /(Vector3D v1, Vector3D v2)
  40. {
  41. return new Vector3D(v1.X / v2.X, v1.Y / v2.Y, v1.Z / v2.Z);
  42. }
  43. public static Vector3D operator +(Vector3D v1, Vector3D v2)
  44. {
  45. return new Vector3D(v1.X + v2.X, v1.Y + v2.Y, v1.Z + v2.Z);
  46. }
  47. public static Vector3D operator -(Vector3D v1, Vector3D v2)
  48. {
  49. return new Vector3D(v1.X - v2.X, v1.Y - v2.Y, v1.Z - v2.Z);
  50. }
  51. }
  52. }