
通过两点,中心位置计算出角度
/**
* 给出三个点计算出角度来
* 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);
}