UVA 11178 Morley's Theorem
来源:互联网 发布:solus linux安装 编辑:程序博客网 时间:2024/05/21 21:45
大意:做三角形ABC每个内角额三等分线,相交成三角形DEF,则三角形DEF是等边三角形。你的任务是根据A、B、C三个点的位置确定D、E、F的位置。
思路:求出<ABC的大小a1,然后将向量BC旋转a1/3,求出<ACB的大小a1,然后将向量CB旋转a2/3,然后求两线段的交点D即可,E、F同理。
#include <iostream>#include <cstdlib>#include <cstdio>#include <string>#include <cstring>#include <cmath>#include <vector>#include <queue>#include <stack>using namespace std;struct Point{double x, y;Point(double x = 0, double y = 0) : x(x), y(y) { }};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){if(a.x != b.x) return a.x < b.x;return a.y < b.y;}const double eps = 1e-10;int dcmp(double x){if(fabs(x) < eps) return 0; 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) { 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));}Point GetIntersection(Point P, Vector v, Point Q, Vector w){Vector u = P-Q;double t = Cross(w, u) / Cross(v, w);return P+v*t;}Point A, B, C, D, E, F;Point read_point(){Point A;scanf("%lf%lf", &A.x, &A.y);return A;}Point getD(Point A, Point B, Point C){Vector v1 = C-B, v2 = A-B;double a1 = Angle(v1, v2);v1 = Rotate(v1, a1/3);Vector v3 = B-C, v4 = A-C;double a2 = Angle(v3, v4);v3 = Rotate(v3, -a2/3);return GetIntersection(B, v1, C, v3);}void solve(){A = read_point();B = read_point();C = read_point();D = getD(A, B, C);E = getD(B, C, A);F = getD(C, A, B);printf("%.6lf %.6lf %.6lf %.6lf %.6lf %.6lf\n", D.x, D.y, E.x, E.y, F.x, F.y);}int main(){int T;scanf("%d", &T);while(T--){solve();}return 0;}
- UVA 11178 Morley's Theorem
- UVa 11178 - Morley's Theorem
- UVA 11178 Morley's Theorem
- Uva - 11178 - Morley's Theorem
- 【UVA 11178】 Morley's Theorem
- Uva 11178 Morley's Theorem
- UVA 11178 Morley's Theorem
- UVA 11178 Morley's Theorem
- uva-11178Morley's Theorem
- UVA - 11178-Morley’s Theorem
- uva 11178 Morley's Theorem
- UVA 11178 Morley's Theorem
- UVa 11178 Morley's Theorem
- UVa 11178 Morley's Theorem
- uva 11178 Morley's Theorem
- UVA 11178 Morley's Theorem .
- UVA 11178 Morley's Theorem
- Morley's Theorem UVA
- 从Windows消息的角度看窗口应用程序运行过程
- Android 开发者(Android Developer)
- JAVA垃圾回收 之 引用计数 之 循环引用
- Gemini源码分析
- 两个ListBox中的项互相移动及上下移动
- UVA 11178 Morley's Theorem
- android apk安装原理分析
- 利用SecureCRT在linux与Windows之间互传文件
- shell中case
- 基于Trie树实现拼音搜索自动补全
- PL/SQL DEVELOPER 使用小技巧
- 《Emacs 编辑环境》学习笔记
- STK:使用Comm模块对转发器建模
- 应用程序每次只能运行一个实例(C#)