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. MyEclipse安装插件的几种方式(适用于Eclipse或MyEclipse其他版本)

    MyEclipse2014安装插件的几种方式(适用于Eclipse或MyEclipse其他版本)  2014-04-28 21:09  MyEclipse  阿超  19171 views 众所周知M ...

  2. js制作带有遮罩弹出层实现登录小窗口

    要实现的效果如下 点击“登录”按钮后,弹出登录小窗口,并且有遮罩层(这个名词还是百度知道的,以前只知道效果,却不知道名字) 在没有点击“登录”按钮之前登录小窗口不显示,点击“登录”按钮后小窗口显示,并 ...

  3. StringUtil

    package per.son.utils; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.js ...

  4. 如何离线安装chrome插件【转】

    http://blog.csdn.net/shuideyidi/article/details/45674601 原文链接 前言------可以不看: 实习做web,要弄单点登录SSO和验证Contr ...

  5. Ubuntu 14.04 LTS 64bit 编译SDL的问题

    http://blog.csdn.net/jhting/article/details/38523945 Ubuntu 14.04 LTS 64bit 编译SDL的问题 分类: C/C++2014-0 ...

  6. jira attachement directorey,workflow---extention.

    workflow---extention. https://confluence.atlassian.com/jirakb/jira-miscellaneous-workflow-extensions ...

  7. php--城市分类

    效果图:

  8. Delphi Memory-Mapped File简单示例

    { Copyright ?1999 by Delphi 5 Developer's Guide - Xavier Pacheco and Steve Teixeira } unit MainFrm; ...

  9. OO之美4(好代码与坏代码)

    前言:写代码不仅仅要做到能与机器交流,更要做到能和人交流 编码规范:编码规范就是最佳实践,是前辈在编码这件事上的积累和总结,是智慧的延续和工业的实践,如下: ⑴命名规范 ⑵避免行数过多的方法 ⑶代码缩 ...

  10. 深度学习笔记(三 )Constitutional Neural Networks

    一. 预备知识 包括 Linear Regression, Logistic Regression和 Multi-Layer Neural Network.参考 http://ufldl.stanfo ...