• 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;
    }
    


     

  • 相关阅读:
    jquery插件开发
    五种常见的 PHP 设计模式
    linux常用命令
    解决MySQL不允许从远程访问的方法
    模块化的JavaScript开发的优势在哪里
    巧用C#做中间语言 实现Java调用.net DLL
    PHP Predefined Interfaces 预定义接口
    想追赶.Net的脚步?Java面前障碍重重
    修改一行SQL代码 性能提升了N倍
    如何使用LoadRunner监控Windows
  • 原文地址:https://www.cnblogs.com/lj030/p/3002237.html
Copyright © 2020-2023  润新知