100分求Java代码 判断线段是否相交

wanglei0730 2009-08-06 09:09:28
已知点A(x1,y1) B(x2,y2) C(x3,y3) D(x4,y4), 如何判断线段AB和CD是否相交。请注意是线段,不是直线。 求Java代码
...全文
938 9 打赏 收藏 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hequhecong126317 2010-08-20
  • 打赏
  • 举报
回复
收起来
bigbug9002 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhi_fa_zhe 的回复:]
似乎java2d中有现成的函数intersects吧,仅仅是印象而已。

楼主查一下。
[/Quote]
确实有一个类:
java.awt.geom包中有Line2D.Double类,有下面的方法

intersectsLine
public boolean intersectsLine(double x1,
double y1,
double x2,
double y2)测试从 (x1,y1) 到 (x2,y2) 的线段是否与此线段相交。

参数:
x1 - 指定线段起始点的 X 坐标
y1 - 指定线段起始点的 Y 坐标
x2 - 指定线段结束点的 X 坐标
y2 - 指定线段结束点的 Y 坐标
返回:
如果此线段与指定线段彼此相交,则返回 true;否则返回 false。
从以下版本开始:
1.2
wanglei0730 2009-08-07
  • 打赏
  • 举报
回复
果然是有这个intersectsLine方法,很好很强大,感谢各位鼎力相助
zhi_fa_zhe 2009-08-06
  • 打赏
  • 举报
回复
似乎java2d中有现成的函数intersects吧,仅仅是印象而已。

楼主查一下。
bigbug9002 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 java2000_net 的回复:]
Java codepublicboolean isIntersect(double px1,double py1,double px2,double py2,double px3,double py3,double px4,double py4)//p1-p2 is or not intersect with p3-p4 {boolean flag=false;double d= (px2-¡­
[/Quote]
(0,1),(0,2) (0 ,1) (0,3) 两个线段有部分是重叠的,d=0,那不是就返回false了吗?
xcasp2008 2009-08-06
  • 打赏
  • 举报
回复
先帮顶下吧~~ 想到思路在贴上来!
andycpp 2009-08-06
  • 打赏
  • 举报
回复
我有个思路不知是否可行:
首先求出直线AB和CD的焦点,然后判断该点是否在线段AB和CD上。
老紫竹 2009-08-06
  • 打赏
  • 举报
回复
public boolean isIntersect(double px1,double py1,double px2,double py2,double px3,double py3,double px4,double py4)//p1-p2 is or not intersect with p3-p4
{
boolean flag = false;
double d = (px2-px1)*(py4-py3) - (py2-py1)*(px4-px3);
if(d!=0)
{
double r = ((py1-py3)*(px4-px3)-(px1-px3)*(py4-py3))/d;
double s = ((py1-py3)*(px2-px1)-(px1-px3)*(py2-py1))/d;
if((r>=0) && (r <= 1) && (s >=0) && (s<=1))
{
flag = true;
}
}
return flag;
}

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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