NYOJ 1148-图形寻点

图形寻点

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 0
描述
某一天,JXB大牛莫名其妙地进入了一个满是机关的四边形房间,而只有触发其中位于四边形房间对角线交点的机关才可以逃出来,假设四边形为ABCD,则对角线交点为线段AC和线段BD交点!同学们,你们能帮帮他吗?
输入
第一行:n 表示n组测试数据
接下来n行,每行8个整数(绝对值不超10000),分别表示顶点A B C D的坐标。
输出
输出占一行,输出两个对角线交点坐标
结果保留2位小数
样例输入
2
1 1  2 0 1 -1 0 0
0 0 1 -1  2 0 1 1
样例输出
1.00 0.00
1.00 0.00
提示

保证四边形是凸四边形

 
 
#include <cstdio>
#include <cmath>
int n,i,a[4][2],b[2],c[2],d[2],e,f,g;
double h1,h2,xe,ye;
int main(){
    scanf("%d",&n);
    while(n--){
        for(i=0;i<4;i++)    scanf("%d%d",a[i],a[i]+1);
        b[0]=a[1][0]-a[0][0];b[1]=a[1][1]-a[0][1];
        c[0]=a[2][0]-a[0][0];c[1]=a[2][1]-a[0][1];
        d[0]=a[3][0]-a[0][0];d[1]=a[3][1]-a[0][1];
        e=b[0]*c[1]-b[1]*c[0];f=c[0]*d[1]-c[1]*d[0];
        if(e<0) e=-e;if(f<0)    f=-f;
        g=e+f;h1=double(e)/g;h2=1-h1;
        xe=b[0]*h2+d[0]*h1;ye=b[1]*h2+d[1]*h1;
        xe+=a[0][0];ye+=a[0][1];
        printf("%.2f %.2f\n",xe,ye);
    }
    return 0;
}
                


你可能感兴趣的:(基础模拟)