Java examples for java.lang:Math Geometry Line
get Closest To Line Rectangle Corner
/*//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); } }