绘图常用的算法

通过两点,中心位置计算出角度

/**
 * 给出三个点计算出角度来
 * 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);
}

发表回复

CAPTCHAis initialing...