Uva 11178 Morley's Theorem (几何+模拟)
2017-04-21 07:48
393 查看
题意:
Morley定理是这样的:作三角形ABC每个内角的三等分线,相交成三角形DEF,则DEF是等边三角形,如下图所示。你任务是根据A,B,C 3个点的位置确定D、E、F 3个点的位置。
输入格式:
输入第一行为测试数据组数T(T<=5000),每组数据包含一行6个整数xA,yA,xB,yB,xC,yC,即A,B,C 3个点的坐标。输入保证三角形A、B、C的面积非0。所有坐标为不超过1000的非负整数。A,B,C按照逆时针顺序排列。输出格式
对于每组数据输出6个实数xD,yD,xE,yE,xF,yF。分析
计算几何入门题,几何纯模拟,没有算法可言,只是可以拿来写一下代码。用到的技巧有向量旋转,线段相交,求向量夹角等基础知识。代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> using namespace std; int T; struct Data{ double x, y; Data() {} Data(double x, double y):x(x), y(y) {} }A, B, C, D, E, F; Data Rot(Data A, double rad){ return Data(A.x*cos(rad) - A.y*sin(rad), A.x*sin(rad) + A.y*cos(rad)); } double Dot(Data A, Data B){ return A.x * B.x + A.y * B.y; } double Get_len(Data A){ return sqrt(Dot(A, A)); } double Angle(Data A, Data B){ return acos(Dot(A, B) / Get_len(A) / Get_len(B)); } Data operator + (Data A, Data B){return Data(A.x + B.x, A.y + B.y);} Data operator - (Data A, Data B){return Data(A.x - B.x, A.y - B.y);} Data operator * (double A, Data B){return Data(A * B.x, A * B.y);} Data operator / (Data A, double B){return Data(A.x/B, A.y/B);} double Det(Data A, Data B){ return A.x * B.y - A.y * B.x; } Data Cross(Data A, Data B, Data C, Data D){ double x = Det(A - C, A - D), y = Det(B - D, B - C); return (x * B + y * A) / (x + y); } Data Get(Data A, Data B, Data C){ Data v1 = C - B; double a1 = Angle(A - B, v1); v1 = Rot(v1, a1 / 3); Data v2 = B - C; double a2 = Angle(A - C, v2); v2 = Rot(v2, -a2 / 3); return Cross(B, B+v1, C, C+v2); } int main(){ scanf("%d", &T); while(T --){ scanf("%lf%lf%lf%lf%lf%lf", &A.x, &A.y, &B.x, &B.y, &C.x, &C.y); D = Get(A, B, C); E = Get(B, C, A); F = Get(C, A, B); printf("%.6lf %.6lf %.6lf %.6lf %.6lf %.6lf\n", D.x, D.y, E.x, E.y, F.x, F.y); } 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 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 求坐标
- uva11178 Morley's Theorem
- uva 011178 Morley's Theorem 计算几何
- UVa 11178 Morley's Theorem (几何问题)
- 【UVA 11178】 Morley's Theorem