通过两点,中心位置计算出角度
/** * 给出三个点计算出角度来 * px,py中心位置 * x1,y1起始点位置 * x2,y2终点位置 * * @param px * @param py * @param x1 * @param y1 * @param x2 * @param y2 * @return */ public static double computeDegress(double px, double py, double x1, double y1, double x2, double y2) { double vector = (x1 - px) * (x2 - px) + (y1 - py) * (y2 - py); double sqrt = Math.sqrt( (Math.abs((x1 - px) * (x1 - px)) + Math.abs((y1 - py) * (y1 - py))) * (Math.abs((x2 - px) * (x2 - px)) + Math.abs((y2 - py) * (y2 - py))) ); double degress = Math.acos(vector / sqrt) / Math.PI * 180; if ((px - x1) * (y2 - py) - (py - y1) * (x2 - px) > 0) return -degress; return degress; } 通过角度,初始点,中心点计算出下一点的x位置
/** * 通过角度跟起始点计算出终点的x位置 * * @param degress * @param px * @param py * @param x1 * @param y1 * @return */ public static double computePointX(double degress, double px, double py, double x1, double y1) { double theta = degress / 180 * Math.PI; return px+(y1 - py) * Math.sin(theta) + (x1 - px) * Math.cos(theta); } 通过角度,初始点,中心点计算出下一点的y位置
/** * 通过角度跟起始点计算出终点的y位置 * * @param degress * @param px * @param py * @param x1 * @param y1 * @return */ public static double computePointY(double degress, double px, double py, double x1, double y1) { double theta = degress / 180 * Math.PI; return py+(y1 - py) * Math.cos(theta) - (x1 - py) * Math.sin(theta); }