//----------------------------------------------------------------------------//
//                                                                            //
//                               L i n e U t i l                              //
//                                                                            //
//----------------------------------------------------------------------------//
//                           //
//  Copyright © Hervé Bitteur and others 2000-2013. All rights reserved.      //
//  This software is released under the GNU General Public License.           //
//  Goto http://kenai.com/projects/audiveris to report bugs or suggestions.   //
//----------------------------------------------------------------------------//
// 
package jhpro.fit;


import java.awt.geom.Line2D;
import java.awt.geom.Point2D;

/**
 * Class {@code LineUtil} is a collection of utilities related to
 * lines.
 *
 * @author Herve Bitteur
 */
public class LineUtil
{
    //~ Constructors -----------------------------------------------------------

    private LineUtil ()
    {
    }

    //~ Methods ----------------------------------------------------------------
    //----------//
    // bisector //
    //----------//
    /**
     * Return the bisector (french: médiatrice) of the provided segment
     *
     * @param segment the provided segment
     * @return (a segment on) the bisector
     */
    public static Line2D bisector (Line2D segment)
    {
        double x1 = segment.getX1();
        double y1 = segment.getY1();

        double hdx = (segment.getX2() - x1) / 2;
        double hdy = (segment.getY2() - y1) / 2;

        // Use middle as reference point
        double mx = x1 + hdx;
        double my = y1 + hdy;

        double x3 = mx + hdy;
        double y3 = my - hdx;
        double x4 = mx - hdy;
        double y4 = my + hdx;

        return new Line2D.Double(x3, y3, x4, y4);
    }

    //--------------//
    // intersection //
    //--------------//
    /**
     * Return the intersection point between infinite line A defined by
     * points p1 & p2 and infinite line B defined by points p3 & p4.
     *
     * @param p1 first point of line A
     * @param p2 second point of line A
     * @param p3 first point of line B
     * @param p4 second point of line B
     * @return the intersection point
     */
    public static Point2D.Double intersection (Point2D p1,
                                               Point2D p2,
                                               Point2D p3,
                                               Point2D p4)
    {
        double x1 = p1.getX();
        double y1 = p1.getY();
        double x2 = p2.getX();
        double y2 = p2.getY();
        double x3 = p3.getX();
        double y3 = p3.getY();
        double x4 = p4.getX();
        double y4 = p4.getY();

        double den = ((x1 - x2) * (y3 - y4)) - ((y1 - y2) * (x3 - x4));

        double v12 = (x1 * y2) - (y1 * x2);
        double v34 = (x3 * y4) - (y3 * x4);

        double x = ((v12 * (x3 - x4)) - ((x1 - x2) * v34)) / den;
        double y = ((v12 * (y3 - y4)) - ((y1 - y2) * v34)) / den;

        return new Point2D.Double(x, y);
    }
}


 

Ads help maintain this website.