莫利定理(Morley's theorem),也称为莫雷角三分线定理。将三角形的三个内角三等分,靠近某边的两条三分角线相交得到一个交点,则这样的三个交点可以构成一个正三角形。这个三角形常被称作莫利正三角形。

11178 - Morley's Theorem

Time limit: 3.000 seconds

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 . This six integers actually indicates that the Cartesian coordinates of point A, B and C are  respectively. You can assume that the area of triangle ABC is not equal to zero,  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  separated by a single space. These six floating-point actually means that the Cartesian coordinates of D, E and F are  respectively. Errors less than   will 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

 

参考《算法竞赛入门经典——训练指南》第四章 计算几何

参考代码+部分注释

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>
#include <vector>
#include <queue>
#include <cstring>
#include <cmath>
#include <climits>
#define eps 1e-10
using namespace std;
typedef long long ll;
const int INF=INT_MAX;
const int maxn = 110;
int dcmp(double x){//三态函数,克服浮点数精度陷阱,判断x==0?x<0?x>0?if(fabs(x)<eps) return 0;else return x<0?-1:1;
}
struct Point{double x,y;Point(double x=0,double y=0):x(x),y(y){}//构造函数,方便代码编写
};
typedef Point Vector;//Vector是 Point的别名Vector operator + (Vector A,Vector B){return Vector(A.x+B.x,A.y+B.y);}
Vector operator - (Vector A,Vector 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){return a.x<b.x||(a.x==b.x&&a.y<b.y);}
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;}
//rad是弧度不是角度
Vector Rotate(Vector A,double rad){return Vector(A.x*cos(rad)-A.y*sin(rad),A.x*sin(rad)+A.y*cos(rad));}
//调用前请确保两条直线P+tv,Q+tw有唯一交点。当且仅当Cross(v,w)非0
Point GetLineIntersection(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 getD(Point A,Point B,Point C){Vector v1=C-B;double a1=Angle(A-B,v1);v1=Rotate(v1,a1/3);//正数表示逆时针旋转Vector v2=B-C;double a2=Angle(A-C,v2);v2=Rotate(v2,-a2/3);//负数表示顺时针旋转return GetLineIntersection(B,v1,C,v2);
}
int main()
{// freopen("input.txt","r",stdin);Point A,B,C,D,E,F;int T;cin>>T;while(T--){cin>>A.x>>A.y>>B.x>>B.y>>C.x>>C.y;D=getD(A,B,C);E=getD(B,C,A);//注意方向对应F=getD(C,A,B);printf("%f %f %f %f %f %f\n",D.x,D.y,E.x,E.y,F.x,F.y);}return 0;
}

莫利定理:UVa 11178 Morley's Theorem相关推荐

  1. UVA 11178 Morley’s Theorem(莫雷定理 计算几何)

    Morley's Theorem Input: Standard Input Output: Standard Output Morley's theorem states that that the ...

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

    Problem D Morley's Theorem Input: Standard Input Output: Standard Output Morley's theorem states tha ...

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

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

  4. UVa 11178 Morley‘s Theorem(计算几何基础)

    题目链接:https://www.luogu.com.cn/problem/UVA11178 有 T 组测试样例,输入 3 个点的坐标,A , B , C ,然后每两点确定一条直线,将每两条直线所形成 ...

  5. uva 11178 Morley's Theorem 三角形内角三等分线交点

    给出一个三角形ABC的三个顶点坐标,共有6条内角三等分线:AF .AE. BF. BD. CE. CD,求点D.E.F的坐 标. #include<cstdio> #include< ...

  6. Uva 11178 Morley定理

    题意: 给你三角形三个点, 定理是 三个内角的三等分线相交得出 DEF三点, 三角新 DFE是等边三角形 然后要你输出 D E F 的坐标 思路 : 求出三个内角,对于D 相当于 BC向量逆时针旋转, ...

  7. 【数学基础知识】莫利定理(Morley‘s Theorem)及其直观证明

    前两天看了和三角形相关的一个莫利定理,觉得较为有趣,所以做一个记录. 莫利定理(Morley's Theorem) 将三角形的三个内角三等分,靠近某边的两条三分角线相交得到一个交点,则这样的三个交点可 ...

  8. 【第一道计算几何题】 UVA11178 Morley‘s Theorem (二维几何,旋转直线求求交点)

    整理的算法模板合集: ACM模板 要求D点我们只需要把直线BC向左旋转a/3,向右旋转b/3得到两直线求交点即可. 秒啊秒啊 解锁技能树--计算几何,终于能加一个计算几何版块了 #include< ...

  9. uva 11178(几何)

    就是几何板子,刚学,真恶心.不说了,刘汝嘉牛逼. #include <iostream> #include <cstring> #include <algorithm&g ...

最新文章

  1. 《科学》杂志展望2020年十大科学头条
  2. 【译】function.caller 被认为是有害的
  3. 快递员依据管理中心发来收件信息
  4. 基于xilinx异构平台上视频采集分析
  5. 010-python基础-数据类型-字符串操作
  6. Flink DataStream 编程入门
  7. [导入]创建DataTable对象
  8. Scrapy爬虫框架入门
  9. 手机归属地查询演示代码
  10. 小米路由器挂php,小米路由器mini 安装openWrt+更新源+挂载U盘+安装python
  11. RDCMan之DPI 和 Screen Resolution设置
  12. 索尼电视总出现Android,索尼电视紧急撤回安卓8.0固件包:N多用户无法连接Wi-Fi...
  13. [R]_R里如何将多个Excel文件合并为一个Excel文件多个Sheet
  14. 理论计算机科学 维基百科,多元智能理论(维基百科的比较全面的介绍).pdf
  15. android qq很多压缩包,微信QQ总是占用手机大量内存?这次腾讯推出官方版清理工具了...
  16. 向量代数与空间解析几何
  17. elementui下拉选择框
  18. python生成排列组合_Python 排列组合生成
  19. python解三元一次方程组_关于实现求解三元一次方程组的小程序的一点小研究
  20. java中config是什么意思,详解Spring中的JavaConfig注解

热门文章

  1. BurpUnlimited
  2. 命令执行漏洞 java_白帽子挖洞—命令执行(Commnd Execution)篇
  3. 使用Apache Hudi + Amazon S3 + Amazon EMR + AWS DMS构建数据湖
  4. python 枪表情包_Python自动生成表情包 Python在手 从此斗图无敌手
  5. 用python写抢红包程序的具体代码
  6. uni-app页面部分模块转化成图片并保存(适用app和h5)以及涉及轮播滚动时,区分轮播内容生成图片方法
  7. centos7仅安装mysql/mongodb客户端
  8. 如何下载百度地图中的矢量POI兴趣点
  9. c语言中除法取整和取余,编程基础-关于取整和取余的应用
  10. 二维矩形条带装箱问题的底部左齐择优匹配算法