zoukankan      html  css  js  c++  java
  • poj 1410

    题目不难,就是线段相交判断。叉积和点积的应用,但是却需要细心,看清题意

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    int cross(int x1,int y1,int x2,int y2)
    {
    	return x1*y2-y1*x2;
    }
    int dot(int x1,int y1,int x2,int y2)
    {
    	return x1*x2+y1*y2;
    }
    int ons(int x1,int y1,int x2,int y2,int x3,int y3)
    {
    	if(cross(x3-x1,y3-y1,x3-x2,y3-y2)==0&&dot(x3-x1,y3-y1,x3-x2,y3-y2)<=0) return 1;
    	else return 0;
    }
    int judge(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4)
    {
    	int c1=cross(x2-x1,y2-y1,x3-x1,y3-y1),c2=cross(x2-x1,y2-y1,x4-x1,y4-y1),
    		c3=cross(x4-x3,y4-y3,x1-x3,y1-y3),c4=cross(x4-x3,y4-y3,x2-x3,y2-y3);
    	if(c1*c2<0&&c3*c4<=0)
    		return 1;
    	else if(c1*c2==0&&(ons(x1,y1,x2,y2,x3,y3)||ons(x1,y1,x2,y2,x4,y4)))
    		return 1;
    	return 0;
    }
    int main()
    {
    	int sx,sy,ex,ey,xleft,ytop,xright,ybottom;
    	int n;
    	scanf("%d",&n);
    	while(n--)
    	{
    		scanf("%d%d%d%d%d%d%d%d",&sx,&sy,&ex,&ey,&xleft,&ytop,&xright,&ybottom);
    		int minx=min(xleft,xright),maxx=max(xleft,xright);
    		int miny=min(ytop,ybottom),maxy=max(ytop,ybottom);
    		int flag=0;
    		if((ex>=minx&&ex<=maxx&&sx>=minx&&sx<=maxx&&sy>=miny&&sy<=maxy&&ey>=miny&&ey<=maxy)||judge(sx,sy,ex,ey,xleft,ytop,xright,ytop)||judge(sx,sy,ex,ey,xleft,ytop,xleft,ybottom)
    			||judge(sx,sy,ex,ey,xleft,ybottom,xright,ybottom)||judge(sx,sy,ex,ey,xright,ybottom,xright,ytop))
    			flag=1;
    		if(flag) printf("T\n");
    		else printf("F\n");
    	}
    	return 0;
    }
    


     

  • 相关阅读:
    博客园cnblogs for win8 托管到GitHub开源
    html5 canvas 画图表
    回文数
    SpringBoot+logback实现按业务输出日志到不同的文件
    Class.forName() 与 ClassLoader.loadClass()的区别
    Easypoi实现单模板生成多页word文档
    普通Java项目中使用Sl4j+Log4j2打印日志
    SpringBoot集成JWT
    Java8_Lambda表达式
    SpringBoot自定义Condition注解
  • 原文地址:https://www.cnblogs.com/lj030/p/3002237.html
Copyright © 2011-2022 走看看