• ACM计算几何模板——圆和球


    #include <iostream>
    #include <cmath>
    using namespace std;
    #define eps 1e-10
    /********** 定义点 **********/
    struct Point{
        double x,y;
        Point(double x=0,double y=0):x(x),y(y) {}
    };
    /********** 定义三维点 ***********/
    struct Point3{
        double x,y,z;
        Point3(double x=0,double y=0,double z=0):x(x),y(y),z(z) {}
    };
    /********** 定义圆 **********/
    struct Circle{
        Point c;
        double r;
        Circle(Point c,double r):c(c),r(r){}
        Point point(double a){
            return Point(c.x + cos(a)*r,c.y + sin(a)*r);
        }
    };
    /*********** 三维点距离 **********/
    double dis3(Point3 A,Point3 B)
    {
        return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y)+(A.z-B.z)*(A.z-B.z));
    }
    /*********** 球面 ***********/
    /*********** 角度转换成弧度 ***********/
    double torad(double deg)
    {
        return deg/180 * acos(-1);    //acos(-1)就是PI
    }
    /*********** 经纬度(角度)转化为空间坐标 **********/
    void get_coord(double R,double lat,double lng,double &x ,double &y,double &z)
    {
        lat = torad(lat);    //纬度
        lng = torad(lng);    //经度
        x = R*cos(lat)*cos(lng);
        y = R*cos(lat)*sin(lng);
        z = R*sin(lat);
    }
    /*********** 两点的球面距离 ***********/
    double disA2B(double R,Point3 A,Point3 B)
    {
        //将球面距离看成求点A,B和半径R构成的扇形的弧长
        double d = dis3(A,B);    //弦长
        double a = 2*asin(d/2/r);    //圆心角
        double l = a*r;        //弧长
        return l;
    }

    Freecode : www.cnblogs.com/yym2013

  • 相关阅读:
    mysql常用语句集锦
    PHP 面向对象
    PHP 数组
    PHP 语句 函数 字符串处理
    PHP 随笔
    mysql常用函数
    数据库 创建 查询 练习
    HTML JavaScript语法练习
    HTML JavaScript练习
    随机数生成的简单原理
  • 原文地址:https://www.cnblogs.com/yym2013/p/3662819.html
Copyright © 2020-2023  润新知