11178 - Morley's Theorem【几何】
来源:互联网 发布:剑灵力士卡刀软件 编辑:程序博客网 时间:2024/05/14 09:30
不涉及什么算法,只是简单的套用模板进行计算。
如果一个向量进行逆时针旋转,那么可以使用定义的函数 Rotate(v,rad)进行计算。
但是如果进行顺时针旋转,那么需要将rad改为-rad,也就是Rotate(v,-rad)进行计算。
精度的控制为 1e-10;
1411224311178Morley's TheoremAcceptedC++0.0552014-08-29 11:09:31
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>#include<vector>#include<queue>#include<map>#include<set>using namespace std;#define INF 1 << 30#define eps 1e-10#define Vector Point/*=============================================*/double dcmp(double x){ if(fabs(x) < eps) return 0; else return x < 0 ? -1 : 1;}struct Point{ double x; double y;Point(double a = 0,double b = 0): x(a),y(b) {};friend bool operator < (Point p,Point q){ if(p.x != q.y) return p.y - q.y; else return p.x - q.x;}friend Vector operator + (Point p,Point q){ return Vector(p.x + q.x , p.y + q.y);}friend Vector operator - (Point p,Point q){ return Vector(p.x - q.x , p.y - q.y);}friend Vector operator * (Point p,double t){ return Vector(p.x * t , p.y * t);}friend Vector operator / (Point p,double t){ return Vector(p.x / t , p.y / t);}friend bool operator == (Point p,Point q){ return dcmp(p.x - q.x) == 0 && dcmp(p.y - q.y) == 0;}};double Dot(Vector p, Vector q){ //向量点积return p.x * q.x + p.y * q.y;}double Length(Vector p){ //向量长度return sqrt(p.x*p.x + p.y * p.y);}double Angle(Vector p ,Vector q){return acos( Dot(p, q) /( Length(p) * Length(q) ) );}double Cross(Vector p,Vector q){return p.x * q.y - p.y * q.x;}double Area(Point a,Point b,Point c){return Cross(a - b , c - b);}Vector Rotate(Vector p,double angle){ return Vector(p.x * cos(angle) - p.y * sin(angle), p.x * sin(angle) + p.y * cos(angle));}Vector Normal(Vector p){ //求法向量double L = Length(p);return Vector( - p.y / L , p.x / L);}Point GetLineCross(Vector v,Point p,Vector w,Point q){Vector u = p - q;double t = Cross(w,u) / Cross(v,w);return p + v * t;}double Distance(Point p,Point a,Point b){ //点到射线的距离 Vector v1 = b - a; Vector v2 = p - a; return fabs(Cross(v1,v2)) / Length(v1);}double Distance2(Point p,Point a,Point b){ if(a == b) return Length(p - a); Vector v1 = b - a , v2 = p - a, v3 = p - b; if(dcmp(Dot(v1,v2)) < 0) return Length(v2); else if(dcmp(Dot(v1,v3)) > 0) return Length(v3); else return fabs(Cross(v1,v2))/ Length(v1);}Point GetLinePoint(Point p,Point a,Point b){ Vector v = b - a; return a + v * (Dot(v, p -a ) / Dot(v,v));}bool If_Cross(Point a1,Point a2,Point b1,Point b2){ double c1 = Cross(a2 - a1 , b1 - a1) , c2 = Cross(a2 - a1 , b2 - a1), c3 = Cross(b2 - b1, a1 - b1), c4 = Cross(b2 - b1, a2 - b1); return dcmp(c1) * dcmp(c2) < 0 && dcmp(c3) * dcmp(c4) < 0;}bool If_InLine(Point p,Point a1,Point a2){ return dcmp(Cross(a1 - p , a2 - p)) == 0 && dcmp(Dot(a1 - p , a2 - p)) < 0;}Point GetPoint(Point a,Point b,Point c){ Vector v1 = c - b; double rad = Angle(a - b,v1); v1 = Rotate(v1, rad / 3); Vector v2 = b - c; double _rad = Angle(a - c, v2); //负数代表顺时钟转动 v2 = Rotate(v2, - _rad / 3); return GetLineCross(v1,b,v2,c);}int main(){ int T; scanf("%d",&T); while(T--){ Point a , b , c; scanf("%lf%lf",&a.x,&a.y); scanf("%lf%lf",&b.x,&b.y); scanf("%lf%lf",&c.x,&c.y); Point d = GetPoint(a,b,c); Point e = GetPoint(b,c,a); Point f = GetPoint(c,a,b); printf("%.6f %.6f %.6f %.6f %.6f %.6f\n",d.x,d.y,e.x,e.y,f.x,f.y); } return 0;}
0 0
- 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(计算几何)
- Morley's Theorem 计算几何
- Morley’s Theorem(几何+UVA11178)
- vs2003快捷键
- 6 个重构方法可帮你提升 80% 的代码质量
- 25岁毕业,拿一万块钱月薪
- Codeforces Beta Round #18 (Div. 2 Only) D - Seller Bob
- json数据格式
- 11178 - Morley's Theorem【几何】
- PHP学习1
- UVA 10106
- MFC 写文档的方法
- BZOJ 1025: [SCOI2009]游戏
- 苹果Mac下LAMP环境的搭建
- 权限:user权限,folder 权限
- HOJ 1551 Polylops(简单数学题)
- 搜索. Poj1324. Holedox Moving.