org.jtrfp.trcl.obj.ObjectDirection.java Source code

Java tutorial

Introduction

Here is the source code for org.jtrfp.trcl.obj.ObjectDirection.java

Source

/*******************************************************************************
 * This file is part of TERMINAL RECALL
 * Copyright (c) 2012-2014 Chuck Ritola
 * Part of the jTRFP.org project
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Public License v3.0
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/gpl.html
 * 
 * Contributors:
 *     chuck - initial API and implementation
 ******************************************************************************/
package org.jtrfp.trcl.obj;

import org.apache.commons.math3.geometry.euclidean.threed.Rotation;
import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;

public class ObjectDirection {
    private final Vector3D heading;
    private final Vector3D top;
    private final double yaw, roll, tilt;

    public ObjectDirection(int legacyRoll, int legacyPitch, int legacyYaw) {
        Vector3D headingAccumulator, topAccumulator;
        Rotation rot;
        yaw = ((double) legacyYaw / 65535.) * 2 * Math.PI;
        roll = ((double) legacyRoll / 65535.) * 2 * Math.PI;
        tilt = ((double) legacyPitch / 65535.) * 2 * Math.PI;
        /*
         * Rotation hRot = new Rotation(//yaw only. new Vector3D(0,1,0), new
         * Vector3D(0,0,1), new Vector3D(0,1,0), new
         * Vector3D(Math.cos(yaw),0.,Math.sin(yaw))); heading =
         * hRot.applyTo(heading);
         */
        topAccumulator = new Vector3D(0, 1, 0);
        /*
         * Rotation tRot = new Rotation(//Pitch and roll new Vector3D(0,1,0),
         * new Vector3D(0,1,0), new Vector3D(Math.sin(roll),1,Math.cos(roll)),
         * new Vector3D(0.,Math.cos(tilt),Math.cos(tilt)));
         */
        headingAccumulator = Vector3D.PLUS_K;
        rot = new Rotation(Vector3D.PLUS_I, tilt);
        headingAccumulator = rot.applyTo(headingAccumulator);
        topAccumulator = rot.applyTo(topAccumulator);
        rot = new Rotation(Vector3D.PLUS_J, yaw + 1.5 * Math.PI);
        headingAccumulator = rot.applyTo(headingAccumulator);
        topAccumulator = rot.applyTo(topAccumulator);
        // Commit the values
        heading = headingAccumulator;
        top = topAccumulator;
    }

    public ObjectDirection(Vector3D heading, Vector3D top) {
        this.heading = heading;
        this.top = top;
        yaw = Double.POSITIVE_INFINITY;
        tilt = Double.POSITIVE_INFINITY;
        roll = Double.POSITIVE_INFINITY;
    }

    public Vector3D getHeading() {
        return heading;
    }

    public Vector3D getTop() {
        return top;
    }

    @Override
    public String toString() {
        return "ObjectDirection heading=" + heading + " top=" + top + " hash=" + hashCode();
    }

    /**
     * @return the yaw
     */
    public double getYaw() {
        return yaw;
    }

    /**
     * @return the roll
     */
    public double getRoll() {
        return roll;
    }

    /**
     * @return the tilt
     */
    public double getTilt() {
        return tilt;
    }
}// end ObjectDirection