/* GeometryUtils.java created 2007-12-01 * */ package org.signalml.app.util; import java.awt.Point; import java.awt.geom.AffineTransform; /** GeometryUtils * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o. */ public abstract class GeometryUtils { public static void translatePointToCircleBorder(Point point, Point refPoint, int radius) { if (refPoint.x == point.x) { if (refPoint.y < point.y) { point.y -= radius; } else { point.y += radius; } } else { int dx = point.x - refPoint.x; int dy = point.y - refPoint.y; int sgnx = (dx < 0 ? -1 : (dx > 0 ? 1 : 0)); int sgny = (dy < 0 ? -1 : (dy > 0 ? 1 : 0)); float tg = ((float) dy)/dx; int mx = (int) Math.round(((float) radius) / Math.sqrt(1+tg*tg)); int my = (int) Math.round(((float) radius) / Math.sqrt(1+(1/(tg*tg)))); point.x -= mx*sgnx; point.y -= my*sgny; } } public static void rotatePoint(Point point, Point centerPoint, double angle) { AffineTransform t = AffineTransform.getRotateInstance(angle, centerPoint.x, centerPoint.y); t.transform(point, point); } }