51nod1264(计算几何入门题)

来源:互联网 发布:货源软件是什么 编辑:程序博客网 时间:2024/05/15 23:51

传送门:51nod1264


题意:给你两条线段,判断是否相交


数学渣渣看了一下午各种找公式才明白:下面写一下理解:

判断两个线段相交与否。可以看成直线是否与线段相交

根据高数所学,向量的叉乘积,可以利用右手法则来判断结果的方向。

那么如果两种情况的方向一个上,一个下,那么自然也就是不在直线的同侧,那么就满足条件了。

代码是有需要注意x,y用double类型,否则乘法会有问题



ACcode

#include <iostream>#include <stdio.h>using namespace std;struct node{    double x,y;}a,b,c,d,ab,bc,bd;void solve(){   double p[4];    p[0]=(b.x-a.x)*(b.y-c.y)-(b.y-a.y)*(b.x-c.x); //ba X bc    p[1]=(b.x-a.x)*(b.y-d.y)-(b.y-a.y)*(b.x-d.x); //ba X bd    p[2]=(d.x-c.x)*(d.y-a.y)-(d.y-c.y)*(d.x-a.x);    p[3]=(d.x-c.x)*(d.y-b.y)-(d.y-c.y)*(d.x-b.x);    if ((p[0]*p[1]<=0)&&(p[2]*p[3]<=0))   cout<<"YES"<<endl;   else    cout<<"NO"<<endl;}int main(){    int n;    cin>>n;    while(n--)    {        cin>>a.x>>a.y>>b.x>>b.y>>c.x>>c.y>>d.x>>d.y;        solve();    }    return 0;}



原创粉丝点击