org.getspout.commons.util.FastVector.java Source code

Java tutorial

Introduction

Here is the source code for org.getspout.commons.util.FastVector.java

Source

/*
 * This file is part of SpoutCommons (http://www.spout.org/).
 *
 * SpoutCommons is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * SpoutCommons is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.getspout.commons.util;

import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;

public class FastVector implements FixedVector {
    public final int x;
    public final int y;
    public final int z;

    public FastVector(int x, int y, int z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }

    public double getX() {
        return x;
    }

    public int getBlockX() {
        return x;
    }

    public double getY() {
        return y;
    }

    public int getBlockY() {
        return y;
    }

    public double getZ() {
        return z;
    }

    public int getBlockZ() {
        return z;
    }

    public double length() {
        return Math.sqrt(lengthSquared());
    }

    public double lengthSquared() {
        return x * x + y * y + z * z;
    }

    public double distance(Vector other) {
        return Math.sqrt(distanceSquared(other));
    }

    public double distanceSquared(Vector other) {
        return (x - other.getX()) * (x - other.getX()) + (y - other.getY()) * (y - other.getY())
                + (z - other.getZ()) * (z - other.getZ());
    }

    public float angle(Vector other) {
        double dot = dot(other) / (length() * other.length());
        return (float) Math.acos(dot);
    }

    public double dot(Vector other) {
        return x * other.getX() + y * other.getY() + z * other.getZ();
    }

    public boolean isInAABB(Vector min, Vector max) {
        return x >= min.getX() && x <= max.getX() && y >= min.getY() && y <= max.getY() && z >= min.getZ()
                && z <= max.getZ();
    }

    public boolean isInSphere(Vector origin, double radius) {
        return (Math.pow(origin.getX() - x, 2) + Math.pow(origin.getY() - y, 2)
                + Math.pow(origin.getZ() - z, 2)) <= Math.pow(radius, 2);
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof FastVector) {
            FastVector other = (FastVector) obj;
            return (new EqualsBuilder()).append(x, other.getX()).append(y, other.getY()).append(z, other.getZ())
                    .isEquals();
        }
        return false;
    }

    @Override
    public int hashCode() {
        return (new HashCodeBuilder()).append(x).append(y).append(z).toHashCode();
    }
}