package utilities; import device.Device; public class Geometry { /** * @param d1 * @param d2 * @param d3 * @return angle between (d2,d1) and (d2,d3) */ public static double angle(Device d1, Device d2, Device d3) { double x1 = d1.getLatitude() - d2.getLatitude() ; double y1 = d1.getLongitude() - d2.getLongitude() ; double x2 = d3.getLatitude() - d2.getLatitude() ; double y2 = d3.getLongitude() - d2.getLongitude() ; double a = Math.atan2(x1, y1); if (a < 0) a = (2 * Math.PI) + a; double b = Math.atan2(x2, y2); if (b < 0) b = (2 * Math.PI) + b; b = b - a; if (b < 0) b = (2 * Math.PI) + b; return b; } public static boolean intersect(Device d0, Device d1, Device d2, Device d3) { double x0 = d0.getLatitude(); double y0 = d0.getLongitude(); double x1 = d1.getLatitude(); double y1 = d1.getLongitude(); double x2 = d2.getLatitude(); double y2 = d2.getLongitude(); double x3 = d3.getLatitude(); double y3 = d3.getLongitude(); if(x0==x2 && y0==y2) return false; if(x0==x3 && y0==y3) return false; if(x1==x2 && y1==y2) return false; if(x1==x3 && y1==y3) return false; double dx1, dy1, dx2, dy2; dx1 = x1 - x0; dy1 = y1 - y0; dx2 = x3 - x2; dy2 = y3 - y2; double s, t; s = (-dy1 * (x0 - x2) + dx1 * (y0 - y2)) / (-dx2 * dy1 + dx1 * dy2); t = (dx2 * (y0 - y2) - dy2 * (x0 - x2)) / (-dx2 * dy1 + dx1 * dy2); if (s >= 0 && s <= 1 && t >= 0 && t <= 1) { return true; } return false; } public static int [] getCentre(int x1, int y1, int z1, int x2, int y2, int z2) { int x = (int) (x2+((x1-x2)/2.0)); int y = (int) (y2+((y1-y2)/2.0)); int z = (int) (z1+((z2-z1)/2.0)); int [] r = {x, y, z}; return r; } }