poj1269 简单的计算几何

这是学了计算几何后做的第一道题,刚开始没看清题意以为是求线段的。于是模版往上一套WA,悲剧啊
后来好好看了一下题目  又看了一下别人的代码  发现是自己题目没看清   原来是过这两个点的直线   改了之后果断AC啊!   高兴   虽然这是一道很水的题目  但是还是值得高兴
需要的知识大家都会   两条直线求交点难道自己不会推   肯定会啊  自己推吧
下面是我写的代码  仅供参考
#include<cstdio>///判断两条是否相交  共线   相交求出交点
#include<cstring>
#include<cmath>
#include<algorithm>
#define eps 1e-8

using namespace std;
struct Point
{
    double x,y;
}s[4];

typedef struct Point point;

double multi(point p0, point p1, point p2)//叉积
{
    return ( p1.x - p0.x )*( p2.y - p0.y )-( p2.x - p0.x )*( p1.y - p0.y );
}

int isIntersected(point s1,point e1, point s2,point e2)//判断是否相交  在一条线上  或不相交
{
    if(fabs(multi(s1,e1,s2))<=eps&&fabs(multi(s1,e1,e2))<=eps)printf("LINE\n");
    else if((e1.x-s1.x)*(e2.y-s2.y)==(e2.x-s2.x)*(e1.y-s1.y)) printf("NONE\n");
    else     //注意这要求的是两条直线的交点  不是两条线段的
    {
        point jiaodian;
         double a1=s1.y-e1.y;
        double b1=e1.x-s1.x;
        double c1=s1.x*e1.y-e1.x*s1.y;

        double a2=s2.y-e2.y;
        double b2=e2.x-s2.x;
        double c2=s2.x*e2.y-e2.x*s2.y;

        jiaodian.x=(b1*c2-b2*c1)/(a1*b2-a2*b1);
        jiaodian.y=(a2*c1-a1*c2)/(a1*b2-a2*b1);
        printf("POINT %.2f %.2f\n",jiaodian.x,jiaodian.y);
    }
}

int main()
{
    #ifdef LOCAL
    freopen("in.txt","r",stdin);
    #endif // LOACL
    int N;
    scanf("%d",&N);
    printf("INTERSECTING LINES OUTPUT\n");
    while(N--)
    {
        scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&s[0].x,&s[0].y,&s[1].x,&s[1].y,&s[2].x,&s[2].y,&s[3].x,&s[3].y);
        isIntersected(s[0],s[1],s[2],s[3]);
    }
    printf("END OF OUTPUT\n");
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值