ZOJ 3598 Spherical Triangle球面几何公式应用

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <stack>
#include <queue>
#include <cctype>
#include <cstdio>
#include <string>
#include <vector>
#include <climits>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define PI 3.1415926535897932626
using namespace std;
int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);}
const double eps = 1e-8;
//有这么个公式cosa=cosb*cosc+sinb*sinc*cosA
//其中小写a,b,c表示球面三角形边长所对应的圆心角 大写A表示三角形内角
struct node
{
    double x,y;
};
//计算圆心角lat表示纬度,lng表示经度,-90 <= w <= 90;
//计算两点所在大圆劣弧对应圆心角,0 <= angle <= pi;
double angle(double lng1,double lat1,double lng2,double lat2)
{
    double dlng = fabs(lng1 - lng2) * PI / 180;
    while(dlng + eps > PI + PI)
        dlng -= PI + PI;
    if (dlng > PI) dlng = 2 * PI - dlng;
    lat1 *= PI / 180; lat2 *= PI / 180;
    return acos(cos(lat1) * cos(lat2) * cos(dlng) + sin(lat1) * sin(lat2));
}
double get_A(double a,double b,double c)
{
    return acos((cos(a) - cos(b) * cos(c)) / (sin(b) * sin(c)));
}
int main()
{
    int T;
    scanf("%d",&T);
    while (T--)
    {
        node a,b,c;
        scanf("%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y);
        double ta = angle(a.x,a.y,b.x,b.y);
        double tb = angle(b.x,b.y,c.x,c.y);
        double tc = angle(a.x,a.y,c.x,c.y);
        double ans = 0;
        ans += get_A(ta,tb,tc);
        ans += get_A(tb,tc,ta);
        ans += get_A(tc,ta,tb);
        printf("%.2lf\n",ans * 180.0 / PI);
    }
    return 0;
}
时间: 2024-10-13 07:29:09

ZOJ 3598 Spherical Triangle球面几何公式应用的相关文章

ZOJ 3598 Spherical Triangle (三角关系)

ZOJ Problem Set - 3598 Spherical Triangle Time Limit: 2 Seconds      Memory Limit: 65536 KB As everybody knows, the sum of the interior angles of a triangle on a plane is always 180 degree. But this is not true when the triangle is on spherical surfa

ZOJ 3598 Spherical Triangle(计算几何 球面三角形内角和)

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4682 As everybody knows, the sum of the interior angles of a triangle on a plane is always 180 degree. But this is not true when the triangle is on spherical surface. Given a triangle on

Zoj 3598 Spherical Triangle 【计算几何】【曲面三角形】

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3598 题目大意:给出一个球体上的三点,三点的坐标以经纬度的形式给出,求曲面三角形的内角和. 即:给出ABC三个点的经纬度,求出 角A+ 角B+角C的值. 利用公式即可求得 cosa=cosb*cosc+sinb*sinc*cosA 其中小写a,b,c表示球面三角形边长所对应的圆心角 大写A表示三角形内角. 下面的难度就是求出abc角的大小即可. 网上看了一个写法

根据两个点的经纬度算两点间的距离——球面半正矢公式

球面半正矢公式 来源:维基百科 http://en.wikipedia.org/wiki/Haversine_formula

uva 194 - Triangle(几何)

题目链接:uva 194 - Triangle 注意两边一角,并接角的对边确定时(即用正弦定理求解时,可能会有多解的情况) #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; const double pi = 4 * atan(1); const double eps = 1e-4; double A[6]; void

uva 11186 - Circum Triangle(几何)

题目链接:uva 11186 - Circum Triangle 枚举两点,计算该两点与圆心构成的三角形对ans的贡献值. #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; const int maxn = 505; const double pi = 4 * atan(1); double A[maxn]; doub

几何公式

两条直线是否相交 1 //叉积 2 double mult(Point a, Point b, Point c) 3 { 4 return (a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y); 5 } 6 7 //aa, bb为一条线段两端点 cc, dd为另一条线段的两端点 相交返回true, 不相交返回false 8 bool intersect(Point aa, Point bb, Point cc, Point dd) 9 { 10 if ( max(aa.

TZOJ--3939: FIFA World Cup 2006(几何公式)

3939: FIFA World Cup 2006 时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte 描述 Football is one of the most popular words in 2006. Bob cannot go to Germany for the FIFA world cup 2006 and can only watch the TV instead. As the following figure, height of

球面几何 和 张量 在 物理学 中 毫无意义

随便一说   . 相对论 明明 是 错 的,  小和尚 还 认真深入 的 学习 四维力,   中规中矩 的 计算出 水星进动 的 43 角秒,    哈哈哈   . 原文地址:https://www.cnblogs.com/KSongKing/p/12209008.html