package mightypork.utils.math.vect; import mightypork.utils.annotations.FactoryMethod; /** * Mutable coord * * @author MightyPork */ public abstract class VectMutable extends VectView { // returns itself on edit /** * Get a variable initialized as zero (0,0,0) * * @return new mutable vector */ @FactoryMethod public static VectMutable zero() { return make(ZERO); } /** * Get a variable initialized as one (1,1,1) * * @return one mutable vector */ @FactoryMethod public static VectMutable one() { return make(ONE); } /** * Make new from coords * * @param x X coordinate * @param y Y coordinate * @return mutable vector */ @FactoryMethod public static VectMutable make(double x, double y) { return make(x, y, 0); } /** * Make new as copy of another * * @param copied copied vec * @return mutable vector */ @FactoryMethod public static VectMutable make(Vect copied) { return make(copied.x(), copied.y(), copied.z()); } /** * Make new from coords * * @param x X coordinate * @param y Y coordinate * @param z Z coordinate * @return mutable vector */ @FactoryMethod public static VectMutable make(double x, double y, double z) { return new VectMutableImpl(x, y, z); } /** * Set all to zeros. */ public void reset() { setTo(0, 0, 0); } /** * Set coordinates to match other coord. * * @param copied coord whose coordinates are used */ public void setTo(Vect copied) { setTo(copied.x(), copied.y(), copied.z()); } /** * Set 2D coordinates.
* Z is unchanged. * * @param x x coordinate * @param y y coordinate */ public void setTo(double x, double y) { setX(x); setY(y); } /** * Set coordinates. * * @param x x coordinate * @param y y coordinate * @param z z coordinate */ public abstract void setTo(double x, double y, double z); /** * Set X coordinate. * * @param x x coordinate */ public abstract void setX(double x); /** * Set Y coordinate. * * @param y y coordinate */ public abstract void setY(double y); /** * Set Z coordinate. * * @param z z coordinate */ public abstract void setZ(double z); }