LA 4413 Triangle Hazard 梅涅劳斯定理的应用
2024-05-21 00:24:02
题目地址:pdf版本
比如说求A,我们知道了向量PR ,只需要求出PA/PR的值,就知道向量PA,这样加上P就可以求出A。
关于比例的计算,用到梅涅劳斯定理 纯平面几何内容。
然后简化计算时,用到了轮换对称性,减少代码量。
代码:
#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
const double eps=1e-10;
const double PI=acos(-1);using namespace std;struct Point{double x;double y;Point(double x=0,double y=0):x(x),y(y){}void operator<<(Point &A) {cout<<A.x<<' '<<A.y<<endl;}
};int dcmp(double x) {return (x>eps)-(x<-eps); }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);}// ps coutostream &operator<<(ostream & out,Point & P) { out<<P.x<<' '<<P.y<<endl; return out;}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 Cross(Vector A,Vector B) {return A.x*B.y-B.x*A.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 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));}
Vector Normal(Vector A) {double L=Length(A);return Vector(-A.y/L,A.x/L);}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;}double DistanceToLine(Point P,Point A,Point B)
{Vector v1=P-A; Vector v2=B-A;return fabs(Cross(v1,v2))/Length(v2);}double DistanceToSegment(Point P,Point A,Point B)
{if(A==B) return Length(P-A);Vector v1=B-A;Vector v2=P-A;Vector v3=P-B;if(dcmp(Dot(v1,v2))==-1) return Length(v2);else if(Dot(v1,v3)>0) return Length(v3);else return DistanceToLine(P, A, B);}Point GetLineProjection(Point P,Point A,Point B)
{Vector v=B-A;Vector v1=P-A;double t=Dot(v,v1)/Dot(v,v);return A+v*t;
}bool SegmentProperIntersection(Point a1,Point a2,Point b1,Point b2)
{double c1=Cross(b1-a1, a2-a1);double c2=Cross(b2-a1, a2-a1);double c3=Cross(a1-b1, b2-b1);double c4=Cross(a2-b1, b2-b1);//cout<<c1<<c2<<c3<<c4<<endl;return dcmp(c1)*dcmp(c2)<0&&dcmp(c3)*dcmp(c4)<0 ;}bool OnSegment(Point P,Point A,Point B)
{return dcmp(Cross(P-A, P-B))==0&&dcmp(Dot(P-A,P-B))<0;
}double PolygonArea(Point *p,int n)
{double area=0;for(int i=1;i<n-1;i++){area+=Cross(p[i]-p[0], p[i+1]-p[0]);}return area/2;}Point read_point()
{Point P;scanf("%lf%lf",&P.x,&P.y);return P;
}Point getA(Point P,Point Q,Point R,double a,double b,double c)
{double r1=a*b/(a*b+1+a);double r2=(c*(a+1))/(1+c*(a+1));double r=(1-r1)/(1-r1-r2);Vector PA=(R-P)*r;return PA+P;
}int main()
{int T;cin>>T;Point A,B,C,P,Q,R;double m[6];double a,b,c;while(T--){P=read_point();Q=read_point();R=read_point();for(int i=0;i<6;i++){cin>>m[i];}a=m[0]/m[1];b=m[2]/m[3];c=m[4]/m[5];A=getA(P, Q, R, a, b, c);B=getA(Q,R,P,b,c,a);C=getA(R,P,Q,c,a,b);printf("%.8lf %.8lf %.8lf %.8lf %.8lf %.8lf\n",A.x,A.y,B.x,B.y,C.x,C.y);}}
LA 4413 Triangle Hazard 梅涅劳斯定理的应用相关推荐
- 计算几何(梅涅劳斯定理) - Triangle Hazard - UVA 12165
计算几何(梅涅劳斯定理) - Triangle Hazard - UVA 12165 题意: 如上图,给定△PQR的三个顶点坐标以及6个比例m1,m2,...,m6,如上图,给定\triangle P ...
- UVa 11437 (梅涅劳斯定理) Triangle Fun
题意: 给出三角形ABC顶点的坐标,DEF分别是三边的三等分点.求交点所形成的三角形PQR的面积. 分析: 根据梅涅劳斯定理,我们得到: ,解得 另外还有:,解得 所以AR : RP : PD = 3 ...
- uvalive 4413(梅涅劳斯定理)
题意:如图所示,给出P.Q.R三点的坐标,AB.BC.AC被点F.D.E划分成m1:m2.m3:m4.m5:m6,给出m1~m6的数值,求△ABC的三个顶点A.B.C的坐标. 题解:根据梅涅劳斯定理, ...
- 塞瓦定理与梅涅劳斯定理
证明赛瓦定理
- 球面三角形的梅涅劳斯定理、塞瓦定理及其应用
李兴源,Email: 742096830@qq.com,微信:lihpb00.
- 射影几何----用交比证明著名的梅涅劳斯定理
- 平面几何----用梅涅劳斯定理证明笛沙格定理
- 平面几何----用梅涅劳斯定理证明帕普斯定理
- 平面几何----用梅涅劳斯定解20年一道高三数学模拟题
最新文章
- python的for语句条件_Python中的条件选择和循环语句
- 小蛮机器人如何联网_国际相对论第三期——机器人与物联网的碰撞
- 6 有序集合ZSet(Sorted Set)
- 初始化列表||类对象作为类成员|| 静态成员
- HDU - 4513 吉哥系列故事——完美队形II(Manacher)
- 提高CSS文件可维护性的五种方法
- bigdecimal 除法保留两位小数_【名师课堂】苏教数学五年级上总复习9.4小数的四则计算...
- MongnDB 主从复制
- oracle 改变受限模式,oracle之受限模式修改
- goldengate mysql双向_Oracle使用goldengate分别向Oracle和mysql双路的单向复制
- MFC(VS2010)编程实例之一(Edit Control控件)
- mapxtreme java_用mapXtreme Java开发web gis应用 (下)
- ES index not_analyzed
- 移动端中的vMin和vMax
- Word文档进入只读模式
- 短信验证码登录的实现
- oracle时间字段加几小时
- recovery之刷机脚本自定义(解决刷zip文件时出现Status 6错误)
- Ubuntu+Sendmail+Dovecot+Openwebmail 邮件服务器搭建完全解决方案
- HTML、HTTP、Web综合面试题(三)
热门文章
- Rancher开源Octopus:IoT设备管理系统
- 计算机、软件学硕与专硕的区别
- 基于Linux搭建一个类似Qik手机录像直播平台(服务器端:feng streaming server + web server,客户端:Android手机应用)
- Daimayuan Online Judge 快快变大
- 2019 CCPC 河南省赛A:最大下降矩阵(dp)
- HNUST - 数据库课设
- SEO像艺术,为自己做站最划算
- java和胧村正差不多的游戏_对外行来说,怎麽把脑中一个游戏构思变成现实?...
- 启发式和元启发式的区别
- 老铁,这年头不会点Git真不行!!!