Tuesday, August 20, 2013

The DinkVector

The DinkVector is a 3D vector implementation that parallels much of the functionality from most common vector implementations but is geared more toward plotting and navigating in three-dimensional space. It's a collection of calculations that I find myself having to rewrite more and more frequently in my personal projects and am now posting it here for anyone else coming across the same needs.

This is the sort of thing you either do or don't recognize its usefulness so I'll leave it at that.

The source is available on github here: DinkVector
I am providing source for my common languages: C#, javascript, lua, and a generated VB version for you VBers out there. (These will show up on github as I finish porting to them)

The basic interface is as follows:

  1.     public class DinkVector
  2.     {
  3.         double X { getset; }
  4.         double Y { getset; }
  5.         double Z { getset; }
  6.         DinkVector() { }
  7.         DinkVector(double x, double y, double z);
  8.         DinkVector(DinkVector dinkVector);
  9.         static DinkVector FromX(double xAngle, double length);
  10.         static DinkVector FromY(double yAngle, double length);
  11.         static DinkVector FromZ(double zAngle, double length);
  12.         static DinkVector FromZX(double zAngle, double xAngle, double length);
  13.         static DinkVector FromZY(double zAngle, double yAngle, double length);
  14.         static DinkVector FromXY(double xAngle, double yAngle, double length);
  15.         DinkVector Add(DinkVector dinkVector);
  16.         DinkVector Add(double x, double y, double z);
  17.         static DinkVector operator +(DinkVector left, DinkVector right);
  18.         DinkVector Subtract(DinkVector dinkVector);
  19.         DinkVector Subtract(double x, double y, double z);
  20.         static DinkVector operator -(DinkVector left, DinkVector right);
  21.         DinkVector Multiply(DinkVector dinkVector);
  22.         DinkVector Multiply(double x, double y, double z);
  23.         static DinkVector operator *(DinkVector left, DinkVector right);
  24.         DinkVector Divide(DinkVector dinkVector);
  25.         DinkVector Divide(double x, double y, double z);
  26.         static DinkVector operator /(DinkVector left, DinkVector right);
  27.         DinkVector Modulo(DinkVector dinkVector);
  28.         DinkVector Modulo(double x, double y, double z);
  29.         static DinkVector operator %(DinkVector left, DinkVector right);
  30.         void Negate();
  31.         void Normalize();

  32.         double Length getset; }
  33.         double GetLengthFrom(DinkVector dinkVector);
  34.         double GetLengthFrom(double x, double y, double z);
  35.         void SetLengthFrom(DinkVector dinkVector, double length);
  36.         void SetLengthFrom(double x, double y, double z, double length);
  37.         double ZAngle getset; }
  38.         double GetZAngleFrom(DinkVector dinkVector);
  39.         double GetZAngleFrom(double x, double y);
  40.         void SetZAngleFrom(DinkVector dinkVector, double angle);
  41.         void SetZAngleFrom(double x, double y, double angle);
  42.         double XAngle getset; }
  43.         double GetXAngleFrom(DinkVector dinkVector);
  44.         double GetXAngleFrom(double z, double y);
  45.         void SetXAngleFrom(DinkVector dinkVector, double angle);
  46.         void SetXAngleFrom(double z, double y, double angle);
  47.         double YAngle getset; }
  48.         double GetYAngleFrom(DinkVector dinkVector);
  49.         double GetYAngleFrom(double x, double z);
  50.         void SetYAngleFrom(DinkVector dinkVector, double angle);
  51.         void SetYAngleFrom(double x, double z, double angle);

  52.         double ZAngleStep get; }
  53.         double XAngleStep get; }
  54.         double YAngleStep get; }
  55.     }