Gets a vector perpendicular to the vector p2-p1, pointing to the right with respect to the direction of p2-p1. - Java java.lang

Java examples for java.lang:Math Vector

Description

Gets a vector perpendicular to the vector p2-p1, pointing to the right with respect to the direction of p2-p1.

Demo Code

/*/*from   w w w  .  ja v a  2 s  . c  o m*/
 * #%L
 * VisBio application for visualization of multidimensional biological
 * image data.
 * %%
 * Copyright (C) 2002 - 2014 Board of Regents of the University of
 * Wisconsin-Madison.
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as
 * published by the Free Software Foundation, either version 2 of the
 * License, or (at your option) any later version.
 * 
 * This program 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 General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public
 * License along with this program.  If not, see
 * <http://www.gnu.org/licenses/gpl-2.0.html>.
 * #L%
 */
//package com.java2s;

public class Main {
    /**
     * Gets a vector perpendicular to the vector p2-p1, pointing to the right with
     * respect to the direction of p2-p1.
     */
    public static float[] getRightPerpendicularVector2D(final float[] p2,
            final float[] p1) {
        final float[] v = vector(p2, p1);
        final float[] vPerp = { v[1], -v[0] };
        return unit(vPerp);
    }

    /** Creates the vector p2-(minus) p1. */
    public static float[] vector(final float[] p2, final float[] p1) {
        // assumes p1, p2 have same lengths
        if (p2.length != p1.length)
            return null;
        final int len = p2.length;
        final float[] v = new float[len];
        for (int i = 0; i < len; i++) {
            v[i] = p2[i] - p1[i];
        }
        return v;
    }

    /** Computes the N-D unit vector in the direction of the vector supplied. */
    public static float[] unit(final float[] v) {
        final float mag = mag(v);
        final float[] vHat = new float[v.length];
        for (int i = 0; i < v.length; i++) {
            vHat[i] = v[i] / mag;
        }
        return vHat;
    }

    /** Computes the magnitude of an N-D vector. */
    public static float mag(final float[] a) {
        return (float) Math.sqrt(dot(a, a));
    }

    /** Computes the dot product of two N-D vectors. */
    public static float dot(final float[] a, final float[] b) {
        float sum = 0f;
        for (int i = 0; i < a.length; i++) {
            sum += a[i] * b[i];
        }
        return sum;
    }
}

Related Tutorials