例题4.1 Morley定理 UVa11178

1.题目描述:点击打开链接

2.解题思路:本题直接模拟即可。只要知道如何计算D点的坐标,就能算出其他两个点。根据题意,我们需要先计算∠ABC的值a,然后把射线BC逆时针旋转a/3,得到直线BD,同理可以得到直线CD,求交点即可。

3.代码:

//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<algorithm>
#include<cassert>
#include<string>
#include<sstream>
#include<set>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<deque>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<cctype>
#include<functional>
using namespace std;

#define me(s)  memset(s,0,sizeof(s))
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair <int, int> P;

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

const double eps=1e-10;
int dcmp(double x)
{
    if(fabs(x)<eps)return 0;
    else 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 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);
}

Point read_point()
{
    double x,y;
    scanf("%lf%lf",&x,&y);
    return Point(x,y);
}
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);
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-29 04:35:41

例题4.1 Morley定理 UVa11178的相关文章

Morley&#39;s Therorem(UVA11178+几何)

题意:Morley定理,求D.E.F的坐标 思路:没什么算法,就是几何的应用.注意旋转角就好了. 转载请注明出处:寻找&星空の孩子 题目链接:UVA11178 1 #include<cstdio> 2 #include<cmath> 3 #define PI acos(-1.0) 4 using namespace std; 5 6 struct Point 7 { 8 double x,y; 9 Point(double x=0,double y=0):x(x),y(y)

Morley’s Theorem(几何+UVA11178)

题意:Morley定理,求D.E.F的坐标 思路:没什么算法,就是几何的应用.注意旋转角就好了. 转载请注明出处:寻找&星空の孩子 题目链接:UVA11178 #include<cstdio> #include<cmath> #define PI acos(-1.0) using namespace std; struct Point { double x,y; Point(double x=0,double y=0):x(x),y(y){ } // Point read_

Burnside引理与Polya定理

Burnside引理与Polya定理 Burnside引理与Polya定理是有关组合数学的两条十分重要的定理(引理),但是网上的一些资料大多晦涩难懂或者与实际并不相关联,因此在这里做一些浅显的解读,希望通过此文章可以让这两条定理(引理)能够发挥其作用. PS:引理与定理的区别: Ψ引理是数学中为了取得某个更好的定理而作为步骤被证明的命题,其意义并不在于自身被证明,而在于为达成最终定理作出贡献. Ψ一个引理可用于证明多个定理.数学中存在很多著名的引理,这些引理可能对很多问题的解决有帮助.例如欧几里

UVa 11178 (简单练习) Morley&#39;s Theorem

题意: Morley定理:任意三角形中,每个角的三等分线,相交出来的三个点构成一个正三角形. 不过这和题目关系不大,题目所求是正三角形的三个点的坐标,保留6位小数. 分析: 由于对称性,求出D点,EF也是同样的. 用点和向量的形式表示一条直线,向量BA.BC的夹角为a1,则将BC逆时针旋转a1/3可求得 直线BD,同理也可求得直线CD,最后再求交点即可. 1 //#define LOCAL 2 #include <cstdio> 3 #include <cstring> 4 #in

《训练指南》——8.1

Uva11178: 题目大意:根据Morley定理我们可以知道,任意三角形的三个角的三等分点将交出一个等边三角形,那么现在给出三角形三个顶点A.B.C,请你计算D.E.F. 分析:大部分几何的题目数理分析上都比较简单,但是实现起来是较为繁琐的.这道问题其实就是进行三次直线交点的计算,而在每一次计算过程中,两条直线分别是两个角的三等分直线靠近它们公共边的那一部分. 那么如何求解这条直线?涉及向量旋转. 交点如何求解?涉及相交直线求交点. 这里需要结合一定解析几何的知识然后推出较为简单.丢失精度较少

同余方程,不定方程总结

听说这是数论中比较重要的部分了,一点点的总结吧.. 一.线性同余方程与不定方程: 单个一元线性方程 求解方法:扩展欧几里得 exgcd 模板: long long exgcd(long long a,long long b,long long &x,long long &y) { if(!b) { x=1; y=0; return a; } __int64 tt=exgcd(b,a%b,x,y); __int64 t; t=x; x=y; y=(t-a/b*y); return tt; }

UVA_11178_Morley&#39;s_Theorem_(向量旋转+直线相交)

描述 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=23&page=show_problem&problem=2119 Morley定理:作三角形ABC每个内角的三等分线,相交形成三角形DEF,则三角形DEF是等边三角形. 给出三角形的三个顶点ABC的坐标,求出DEF的坐标. 11178 - Morley's Theorem Time limit: 3.000 s

高等数学(5) 函数的极限

一.函数极限的概念 函数极限的引入 数列{xn}:xn = f(n) lim n->∞ xn=a : 当自变量n取正数而无限增大时,f(n)无限接近于确定的数a 函数的极限:在自变量的某个变化过程中,如果对应的函数值无限接近于某个确定的数,那么这个确定的数就叫做在一变化古城中的函数的极限 自变量变化的两种情况: 1.自变量x任意地接近于有限值x0(记作x->x0) 对应地函数值f(x)地变化情形 2.自变量x地绝对值|x|无限增大(记作x->∞) 对应地函数值f(x)的变化情形 自变量变

计算几何 val.3

目录 计算几何 val.3 自适应辛普森法 定积分 引入 辛普森公式 处理精度 代码实现 模板 时间复杂度 练习 闵可夫斯基和 Pick定理 结论 例题 后记 计算几何 val.3 自适应辛普森法 可以用来求多边形的面积并(圆也行) 定积分 定积分的几何意义是函数的曲线上 \(x\) 的一段区间与 \(x\) 轴围成的曲边梯形的带符号面积 表示法为 \[ \int_{a}^{b} f(x) \mathrm{d} x \] 引入 计算方法: 分成一堆小区间 \[ \int_{a}^{b} f(x)