德莱联盟(判断两点是否相交 nyist)

描述

欢迎来到德莱联盟。。。。

德莱文。。。

德莱文在逃跑,卡兹克在追。。。。

我们知道德莱文的起点和终点坐标,我们也知道卡兹克的起点和中点坐标,问:卡兹克有可能和德莱文相遇吗?,并且保证他们走的都是直线。

输入
几组数据,一个整数T表示T组数据
每组数据 8个实数,分别表示德莱文的起点和终点坐标,以及卡兹克的起点和终点坐标
输出
如果可能 输出 Interseetion,否则输出 Not Interseetion
样例输入
2
-19.74 7.14 22.23 -27.45 -38.79 -5.08 47.51 34.01
-8.61 9.91 -32.47 6.47 -3.81 -16.1 7.82 -6.37
样例输出
Interseetion
Not Interseetion
思路 根据叉乘 直线ab 直线cd  如果c d点在ab线段的两边 ,则ac向量与ad向量在ab向量的顺时针逆时针方向(或者 逆时针 顺时针方向)

即根据叉乘性质可AC

代码:

#include<iostream>
#include<stdio.h>
using namespace std;

struct node {
double x,y;
}st1,ed1,st2,ed2;
double area(node ss1,node ee1,node ss2)
{
    return (ss1.x-ee1.x)*(ss1.y-ss2.y)-(ss1.x-ss2.x)*(ss1.y-ee1.y);
}
int main()
{
    int t,i,j;
    cin>>t;
    while(t--)
    {
        cin>>st1.x>>st1.y>>ed1.x>>ed1.y>>st2.x>>st2.y>>ed2.x>>ed2.y;
        double s1=area(st1,ed1,st2);
        double s2=area(st1,ed1,ed2);
        double s3=area(st2,ed2,st1);
        double s4=area(st2,ed2,ed1);
        if(s1*s2<=0&&s3*s4<=0)
            cout<<"Interseetion"<<endl;
        else
            cout<<"Not Interseetion"<<endl;
    }
    return 0;
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值