怎么判断直线和矩形是否有交点?

小驴 2011-02-25 10:23:56

// test4.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include "iostream"
using namespace std;


struct Point
{
int x;
int y;
};

int main(int argc, char* argv[])
{
//矩形四个顶点
Point p1;
Point p2;
Point p3;
Point p4;
//直线的俩个极端点
Point lp1;
Point lp2;

int flag1;
int flag2;

cout<<"请输入矩形2个对角线的顶点坐标"<<endl;
cout<<"第一条:"<<endl;
cin>>p1.x>>p1.y>>p2.x>>p2.y;
cout<<"第二条:"<<endl;
cin>>p3.x>>p3.y>>p4.x>>p4.y;
cout<<"请输入直线中的俩个点坐标"<<endl;
cin>>lp1.x>>lp1.y>>lp2.x>>lp2.y;

cout<<"判断中....."<<endl;
flag1=((p1.x>=lp1.x)&&(p2.x<=lp2.x))||((p1.y>=lp1.y)&&(p2.y<=lp2.y));
flag2=((p3.x>=lp1.x)&&(p4.x<=lp2.x))||((p3.y>=lp1.y)&&(p4.y<=lp2.y));
if(flag1||flag2)
cout<<"相交"<<endl;
else
cout<<"不相交"<<endl;


return 0;
}




我自己想了一下,不知道这样可不可以,求验证。

不知道有没有更好的办法,求代码
...全文
428 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
damo_xu 2011-02-25
  • 打赏
  • 举报
回复
给你一个标准算法:
struct point
{ double x,y; };
struct line
{ struct point p1,p2; };

int line_k(point p0,point p1,point p2)
{
int dx1,dx2,dy1,dy2;
dx1 = p1.x - p0.x; dy1 = p1.y - p0.y;
dx2 = p2.x - p0.x; dy2 = p2.y - p0.y;

if (dx1*dy2 > dy1*dx2) return 1;
// dy2/dx2 > dy1/dx1 (p2 在 p0-p1 逆时针方向)
if (dx1*dy2 < dy1*dx2) return -1;
// dy2/dx2 < dy1/dx1 (p2 在 p0-p1 顺时针方向)

if ((dx1*dx2 < 0)||(dy1*dy2 < 0)) return -1;
// 如果 p0 在p1 和p2 之间
if ((dx1*dx1+dy1*dy1) < (dx2*dx2+dy2*dy2)) return 1;
// 如果 p1 在p0 和p2 之间
return 0;
// 如果 p2 在p0 和p1 之间
}

int schnitt(line l1,line l2)
{
※※如果一条线段的两个端点分别处于另一条线段两侧,则相交。

return ((line_k(l1.p1,l1.p2,l2.p1)
*line_k(l1.p1,l1.p2,l2.p2)) <= 0)
&& ((line_k(l2.p1,l2.p2,l1.p1)
*line_k(l2.p1,l2.p2,l1.p2)) <= 0);
}
  • 打赏
  • 举报
回复
显然不对

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧