POJ 1269
至今不明白为什么POJ中把G++改成C++就对了
题目:
求两直线的关系,若相交求其交点
题解:
#include<cstdio>
#include<cmath>
#include<string.h>
#include<iostream>
using namespace std;
const int N=1e3+10;
const double eps=1e-5;
struct nd{
double x,y;
friend nd operator*(const nd &a,const double b)
{
nd ans={a.x*b,a.y*b};return ans;
}
friend nd operator/(const nd &a,const double b){
nd ans={a.x/b,a.y/b};return ans;
}
friend nd operator+(const nd &a,const nd &b){
nd ans={a.x+b.x,a.y+b.y};return ans;
}
friend double operator*(const nd &a,const nd &b){
return (a.x*b.y-b.x*a.y);
}
};
nd get(nd a,nd b){nd ans={b.x-a.x,b.y-a.y};return ans;}
void cet(nd &a){scanf("%lf%lf",&a.x,&a.y);}
void pr(nd a){printf("%.2lf %.2lf",a.x,a.y);}
nd cross(nd a1,nd a2,nd b1,nd b2){
double s1=get(a1,b1)*get(a1,b2)/2;
double s2=get(a2,b2)*get(a2,b1)/2;
return a1+((get(a1,a2)*s1)/(s1+s2));
}
nd a1,a2,b1,b2;
int main()
{
int n;
while(~scanf("%d",&n))
{
printf("INTERSECTING LINES OUTPUT\n");
for(int i=1;i<=n;i++)
{
cet(a1),cet(a2);
cet(b1),cet(b2);
//pr(a1);pr(a2);pr(b1);pr(b2);
if(get(a1,a2)*get(b1,b2)==0)
{
if(get(a1,b1)*get(a1,b2)==0){
printf("LINE\n");
}
else printf("NONE\n");
}
else{
printf("POINT ");
pr(cross(a1,a2,b1,b2));
printf("\n");
}
}
printf("END OF OUTPUT");
}
}