XTU 1237 计算几何

2024-09-09 16:18
文章标签 计算 几何 xtu 1237

本文主要是介绍XTU 1237 计算几何,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题面:

Magic Triangle

Problem Description:

Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU.

Huangriq works in a big company in Guangzhou now, all things goes well but the mosquitos are too disturbing. Mosquito net and mosquito-repellent incense are useless for this mosquito city.

And finally he decides to use magic to kill them. He make a magic regular triangle as the picture shows. While the most proper position to launch magic is not always the center of circle. In order to make everything smoothly, Huangriq needs to get the value of . And he already get two of them, can you help him to figure out the rest one?


Input

The first line contains a integer T(no more than 10000), which indicates the number of test cases. In the following T lines, each line contains two integers a and b () indicating the two angle Huangriq has already got.

Output

For each test case, output the rest angle's value with two digits after a decimal point in one line.

Sample Input

1
30 30

Sample Output

30.00


题意:

已知一等边三角形,以及角ABO,角OCB,角OAC其中两个角,求另一个未知的角。


解析:

确立一个坐标系,然后用计算几何直接算就行了。


代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <stack>
#include <vector>
#include <queue>
#include <map>
#include <climits>
#include <cassert>
#define LL long longusing namespace std;
const int inf = 0x3f3f3f3f;
const double eps = 1e-8;
const double pi = acos(-1.0);
const double ee = exp(1.0);/
struct Point
{double x, y;Point(double x = 0, double y = 0) : x(x), y(y){}
};bool cmp(Point A, Point B)
{if (A.x == B.x)return A.y < B.y;return A.x < B.x;
}typedef Point Vector;Vector operator + (Vector A, Vector B)
{return Vector(A.x + B.x, A.y + B.y);
}Vector operator - (Point A, Point B)
{return Vector(A.x - B.x, A.y - B.y);
}Vector operator * (Vector A, double p)
{return Vector(A.x * p, A.y * p);
}Vector operator / (Vector A, double p)
{return Vector(A.x / p, A.y / p);
}bool operator < (const Point& a, const Point& b)
{return a.x < b.x || (a.x == b.x && a.y < b.y);
}int dcmp(double x)
{if (fabs(x) < eps){return 0;}else{return x < 0 ? -1 : 1;}
}bool operator == (const Point& a, const Point& b)
{return dcmp(a.x - b.x) == 0 && dcmp(a.y - b.y) == 0;
}double Dot(Vector A, Vector B)
{return A.x * B.x + A.y * B.y;
}double Length(Vector A)
{return sqrt(Dot(A, A));
}double Angle(Vector A, Vector B)///jiajiao
{return acos(Dot(A, B) / Length(A) / Length(B));
}double Cross(Vector A, Vector B)
{return A.x * B.y - A.y * B.x;
}double Area2(Point A, Point B, Point C)
{return Cross(B - A, C - A);
}Vector Rotate(Vector A, double rad)
{return Vector(A.x * cos(rad) - A.y * sin(rad), A.x * sin(rad) + A.y * cos(rad));
}Vector Normal(Vector A)//µ¥Î»·¨Ïß turn left 90 degrees
{double L = Length(A);return Vector(-A.y / L, A.x / L);
}Point GetLineIntersection(Point P, Vector v, Point Q, Vector w)///jiadiao//
{Vector u = P - Q;double t = Cross(w, u) / Cross(v, w);return P + v * t;
}double DistanceToLine(Point P, Point A, Point B)
{Vector v1 = B - A;Vector v2 = P - A;return fabs(Cross(v1, v2)) / Length(v1);
}double DistanceToSegment(Point P, Point A, Point B)
{if (A == B){return Length(P - A);}Vector v1 = B - A;Vector v2 = P - A;Vector v3 = P - B;if (dcmp(Dot(v1, v2)) < 0)return Length(v2);else if (dcmp(Dot(v1, v3)) > 0)return Length(v3);elsereturn fabs(Cross(v1, v2)) / Length(v1);
}bool SegmentProperIntersection(Point a1, Point a2, Point b1, Point b2)
{double c1 = Cross(a2 - a1, b1 - a1), c2 = Cross(a2 - a1, b2 - a1);double c3 = Cross(b2 - b1, a1 - b1), c4 = Cross(b2 - b1, a2 - b1);return dcmp(c1) * dcmp(c2) < 0 && dcmp(c3) * dcmp(c4) < 0;
}bool OnSegment(Point p, Point a1, Point a2)
{return dcmp(Cross(a1 - p, a2 - p)) == 0 && dcmp(Dot(a1 - p, a2 - p)) < 0;
}double ConvexPolygonArea(Point* p, int n)
{double area = 0;for (int i = 1; i < n - 1; i++){area += Cross(p[i] - p[0], p[i + 1] - p[0]);}return area / 2.0;
}double torad(double deg)
{return deg / 180 * pi;
}int ConvexHull(Point* p, int n, Point* ch)
{sort(p, p + n, cmp);int m = 0;for (int i = 0; i < n; i++){while (m > 1 && Cross(ch[m - 1] - ch[m - 2], p[i] - ch[m - 2]) <= 0)m--;ch[m++] = p[i];}int k = m;for (int i = n - 2; i >= 0; i--){while (m > k && Cross(ch[m - 1] - ch[m - 2], p[i] - ch[m - 2]) <= 0)m--;ch[m++] = p[i];}if (n > 1)m--;return m;
}Point readPoint(double x, double y)
{
//    double x, y;
//    scanf("%lf %lf", &x, &y);return Point(x, y);
}//const int maxn = 2500 + 10;int main()
{#ifdef LOCAL// freopen("in.txt", "r", stdin);#endif // LOCALint ncase;scanf("%d", &ncase);int ca = 1;while (ncase--){Point A = readPoint(0, 0);Point B = readPoint(2, 0);Point C = readPoint(1, sqrt(3.0));double a, b;scanf("%lf%lf", &a, &b);double k = tan((60.0 - a) * pi / 180);
//        cout << k <<endl;Point D = readPoint(2, k * 2);k = tan((180.0 - b) * pi / 180);Point E = readPoint(0, -2 * k);Point J = GetLineIntersection(A, D - A, B, E - B);
//        cout << J.x << " " << J.y * 3 <<endl;double ans = Angle(J - C, B - C) * 180 / pi;printf("%.2lf\n", ans);}return 0;
}


这篇关于XTU 1237 计算几何的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1151661

相关文章

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Java计算经纬度距离的示例代码

《Java计算经纬度距离的示例代码》在Java中计算两个经纬度之间的距离,可以使用多种方法(代码示例均返回米为单位),文中整理了常用的5种方法,感兴趣的小伙伴可以了解一下... 目录1. Haversine公式(中等精度,推荐通用场景)2. 球面余弦定理(简单但精度较低)3. Vincenty公式(高精度,

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <