java 计算三个点的夹角

十多年前写过c#版本,可能写的不清楚 https://blog.csdn.net/wangyue4/article/details/5611309

/**
 * 根据余弦定理计算线段1到线段2的夹角,线段1:起始点到原点,线段2:原点到结束点)
 * @param o 原点
 * @param s 起始点
 * @param e 结束点
 * @return
 */
public double calAngle(BlockPoint o, BlockPoint s, BlockPoint e) {
    double cosfi = 0;
    double fi = 0;
    double norm = 0;
    double dsx = s.getPosX() - o.getPosX();
    double dsy = s.getPosY() - o.getPosY();
    double dex = e.getPosX() - o.getPosX();
    double dey = e.getPosY() - o.getPosY();
    cosfi = dsx * dex + dsy * dey;
    norm = (dsx * dsx + dsy * dsy) * (dex * dex + dey * dey);
    cosfi /= Math.sqrt(norm);
    if (cosfi >= 1.0) return 0;
    if (cosfi <= -1.0) return Math.PI;
    fi = Math.acos(cosfi);
    if (180 * fi / Math.PI < 180) {
        return 180 * fi / Math.PI;
    } else {
        return 360 - 180 * fi / Math.PI;
    }
}

おすすめ

転載: blog.csdn.net/wangyue4/article/details/112779773