题目地址: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 梅涅劳斯定理的应用相关推荐

  1. 计算几何(梅涅劳斯定理) - Triangle Hazard - UVA 12165

    计算几何(梅涅劳斯定理) - Triangle Hazard - UVA 12165 题意: 如上图,给定△PQR的三个顶点坐标以及6个比例m1,m2,...,m6,如上图,给定\triangle P ...

  2. UVa 11437 (梅涅劳斯定理) Triangle Fun

    题意: 给出三角形ABC顶点的坐标,DEF分别是三边的三等分点.求交点所形成的三角形PQR的面积. 分析: 根据梅涅劳斯定理,我们得到: ,解得 另外还有:,解得 所以AR : RP : PD = 3 ...

  3. uvalive 4413(梅涅劳斯定理)

    题意:如图所示,给出P.Q.R三点的坐标,AB.BC.AC被点F.D.E划分成m1:m2.m3:m4.m5:m6,给出m1~m6的数值,求△ABC的三个顶点A.B.C的坐标. 题解:根据梅涅劳斯定理, ...

  4. 塞瓦定理与梅涅劳斯定理

    证明赛瓦定理

  5. 球面三角形的梅涅劳斯定理、塞瓦定理及其应用

    李兴源,Email: 742096830@qq.com,微信:lihpb00.

  6. 射影几何----用交比证明著名的梅涅劳斯定理

  7. 平面几何----用梅涅劳斯定理证明笛沙格定理

  8. 平面几何----用梅涅劳斯定理证明帕普斯定理

  9. 平面几何----用梅涅劳斯定解20年一道高三数学模拟题

最新文章

  1. python的for语句条件_Python中的条件选择和循环语句
  2. 小蛮机器人如何联网_国际相对论第三期——机器人与物联网的碰撞
  3. 6 有序集合ZSet(Sorted Set)
  4. 初始化列表||类对象作为类成员|| 静态成员
  5. HDU - 4513 吉哥系列故事——完美队形II(Manacher)
  6. 提高CSS文件可维护性的五种方法
  7. bigdecimal 除法保留两位小数_【名师课堂】苏教数学五年级上总复习9.4小数的四则计算...
  8. MongnDB 主从复制
  9. oracle 改变受限模式,oracle之受限模式修改
  10. goldengate mysql双向_Oracle使用goldengate分别向Oracle和mysql双路的单向复制
  11. MFC(VS2010)编程实例之一(Edit Control控件)
  12. mapxtreme java_用mapXtreme Java开发web gis应用 (下)
  13. ES index not_analyzed
  14. 移动端中的vMin和vMax
  15. Word文档进入只读模式
  16. 短信验证码登录的实现
  17. oracle时间字段加几小时
  18. recovery之刷机脚本自定义(解决刷zip文件时出现Status 6错误)
  19. Ubuntu+Sendmail+Dovecot+Openwebmail 邮件服务器搭建完全解决方案
  20. HTML、HTTP、Web综合面试题(三)

热门文章

  1. Rancher开源Octopus:IoT设备管理系统
  2. 计算机、软件学硕与专硕的区别
  3. 基于Linux搭建一个类似Qik手机录像直播平台(服务器端:feng streaming server + web server,客户端:Android手机应用)
  4. Daimayuan Online Judge 快快变大
  5. 2019 CCPC 河南省赛A:最大下降矩阵(dp)
  6. HNUST - 数据库课设
  7. SEO像艺术,为自己做站最划算
  8. java和胧村正差不多的游戏_对外行来说,怎麽把脑中一个游戏构思变成现实?...
  9. 启发式和元启发式的区别
  10. 老铁,这年头不会点Git真不行!!!