acdream1094 几何
来源:互联网 发布:蒙特卡洛法matlab编程 编辑:程序博客网 时间:2024/05/16 06:09
#include<cstdio>#include<iostream>#include<cmath>#include<algorithm>using namespace std;#define eps 1e-6#define pi acos(-1)struct Point{ double x,y; Point(double a=0,double b=0){ x=a,y=b; } Point operator -(Point a){ return Point(x-a.x,y-a.y); } double operator *(Point a){ return x*a.x+y*a.y; } Point operator+(Point b) { return Point(x+b.x,y+b.y); } double dis(Point b) { return sqrt((x-b.x)*(x-b.x)+(y-b.y)*(y-b.y)); }}p[5];double dis(Point a,Point b){ return sqrt((b.x-a.x)*(b.x-a.x)+(b.y-a.y)*(b.y-a.y));}double ang(Point a,Point b, Point c){ Point d,e; d=b-a; e=c-a; return acos(d*e/(dis(a,b)*dis(a,c)));}Point wx(Point a,Point b,Point c)//外心{ double aaa=tan(ang(a,b,c)),bbb=tan(ang(b,c,a)),ccc=tan(ang(c,b,a)); double aa=bbb+ccc,bb=aaa+ccc,cc=aaa+bbb,p=aa+bb+cc; return Point((aa*a.x+bb*b.x+cc*c.x)/p,(aa*a.y+bb*b.y+cc*c.y)/p);}double angle(Point a, Point b, Point c){ Point d,e; d=b-a,e=c-a; return acos(d*e/(Point().dis(d)*Point().dis(e)));}Point G(Point a, Point b, Point c)//重心{ return Point((a.x+b.x+c.x)/3,(a.y+b.y+c.y)/3);}Point I(Point a,Point b,Point c)//内心{ double aa=b.dis(c),bb=c.dis(a),cc=a.dis(b),p=aa+bb+cc; return Point((aa*a.x+bb*b.x+cc*c.x)/p,(aa*a.y+bb*b.y+cc*c.y)/p);}Point H(Point a,Point b,Point c)//垂心{ double aa=tan(angle(a,b,c)),bb=tan(angle(b,c,a)),cc=tan(angle(c,b,a)),p=aa+bb+cc; return Point((aa*a.x+bb*b.x+cc*c.x)/p,(aa*a.y+bb*b.y+cc*c.y)/p);}Point Ia(Point a,Point b,Point c)//A点对应的旁心{ double aa=-b.dis(c),bb=c.dis(a),cc=a.dis(b),p=aa+bb+cc; return Point((aa*a.x+bb*b.x+cc*c.x)/p,(aa*a.y+bb*b.y+cc*c.y)/p);}Point Ib(Point a,Point b,Point c)//B点对应的旁心{ double aa=b.dis(c),bb=-c.dis(a),cc=a.dis(b),p=aa+bb+cc; return Point((aa*a.x+bb*b.x+cc*c.x)/p,(aa*a.y+bb*b.y+cc*c.y)/p);}Point Ic(Point a,Point b,Point c)//C点对应的旁心{ double aa=b.dis(c),bb=c.dis(a),cc=-a.dis(b),p=aa+bb+cc; return Point((aa*a.x+bb*b.x+cc*c.x)/p,(aa*a.y+bb*b.y+cc*c.y)/p);}bool is_ok(int n,double ang){ double s=n*ang/pi; if(fabs(s-floor(s+0.50))<eps) return true; else return false;}int main(){ int t; cin>>t; while(t--){ for(int i=0;i<3;i++) scanf("%lf%lf",&p[i].x,&p[i].y); double A=ang(p[0],p[1],p[2]); double B=ang(p[1],p[0],p[2]); double C=ang(p[2],p[1],p[0]); Point o=wx(p[0],p[1],p[2]); if(fabs(o.x)<eps) o.x=0.00; if(fabs(o.y)<eps) o.y=0.00;//此处防止出现-0.000的情况 printf("%.4f %.4f ",o.x,o.y); for(int n=3;;n++){ if(is_ok(n,A) && is_ok(n,B) && is_ok(n,C)){ printf("%d\n",n); break; } //puts("1"); } } return 0;}
此题帮助我整理了模板 详细题解http://acdream.info/topic/1451
0 0
- acdream1094 几何
- 几何
- 几何
- 几何
- 几何
- 计算几何几何函数库
- 计算几何-几何库
- 几何为什么叫几何
- 几何algorithm
- 几何algorithm
- 几何变换
- 几何造型
- 人生几何
- 计算几何
- 几何知识
- 计算几何
- 计算几何
- 几何空间
- OCP-1Z0-051 第173题 事务结束的条件
- 几何光学中近轴光学与高斯光学的区别
- OnContextMenu事件
- 现有几个动作、休闲、消除、飞机类游戏,使用cocos2d-x引擎开发的 商业游戏源码出售
- Java SoftReference
- acdream1094 几何
- DNS的Emeu算法
- 九度 题目1350:二叉树的深度
- HDU 1072 Nightmare(BFS)
- 求两个list的交集和差集
- JSP基础语法包括
- 中俄东海演习反潜 作战数据全部向对方开放
- zend framework获取数据库中枚举类enum的数据并将其转换成数组
- 双线双IP和BGP双线有什么区别?