http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2119

11178 - Morley's Theorem

Time limit: 3.000 seconds

Problem D
Morley’s Theorem
Input: Standard Input

Output: Standard Output

Morley’s theorem states that that the lines trisecting the angles of an arbitrary plane triangle meet at the vertices of an equilateral triangle. For example in the figure below the tri-sectors of angles A, B and C has intersected and created an equilateral triangle DEF.

Of course the theorem has various generalizations, in particular if all of the tri-sectors are intersected one obtains four other equilateral triangles. But in the original theorem only tri-sectors nearest to BC are allowed to intersect to get point D, tri-sectors nearest to CA are allowed to intersect point E and tri-sectors nearest to AB are intersected to get point F. Trisector like BD and CE are not allowed to intersect. So ultimately we get only one equilateral triangle DEF. Now your task is to find the Cartesian coordinates of D, E and F given the coordinates of A, B, and C.

Input

First line of the input file contains an integer N (0<N<5001) which denotes the number of test cases to follow. Each of the next lines contain six integers xa , ya,xb , yb,xc , yc. This six integers actually indicates that the Cartesian coordinates of point A, B and C are  (xa , ya) , (xb , yb)and (xc , yc)respectively. You can assume that the area of triangle ABC is not equal to zero,  0 <= xa, ya , xb , xc , yb , yc <= 1000 and the points A, B and C are in counter clockwise order.

Output

For each line of input you should produce one line of output. This line contains six floating point numbers  xd , yd , xe , ye , xf , yf separated by a single space. These six floating-point actually means that the Cartesian coordinates of D, E and F are  (xd , yd) , (xe , ye) , (xf , yf)respectively. Errors less than   10 ^ -5will be accepted.

Sample Input   Output for Sample Input

2

1 1 2 2 1 2

0 0 100 0 50 50

1.316987 1.816987 1.183013 1.683013 1.366025 1.633975

56.698730 25.000000 43.301270 25.000000 50.000000 13.397460

Problemsetters: Shahriar Manzoor

Special Thanks: Joachim Wulff

分析:

STL

AC代码:

 // UVa11178 Morley's Theorem

 #include<cstdio>

 #include<cmath>

 struct Point {

   double x, y;

   Point(double x=, double y=):x(x),y(y) { }

 };

 typedef Point Vector;

 Vector operator + (const Vector& A, const Vector& B) { return Vector(A.x+B.x, A.y+B.y); }

 Vector operator - (const Point& A, const Point& B) { return Vector(A.x-B.x, A.y-B.y); }

 Vector operator * (const Vector& A, double p) { return Vector(A.x*p, A.y*p); }

 double Dot(const Vector& A, const Vector& B) { return A.x*B.x + A.y*B.y; }

 double Length(const Vector& A) { return sqrt(Dot(A, A)); }

 double Angle(const Vector& A, const Vector& B) { return acos(Dot(A, B) / Length(A) / Length(B)); }

 double Cross(const Vector& A, const Vector& B) { return A.x*B.y - A.y*B.x; }

 Point GetLineIntersection(const Point& P, const Point& v, const Point& Q, const Point& w) {

   Vector u = P-Q;

   double t = Cross(w, u) / Cross(v, w);

   return P+v*t;

 }

 Vector Rotate(const Vector& A, double rad) {

   return Vector(A.x*cos(rad)-A.y*sin(rad), A.x*sin(rad)+A.y*cos(rad));

 }

 Point read_point() {

   double x, y;

   scanf("%lf%lf", &x, &y);

   return Point(x,y);

 }

 Point getD(Point A, Point B, Point C) {

   Vector v1 = C-B;

   double a1 = Angle(A-B, v1);

   v1 = Rotate(v1, a1/);

   Vector v2 = B-C;

   double a2 = Angle(A-C, v2);

   v2 = Rotate(v2, -a2/);

   return GetLineIntersection(B, v1, C, v2);

 }

 int main() {

   int T;

   Point A, B, C, D, E, F;

   scanf("%d", &T);

   while(T--) {

     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);

   }

   return ;

 }

uva 11178 - Morley's Theorem的更多相关文章

  1. UVA 11178 Morley's Theorem (坐标旋转)

    题目链接:UVA 11178 Description Input Output Sample Input Sample Output Solution 题意 \(Morley's\ theorem\) ...

  2. UVA 11178 Morley's Theorem(几何)

    Morley's Theorem [题目链接]Morley's Theorem [题目类型]几何 &题解: 蓝书P259 简单的几何模拟,但要熟练的应用模板,还有注意模板的适用范围和传参不要传 ...

  3. UVa 11178:Morley’s Theorem(两射线交点)

    Problem DMorley’s TheoremInput: Standard Input Output: Standard Output Morley’s theorem states that ...

  4. UVA 11178 - Morley's Theorem 向量

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  5. Uva 11178 Morley's Theorem 向量旋转+求直线交点

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=9 题意: Morlery定理是这样的:作三角形ABC每个 ...

  6. UVA 11178 Morley's Theorem(旋转+直线交点)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18543 [思路] 旋转+直线交点 第一个计算几何题,照着书上代码打 ...

  7. UVa 11178 Morley's Theorem (几何问题)

    题意:给定三角形的三个点,让你求它每个角的三等分线所交的顶点. 析:根据自己的以前的数学知识,应该很容易想到思想,比如D点,就是应该求直线BD和CD的交点, 以前还得自己算,现在计算机帮你算,更方便, ...

  8. 简单几何(求交点) UVA 11178 Morley's Theorem

    题目传送门 题意:莫雷定理,求三个点的坐标 分析:训练指南P259,用到了求角度,向量旋转,求射线交点 /*********************************************** ...

  9. UVA 11178 Morley's Theorem 计算几何模板

    题意:训练指南259页 #include <iostream> #include <cstdio> #include <cstring> #include < ...

随机推荐

  1. php 通过exec 创建git分支失败

    今天给我们自己的发布系统增加一个新建分支的功能,操作比较简单,但是使用php执行shell命令的时候总是无法push分支到远程,但是登陆服务器执行却是可以的 新建分支命令如下 git fetch -- ...

  2. terminal(终端),shell,tty,console(控制台)区别

    原文地址  stackexchange:What is the exact difference between a 'terminal', a 'shell', a 'tty' and a 'con ...

  3. UBUNTU 14.04 安装 OPENCV 2.4.9

    1.  从OpenCV.org 下载源代码 opencv-2.4.9.zip 2. 解压到准备好的目录 unzip opencv-2.4.9.zip 3. 进入源码目录,创建release目录 cd ...

  4. 【Android开发学习笔记】【第三课】Activity和Intent

    首先来看一个Activity当中启动另一个Activity,直接上代码说吧: (1)首先要多个Activity,那么首先在res-layout下新建一个 Other.xml,用来充当第二个Activi ...

  5. PHP--yii中findOne转换成数组

    $res = News::findOne($new_id)->toArray(); yii框架的多表联查:controller层: //news 与 news_theme 是多对一的关系$inf ...

  6. IIS Express启动命令

    http://www.iis.net/learn/extensions/using-iis-express/running-iis-express-from-the-command-line C:\P ...

  7. 几个简单的html+css+js题目

    1.页面中有一图片,请在下划线处添加代码能够实现隐藏该图片的功能 <img id="pic" src="door.jpg" width="200 ...

  8. [LeetCode]题解(python):040-Combination Sum II

    题目来源 https://leetcode.com/problems/combination-sum-ii/ Given a collection of candidate numbers (C) a ...

  9. A Guide to Creating a Quality Project Schedule

    Successful projects start with a good quality project schedule. Creating a schedule is one of the fi ...

  10. django 部署到 apache

    安装完django之后,每次都需要通过命令来启动启动开发服务器.虽然调试和测试方便,但只能在本地运行,并且不能承受许多用户同时使用的负载.所以需要将Django部署到生产级的服务器,这里选择apach ...