All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gov.sandia.cognition.math.matrix.mtj.Vector3 Maven / Gradle / Ivy

There is a newer version: 4.0.1
Show newest version
/*
 * File:                Vector3.java
 * Authors:             Kevin R. Dixon
 * Company:             Sandia National Laboratories
 * Project:             Cognitive Foundry
 *
 * Copyright March 22, 2006, Sandia Corporation.  Under the terms of Contract
 * DE-AC04-94AL85000, there is a non-exclusive license for use of this work by
 * or on behalf of the U.S. Government. Export of this program may require a
 * license from the United States Government. See CopyrightHistory.txt for
 * complete details.
 *
 */

package gov.sandia.cognition.math.matrix.mtj;

import gov.sandia.cognition.annotation.CodeReview;
import gov.sandia.cognition.math.matrix.Vector;
import gov.sandia.cognition.math.matrix.Vector3D;
import java.util.Random;

/**
 * Implements a three-dimensional {@code DenseVector}.
 *
 * @author Kevin R. Dixon
 * @since  1.0
 */
@CodeReview(
    reviewer="Justin Basilico",
    date="2006-07-26",
    changesNeeded=false,
    comments="Looks good."
)
public class Vector3
    extends DenseVector
    implements Vector3D
{

    /**
     * Creates a new instance of Vector3 that is all zeros.
     */
    public Vector3()
    {
        this(0.0, 0.0, 0.0);
    }

    /**
     * Creates a new instance of Vector3 with the given values.
     *
     * @param   x
     *      The x-coordinate.
     * @param   y
     *      The y-coordinate.
     * @param   z
     *      The z-coordinate.
     */
    public Vector3(
        double x,
        double y,
        double z)
    {
        super(3);

        this.setX(x);
        this.setY(y);
        this.setZ(z);
    }

    /**
     * Creates a new instance of Vector3 with values copied from the given
     * vector.
     * 
     * @param   other
     *      The other vector to copy.
     */
    public Vector3(
        Vector other)
    {
        this(other.getElement(0), other.getElement(1), other.getElement(2));
        this.assertSameDimensionality(other);
    }

   /**
     * Creates a new instance of Vector3 with values copied from the given
     * vector.
     *
     * @param   other
     *      The other vector to copy.
     */
    public Vector3(
        Vector3D other)
    {
        this(other.getX(), other.getY(), other.getZ());
    }

    @Override
    public Vector3 clone()
    {
        return (Vector3) super.clone();
    }

    @Override
    public int getDimensionality()
    {
        return 3;
    }

    public double getX()
    {
        return this.getElement(0);
    }

    public void setX(
        double x)
    {
        this.setElement(0, x);
    }

    public double getY()
    {
        return this.getElement(1);
    }

    public void setY(
        double y)
    {
        this.setElement(1, y);
    }

    public double getZ()
    {
        return this.getElement(2);
    }

    public void setZ(
        double z)
    {
        this.setElement(2, z);
    }

    public void setXYZ(
        final double x,
        final double y,
        final double z)
    {
        this.setX(x);
        this.setY(y);
        this.setZ(z);
    }

    /**
     * The String representation of the Vector3, which is "<x, y, z>".
     *
     * @return The string "<x, y, z>".
     */
    @Override
    public String toString()
    {
        return "<" + this.getX() + ", " 
                   + this.getY() + ", " 
                   + this.getZ() + ">";
    }
    
    /**
     * Creates a new random Vector3 from the given Random object. Each value
     * in the new Vector3 is a random number between 0.0 and 1.0.
     * 
     * @param   random The random number generator to use.
     * @return  A new random Vector3.
     */
    public static Vector3 createRandom(
        final Random random)
    {
        return new Vector3(
            random.nextDouble(), random.nextDouble(), random.nextDouble());
    }

    public Double getFirst()
    {
        return this.getX();
    }

    public Double getSecond()
    {
        return this.getY();
    }

    public Double getThird()
    {
        return this.getZ();
    }
    
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy