社区
C#
帖子详情
急救:判断两条线段是否相交,并求两条线段的交点坐标 ~~~~~~
Hinzi
2006-11-08 11:56:36
用C#方法求出下面问题
已知:
第一线段的坐标值:(Px1,Py1)(Px2,Py2)
第二线段的坐标值:(x1,y1)(x2,y2)
求下列问题:
判断这两条线段是否相交,并求两条线段的交点坐标(X,Y)
恳求各位高手提供解决办法!
...全文
1045
10
打赏
收藏
急救:判断两条线段是否相交,并求两条线段的交点坐标 ~~~~~~
用C#方法求出下面问题 已知: 第一线段的坐标值:(Px1,Py1)(Px2,Py2) 第二线段的坐标值:(x1,y1)(x2,y2) 求下列问题: 判断这两条线段是否相交,并求两条线段的交点坐标(X,Y) 恳求各位高手提供解决办法!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
nZAI
2006-11-09
打赏
举报
回复
顶sanmu_bradley()
liuqm
2006-11-09
打赏
举报
回复
那你就用斜率来计算,毕竟方便了很多
alvachien
2006-11-08
打赏
举报
回复
怎么好像是一个初中数学题啊
zhxfzhxf1
2006-11-08
打赏
举报
回复
初中数学题
sanmu_bradley
2006-11-08
打赏
举报
回复
这个问题。。。。
1、求两直线交点
2、如果有交点判断交点X/Y值是否在两条线段X坐标较大值和Y坐标较小值之间。
3、如果在就有交点。
初中水平就可以解决吧。
Hinzi
2006-11-08
打赏
举报
回复
但是要求是线段啊~~~~~不是直线!!
请问liuqm(blue):
float Minx01 = Min(x0, x1);是什么意思呢??
我运行一下你的程序,有错误哦~~~~
yoopan
2006-11-08
打赏
举报
回复
liuqm(blue)
顶
liuqm
2006-11-08
打赏
举报
回复
直接用斜率
如果斜率相等就平行,否则肯定相交
斜率公式:k=(y2-y1)/(x2-x1);
liuqm
2006-11-08
打赏
举报
回复
bool TwoLineIsIntersect(float x0, float y0, float x1, float y1, float x2, float y2, float x3, float y3, float &InterX, float &InterY)
{ //两条线段是否相交X0X1 AND X1X2
float x, y;
float Minx01 = Min(x0, x1);
float Miny01 = Min(y0, y1);
float Minx23 = Min(x2, x3);
float Miny23 = Min(y2, y3);
float Maxx01 = Max(x0, x1);
float Maxy01 = Max(y0, y1);
float Maxx23 = Max(x2, x3);
float Maxy23 = Max(y2, y3);
if(x1!=x0 && x2!=x3)
{
float k1 = (y1-y0)/(x1-x0);
float k2 = (y3-y2)/(x3-x2);
float Den = (y1-y0)*(x3-x2) - (y3-y2)*(x1-x0);
if(k1==k2)
{ //平行不相交
float d1 = abs(y0*(x1-x0)-x0*(y1-y0)-y2*(x3-x2)+x2*(y3-y2)); //距离公式d = abs(c1-c2) / sqrt(a*a+b*b)
if(d1==0)
{//直线重合
if((x2>Minx01 && x2<Maxy01 && y2>Miny01 && y2<Maxy01) || (x3>Minx01 && x3<Maxy01 && y3>Miny01 && y3<Maxy01)
|| (x0>Minx23 && x0<Maxy23 && y0>Miny23 && y0<Maxy23) || (x1>Minx23 && x1<Maxy23 && y1>Miny23 && y1<Maxy23))
{ //实际碰撞问题线段重合认为相交了
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
x = ((y2-y0)*(x1-x0)*(x3-x2)+(y1-y0)*(x3-x2)*x0-(y3-y2)*(x1-x0)*x2)/Den;
y = ((y1-y0)*(x-x0))/(x1-x0) + y0;
if(Minx01<=x && x<=Maxx01 && Miny01<=y && y<=Maxy01 && Minx23<=x && x<=Maxx23 && Miny23<=y && y<=Maxy23)
{
InterX = x;
InterY = y;
return true;
}
}
else if(x1==x0 && x2!=x3)
{
x = x0;
y = ((y3-y2)*(x0-x2))/(x3-x2) + y2;
if(Minx01<=x && x<=Maxx01 && Miny01<=y && y<=Maxy01 && Minx23<=x && x<=Maxx23 && Miny23<=y && y<=Maxy23)
{
InterX = x;
InterY = y;
return true;
}
}
else if(x1!=x0 && x2==x3)
{
x = x2;
y = ((y1-y0)*(x2-x0))/(x1-x0) + y0;
if(Minx01<=x && x<=Maxx01 && Miny01<=y && y<=Maxy01 && Minx23<=x && x<=Maxx23 && Miny23<=y && y<=Maxy23)
{
InterX = x;
InterY = y;
return true;
}
}
return false;
}
Hinzi
2006-11-08
打赏
举报
回复
没有人知道吗?
精心整理2万字c++知识点
文章目录1、基本数据结构数组链表队列、单调队列、双端队列栈2、中极数据...
线段
树可并堆左偏树配对堆KDTree、四分树舞蹈链(DLX)、二进制分组划分树4、可持久化数据结构可持久化
线段
树(主席树)可持久化平衡树可持久...
SuperMap iClient3D for Cesium最短路径分析
在交通、消防业务场景中,如果某地发生火灾或者交通事故,需要快速规划出最短抢救路线,这就要用到网络分析中的最短路径分析功能。接下来就跟着小编一起看看,在三维场景中,如何实现最短路径分析。
2023全国特种作业操作证登高架设易错题汇总
为保证脚手架整体结构不变形,高度在24米以下的单双排脚手架,均必须在外侧立面的两端设置一道剪刀撑,并应由底至顶连续设置,中间各道剪刀撑之间的净距不应大于15米。为保证脚手架整体结构不变形,高度在24米以下的...
2019登高架设作业在线免费模拟考试系统及模拟题库
第1题、【
判断
题】 登高板又称踏板,是用来攀登楼宇的工具。 A、正确 B、错误 正确答案:B 第2题、【
判断
题】 一个物体在另一个粗糙物体表面滑动、有相对运动趋势的滚动、则物体受到滑动摩擦力、静摩擦力或滚动摩擦力...
国家基本比例 尺地图图式 第 1 部分 :1 500 000 2 000 地形图图式
两个尺寸值并 列的,第一个数字表示符号主要部分 的高度,第二个数字表示符号主要部分 的宽度;线状符号一端的数 字 ,单线是指其粗度,两平行线是指含线划粗的宽度(街道是指其空白部分的宽度〉 。符号上需要特别标...
C#
110,566
社区成员
642,567
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章