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

org.joml.LineSegmentf Maven / Gradle / Ivy

There is a newer version: 1.10.8
Show newest version
/*
 * The MIT License
 *
 * Copyright (c) 2017-2020 JOML
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
package org.joml;

import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.text.DecimalFormat;
import java.text.NumberFormat;

/**
 * Represents an undirected line segment between two points.
 * 
 * @author Kai Burjack
 */
public class LineSegmentf implements Externalizable {

    /**
     * The x coordinate of the first point.
     */
    public float aX;
    /**
     * The y coordinate of the first point.
     */
    public float aY;
    /**
     * The z coordinate of the first point.
     */
    public float aZ;
    /**
     * The x coordinate of the second point.
     */
    public float bX;
    /**
     * The y coordinate of the second point.
     */
    public float bY;
    /**
     * The z coordinate of the second point.
     */
    public float bZ;

    /**
     * Create a new {@link LineSegmentf} of zero length on the point (0, 0, 0).
     */
    public LineSegmentf() {
    }

    /**
     * Create a new {@link LineSegmentf} as a copy of the given source.
     * 
     * @param source
     *          the {@link LineSegmentf} to copy from
     */
    public LineSegmentf(LineSegmentf source) {
        this.aX = source.aX;
        this.aY = source.aY;
        this.aZ = source.aZ;
        this.aX = source.bX;
        this.bY = source.bY;
        this.bZ = source.bZ;
    }

    /**
     * Create a new {@link LineSegmentf} between the given two points.
     * 
     * @param a
     *          the first point
     * @param b
     *          the second point
     */
    public LineSegmentf(Vector3fc a, Vector3fc b) {
        this.aX = a.x();
        this.aY = a.y();
        this.aZ = a.z();
        this.bX = b.x();
        this.bY = b.y();
        this.bZ = b.z();
    }

    /**
     * Create a new {@link LineSegmentf} between the two points.
     * 
     * @param aX
     *          the x coordinate of the first point
     * @param aY
     *          the y coordinate of the first point
     * @param aZ
     *          the z coordinate of the first point
     * @param bX
     *          the x coordinate of the second point
     * @param bY
     *          the y coordinate of the second point
     * @param bZ
     *          the z coordinate of the second point
     */
    public LineSegmentf(float aX, float aY, float aZ, float bX, float bY, float bZ) {
        super();
        this.aX = aX;
        this.aY = aY;
        this.aZ = aZ;
        this.bX = bX;
        this.bY = bY;
        this.bZ = bZ;
    }

    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + Float.floatToIntBits(aX);
        result = prime * result + Float.floatToIntBits(aY);
        result = prime * result + Float.floatToIntBits(aZ);
        result = prime * result + Float.floatToIntBits(bX);
        result = prime * result + Float.floatToIntBits(bY);
        result = prime * result + Float.floatToIntBits(bZ);
        return result;
    }

    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        LineSegmentf other = (LineSegmentf) obj;
        if (Float.floatToIntBits(aX) != Float.floatToIntBits(other.aX))
            return false;
        if (Float.floatToIntBits(aY) != Float.floatToIntBits(other.aY))
            return false;
        if (Float.floatToIntBits(aZ) != Float.floatToIntBits(other.aZ))
            return false;
        if (Float.floatToIntBits(bX) != Float.floatToIntBits(other.bX))
            return false;
        if (Float.floatToIntBits(bY) != Float.floatToIntBits(other.bY))
            return false;
        if (Float.floatToIntBits(bZ) != Float.floatToIntBits(other.bZ))
            return false;
        return true;
    }

    /**
     * Return a string representation of this line segment.
     * 

* This method creates a new {@link DecimalFormat} on every invocation with the format string "0.000E0;-". * * @return the string representation */ public String toString() { return Runtime.formatNumbers(toString(Options.NUMBER_FORMAT)); } /** * Return a string representation of this line segment by formatting the vector components with the given {@link NumberFormat}. * * @param formatter * the {@link NumberFormat} used to format the vector components with * @return the string representation */ public String toString(NumberFormat formatter) { return "(" + Runtime.format(aX, formatter) + " " + Runtime.format(aY, formatter) + " " + Runtime.format(aZ, formatter) + ") - " + "(" + Runtime.format(bX, formatter) + " " + Runtime.format(bY, formatter) + " " + Runtime.format(bZ, formatter) + ")"; } public void writeExternal(ObjectOutput out) throws IOException { out.writeFloat(aX); out.writeFloat(aY); out.writeFloat(aZ); out.writeFloat(bX); out.writeFloat(bY); out.writeFloat(bZ); } public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { aX = in.readFloat(); aY = in.readFloat(); aZ = in.readFloat(); bX = in.readFloat(); bY = in.readFloat(); bZ = in.readFloat(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy