Morley's Therorem(UVA11178+几何)

题意:Morley定理,求D、E、F的坐标

思路:没什么算法,就是几何的应用。注意旋转角就好了。

转载请注明出处:寻找&星空の孩子

题目链接:UVA11178

 1 #include<cstdio>
 2 #include<cmath>
 3 #define PI acos(-1.0)
 4 using namespace std;
 5
 6 struct Point
 7 {
 8     double x,y;
 9     Point(double x=0,double y=0):x(x),y(y){ }
10  //   Point read_point() {scanf("%lf%lf",&this.x,&this.y);}
11 };
12 typedef Point Vector;
13 Vector operator + (Vector A,Vector B){return Vector(A.x+B.x,A.y+B.y);}
14 Vector operator - (Point A,Point B)  {return Vector(A.x-B.x,A.y-B.y);}
15 Vector operator * (Vector A,double p){return Vector(A.x*p,A.y*p);}
16 Vector operator / (Vector A,double p){return Vector(A.x/p,A.y/p);}
17
18 double Dot(Vector A,Vector B){return A.x*B.x+A.y*B.y;}
19 double length(Vector A){return sqrt(Dot(A,A));}
20 double Angle(Vector A,Vector B){return acos(Dot(A,B)/length(A)/length(B));}
21
22 double Cross(Vector A,Vector B){return A.x*B.y-B.x*A.y;}
23
24 Vector Rotate (Vector A,double rad)
25 {
26     //其中rad为逆时针旋转角
27     return Vector(A.x*cos(rad)-A.y*sin(rad),A.x*sin(rad)+A.y*cos(rad));
28 }
29
30 Point GetLineIntersection(Point P,Vector v,Point Q,Vector w)
31 {
32     Vector u=P-Q;
33     if(Cross(v,w))
34     {
35         double t=Cross(w,u)/Cross(v,w);//精度高的时候,考虑自定义分数类
36         return P+v*t;
37     }
38 //    else
39  //       return ;
40 }
41
42 Point getD(Point A,Point B,Point C)
43 {
44     Vector v1=C-B;
45     double a1=Angle(A-B,v1);
46     v1=Rotate(v1,a1/3);
47
48     Vector v2=B-C;
49     double a2=Angle(A-C,v2);
50     v2=Rotate(v2,-a2/3);//-表示顺时针旋转;
51
52     return GetLineIntersection(B,v1,C,v2);
53
54 }
55
56 Point read_point(Point &P)
57 {
58     scanf("%lf%lf",&P.x,&P.y);
59     return P;
60 }
61 int main()
62 {
63     int T;
64     Point A,B,C,D,E,F;
65     scanf("%d",&T);
66     while(T--)
67     {
68         A=read_point(A);
69         B=read_point(B);
70         C=read_point(C);
71
72 //        scanf("%lf%lf%lf%lf%lf%lf",&A.x,&A.y,&B.x,&B.y,&C.x,&C.y);
73 //        printf("%.6lf %.6lf %.6lf %.6lf %.6lf %.6lf\n",A.x,A.y,B.x,B.y,C.x,C.y);
74         D=getD(A,B,C);
75         E=getD(B,C,A);
76         F=getD(C,A,B);
77         printf("%.6lf %.6lf %.6lf %.6lf %.6lf %.6lf\n",D.x,D.y,E.x,E.y,F.x,F.y);
78     }
79     return 0;
80 }

Morley's Therorem(UVA11178+几何)

时间: 2024-12-28 16:56:04

Morley's Therorem(UVA11178+几何)的相关文章

11178 - Morley&#39;s Theorem【几何】

不涉及什么算法,只是简单的套用模板进行计算. 如果一个向量进行逆时针旋转,那么可以使用定义的函数 Rotate(v,rad)进行计算. 但是如果进行顺时针旋转,那么需要将rad改为-rad,也就是Rotate(v,-rad)进行计算. 精度的控制为 1e-10; 14112243 11178 Morley's Theorem Accepted C++ 0.055 2014-08-29 11:09:31 #include<cstdio> #include<cstring> #incl

Morley’s Theorem(几何+UVA11178)

题意:Morley定理,求D.E.F的坐标 思路:没什么算法,就是几何的应用.注意旋转角就好了. 转载请注明出处:寻找&星空の孩子 题目链接:UVA11178 #include<cstdio> #include<cmath> #define PI acos(-1.0) using namespace std; struct Point { double x,y; Point(double x=0,double y=0):x(x),y(y){ } // Point read_

UVa 11178 Morley&#39;s Theorem (几何问题)

题意:给定三角形的三个点,让你求它每个角的三等分线所交的顶点. 析:根据自己的以前的数学知识,应该很容易想到思想,比如D点,就是应该求直线BD和CD的交点, 以前还得自己算,现在计算机帮你算,更方便,主要注意的是旋转是顺时针还是逆时针,不要搞错了. 要求BD和CD就得先求那个夹角ABC和ACD,然后三等分. 代码如下: #include <iostream> #include <cstdio> #include <cstring> #include <cmath&

简单几何 UVA 11178 Morley&#39;s Theorem

题目传送门 题意:莫雷定理,求三个点的坐标 分析:训练指南P259,用到了求角度,向量旋转,求射线交点 /************************************************ * Author :Running_Time * Created Time :2015/10/21 星期三 15:56:27 * File Name :UVA_11178.cpp ************************************************/ #include

UVA11178 Morley&#39;s Theorem(基础模板)

题目链接 题意:给出A,B, C点坐标求D,E,F坐标,其中每个角都被均等分成三份   求出 ABC的角a, 由 BC 逆时针旋转 a/3 得到BD,然后 求出 ACB 的角a2, 然后 由 BC顺时针 旋转 a2 / 3得到 DC,然后就交点 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 #include <cmath&g

UVA11178 Morley&#39;s Theorem

题意 PDF 分析 就按题意模拟即可,注意到对称性,只需要知道如何求其中一个. 注意A.B.C按逆时针排列,利用这个性质可以避免旋转时分类讨论. 时间复杂度\(O(T)\) 代码 #include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<set> #include<map> #include<queue> #include&

例题4.1 Morley定理 UVa11178

1.题目描述:点击打开链接 2.解题思路:本题直接模拟即可.只要知道如何计算D点的坐标,就能算出其他两个点.根据题意,我们需要先计算∠ABC的值a,然后把射线BC逆时针旋转a/3,得到直线BD,同理可以得到直线CD,求交点即可. 3.代码: //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream> #include<algorithm> #include<cas

URAL - 1963(几何)

不知道是不是几何题,反正就是找对称,值得注意的是,对称轴不一定过点,还可能在边上 #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <cmath> using namespace std; const double mm=1e-7; double x[10],y[10]; bool deng(double a,double

UVA 11178 Morley&#39;s Theorem 计算几何

计算几何: 最基本的计算几何,差积  旋转 Morley's Theorem Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Submit Status Description Problem D Morley's Theorem Input: Standard Input Output: Standard Output Morley's theorem states that that the line