get Closest To Line Rectangle Corner - Java java.lang

Java examples for java.lang:Math Geometry Line

Description

get Closest To Line Rectangle Corner

Demo Code

/*//from  www. ja va 2s. com
 * Copyright 2000-2009 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import javax.swing.*;
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.util.TreeMap;

public class Main{
    public static int getClosestToLineRectangleCorner(Rectangle aRectange,
            Line2D aSegment) {
        Point northWest = new OrientedPoint(aRectange.getX(),
                aRectange.getY(), NORTH_WEST);
        Point northEast = new OrientedPoint(aRectange.getMaxX(),
                aRectange.getY(), NORTH_EAST);
        Point southEast = new OrientedPoint(aRectange.getMaxX(),
                aRectange.getMaxY(), SOUTH_EAST);
        Point southWest = new OrientedPoint(aRectange.getX(),
                aRectange.getMaxY(), SOUTH_WEST);

        TreeMap sorter = new TreeMap();

        sorter.put(getDistance(aSegment, northWest), northWest);
        sorter.put(getDistance(aSegment, southWest), southWest);
        sorter.put(getDistance(aSegment, southEast), southEast);
        sorter.put(getDistance(aSegment, northEast), northEast);

        return ((OrientedPoint) sorter.get(sorter.firstKey()))
                .getOrientation();

    }
    private static Double getDistance(Line2D aSegment, Point aPoint) {
        double lenght1 = getLineLength(aSegment.getX1(), aSegment.getY1(),
                aPoint.getX(), aPoint.getY());
        double lenght2 = getLineLength(aSegment.getX2(), aSegment.getY2(),
                aPoint.getX(), aPoint.getY());

        return new Double(lenght1 + lenght2);
    }
    public static double getLineLength(double aX1, double aY1, double aX2,
            double aY2) {
        double deltaX = aX2 - aX1;
        double deltaY = aY2 - aY1;

        return Math.sqrt(deltaX * deltaX + deltaY * deltaY);
    }
}

Related Tutorials