UVA11178 Morley'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>
 6 using namespace std;
 7 struct Point
 8 {
 9     double x, y;
10 };
11 typedef Point Vector;
12 Vector operator + (Vector A, Vector B)
13 {
14     Vector C;
15     C.x = A.x + B.x;
16     C.y = A.y + B.y;
17     return C;
18 }
19 Vector operator - (Vector A, Vector B)
20 {
21     Vector C;
22     C.x = A.x - B.x;
23     C.y = A.y - B.y;
24     return C;
25 }
26 Vector operator *(Vector A, double b)
27 {
28     Vector C;
29     C.x = A.x * b;
30     C.y = A.y * b;
31     return C;
32 }
33 Point read_point()
34 {
35     Point temp;
36     scanf("%lf%lf", &temp.x, &temp.y);
37     return temp;
38 }
39 double Dot(Vector A, Vector B)
40 {
41     return A.x * B.x + A.y * B.y;
42 }
43 double Length(Vector A)
44 {
45     return sqrt(Dot(A, A));
46 }
47 double Angle(Vector A, Vector B)
48 {
49     return acos(Dot(A, B) / Length(A) / Length(B));
50 }
51 Vector Rotate(Vector A, double rad)
52 {
53     Vector C;
54     C.x = A.x * cos(rad) - A.y * sin(rad);
55     C.y = A.x * sin(rad) + A.y * cos(rad);
56     return C;
57 }
58 double Cross(Vector A, Vector B)
59 {
60     return A.x * B.y - A.y * B.x;
61 }
62 Point GetLineIntersection(Point P, Vector v, Point Q, Vector w)
63 {
64     Vector u = P - Q;
65     double t = Cross(w, u) / Cross(v, w);
66     return P + v * t;
67 }
68 Point getD(Point A, Point B, Point C)
69 {
70     Vector v1 = C - B;
71     double a1 = Angle(A - B, v1);
72     v1 = Rotate(v1, a1 / 3);
73
74     Vector v2 = B - C;
75     double a2 = Angle(A - C, v2);
76     v2 = Rotate(v2, -a2 / 3);
77
78     return GetLineIntersection(B, v1, C, v2);
79
80 }
81 int main()
82 {
83     int T;
84     Point A, B, C, D, E, F;
85     scanf("%d", &T);
86     while (T--)
87     {
88         A = read_point();
89         B = read_point();
90         C = read_point();
91         D = getD(A, B, C);
92         E = getD(B, C, A);
93         F = getD(C, A, B);
94
95         printf("%.6lf %.6lf %.6lf %.6lf %.6lf %.6lf\n", D.x, D.y, E.x, E.y, F.x, F.y);
96
97     }
98     return 0;
99 }

UVA11178 Morley's Theorem(基础模板)

时间: 2024-10-11 00:14:52

UVA11178 Morley's Theorem(基础模板)的相关文章

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&

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

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

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(旋转+直线交点)

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18543 [思路] 旋转+直线交点 第一个计算几何题,照着书上代码打的. [代码] 1 #include<cstdio> 2 #include<cmath> 3 #include<cstring> 4 using namespace std; 5 6 7 struct Pt { 8 double x,y; 9 Pt(double x=0,d

【转】手摸手,带你用vue撸后台 系列四(vueAdmin 一个极简的后台基础模板)

前言 做这个 vueAdmin-template 的主要原因是: vue-element-admin 这个项目的初衷是一个vue的管理后台集成方案,把平时用到的一些组件或者经验分享给大家,同时它也在不断的维护和拓展中,比如最近重构了dashboard,加入了全屏功能,新增了tabs-view等等.所以项目会越来越复杂,不太适合很多初用vue的同学来构建后台.所以就写了这个基础模板,它没有复杂的功能,只包含了一个后台需要最基础的东西.vueAdmin-template 主要是基于vue-cli w

UVA - 11178 - Morley&#39;s Theorem (计算几何~~)

UVA - 11178 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 lines trisecti

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

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

UVa 11178 (简单练习) Morley&#39;s Theorem

题意: Morley定理:任意三角形中,每个角的三等分线,相交出来的三个点构成一个正三角形. 不过这和题目关系不大,题目所求是正三角形的三个点的坐标,保留6位小数. 分析: 由于对称性,求出D点,EF也是同样的. 用点和向量的形式表示一条直线,向量BA.BC的夹角为a1,则将BC逆时针旋转a1/3可求得 直线BD,同理也可求得直线CD,最后再求交点即可. 1 //#define LOCAL 2 #include <cstdio> 3 #include <cstring> 4 #in