/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package de.cismet.cismap.commons.gui.piccolo.eventlistener;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.linearref.LinearLocation;
/**
* DOCUMENT ME!
*
* @author thorsten
* @version $Revision$, $Date$
*/
public class RectangleMath {
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @param a DOCUMENT ME!
* @param b DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public static Coordinate getMidPoint(final Coordinate a, final Coordinate b) {
return new Coordinate((a.x + b.x) / 2.0, (a.y + b.y) / 2.0);
}
/**
* DOCUMENT ME!
*
* @param c DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public static Coordinate getMidPoint(final Coordinate[] c) {
return getMidPoint(c[0], c[1]);
}
/**
* DOCUMENT ME!
*
* @param line DOCUMENT ME!
* @param fraction DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public static Coordinate getPointFromStartByFraction(final Coordinate[] line,
final double fraction) {
return LinearLocation.pointAlongSegmentByFraction(line[0], line[1], fraction);
}
/**
* DOCUMENT ME!
*
* @param line DOCUMENT ME!
* @param start DOCUMENT ME!
* @param length DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public static Coordinate getPointPerpendicular(final Coordinate[] line,
final Coordinate start,
final double length) {
final double dx = line[1].x - line[0].x;
final double dy = line[1].y - line[0].y;
final double scale = length / Math.sqrt((dx * dx) + (dy * dy));
final double x = -dy * scale;
final double y = dx * scale;
return new Coordinate(start.x + x, start.y + y);
}
/**
* DOCUMENT ME!
*
* @param args DOCUMENT ME!
*/
public static void main(final String[] args) {
final Coordinate[] l = new Coordinate[2];
l[0] = new Coordinate(0, 0);
l[1] = new Coordinate(1.5, 1.5);
System.out.println(getPointPerpendicular(l, getPointFromStartByFraction(l, 0.5), 1));
}
}