题解 UVA12165 【Triangle Hazard】
题意
略。
题解
最近脑子不太好使,只能写点简单题。
梅涅劳斯定理。
好久没学 MO 了,写得不好请见谅。
在
在
设
两式相加即
由于图形有对称性,所以剩下两个点的坐标可以轮换求出。这里是绝对不会出现拿
即
由塞瓦定理知
代码
#include<bits/stdc++.h>
using namespace std;
typedef int ll;
typedef long long int li;
typedef long double db;
const ll MAXN=2e5+51;
ll test;
db xp,yp,xq,yq,xr,yr,m1,m2,m3,m4,m5,m6;
inline ll read()
{
register ll num=0,neg=1;
register char ch=getchar();
while(!isdigit(ch)&&ch!='-')
{
ch=getchar();
}
if(ch=='-')
{
neg=-1;
ch=getchar();
}
while(isdigit(ch))
{
num=(num<<3)+(num<<1)+(ch-'0');
ch=getchar();
}
return num*neg;
}
inline db getRatio(db m1,db m2,db m3,db m4)
{
return m2/m1*m4/(m3+m4);
}
#define P db xp,db yp
#define Q db xq,db yq
#define R db xr,db yr
inline void calc(P,Q,R,db m1,db m2,db m3,db m4,db m5,db m6)
{
db PR=hypot(xp-xr,yp-yr),u=getRatio(m5,m6,m1,m2),v=getRatio(m4,m3,m2,m1);
db RA=(v+1)/(u-v)*PR,dx=xr-xp,dy=yr-yp,c=RA/PR;
printf("%.8Lf %.8Lf",xr+dx*c,yr+dy*c);
}
inline void solve()
{
scanf("%Lf%Lf%Lf%Lf%Lf%Lf",&xp,&yp,&xq,&yq,&xr,&yr);
scanf("%Lf%Lf%Lf%Lf%Lf%Lf",&m1,&m2,&m3,&m4,&m5,&m6);
calc(xp,yp,xq,yq,xr,yr,m1,m2,m3,m4,m5,m6),putchar(' ');
calc(xq,yq,xr,yr,xp,yp,m3,m4,m5,m6,m1,m2),putchar(' ');
calc(xr,yr,xp,yp,xq,yq,m5,m6,m1,m2,m3,m4),puts("");
}
int main()
{
test=read();
for(register int i=0;i<test;i++)
{
solve();
}
}