java中给定两个长方形的中心点、长度、宽度,如何判断他们是包含关系还是相交关系,如何编写代码,想了很久……

多维世界 2012-05-01 06:43:21
java中给定两个长方形的中心点、长度、宽度,如何判断他们是包含关系还是相交关系,如何编写代码,想了很久……
...全文
1746 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianyi316760232 2012-05-03
  • 打赏
  • 举报
回复
new Rectangle(0,0,100,100).intersects( 50,50,100,100 )
A_D_wocaoni 2012-05-02
  • 打赏
  • 举报
回复
这个问题就是拿来练手的啊!
古市轩 2012-05-02
  • 打赏
  • 举报
回复
我之前碰到的是由用户从键盘输入两个矩形的顶点,(哪两个点不确定),如:(10,10,10,10)
(20,20,20,20)
求这两个点的交集和并集(还是矩形),并把结果输出出来,如果没有交集,则说明没有交集(只要输入的数据时矩形,那么并集是一定有的)!
hnu_0720 2012-05-02
  • 打赏
  • 举报
回复
我的想法这样,不知道对不对,大家看看(两个矩形相切算是相交吗?)
对于两个矩形A,B:
不相交:A的四个顶点在B矩形的外面,B矩形的四个顶点也在A矩形的外面。
A包含B:B矩形的四个顶点在A矩形的内部或者是边上。
B包含A:同上
相交:A矩形的顶点一部分在B矩形的内部或者是B矩形的顶点一部分在A矩形的内部。
sdojqy1122 2012-05-01
  • 打赏
  • 举报
回复
纠正一下。sorry
|x1-x2|>(L1+L2)/2&&|y1 - y2|>(H1+H2)/2;相离。
|x1-x2| <|L1-L2|/2 && |y1 - y2|< |H1-H2|/2 包含
其他情况相交。

import java.awt.Point;
public class Main {
public static void main(String args[]){
RectangeDemo r1 = new RectangeDemo(new Point(1,2),5,5);
RectangeDemo r2 = new RectangeDemo(new Point(10,8),5,5);

checkRelation(r1,r2);
}

static class RectangeDemo{
Point center;
double width;
double height;

public RectangeDemo(Point point, int width, int height) {
this.center = point;
this.width = width;
this.height = height;
}
}

public static void checkRelation(RectangeDemo r1,RectangeDemo r2){
if(Math.abs(r1.center.x -r2.center.x) > r1.width/2 + r2.width/2
&& Math.abs(r1.center.y -r2.center.y) > r1.height/2 + r2.height/2 ){
System.out.println("相离");
}
else if(Math.abs(r1.center.x - r2.center.x) < Math.abs(r1.width/2 - r2.width/2)
&& Math.abs(r1.center.y -r2.center.y) > Math.abs(r1.height/2 - r2.height/2)){
System.out.println("包含");
}
else{
System.out.println("相交");
}
sdojqy1122 2012-05-01
  • 打赏
  • 举报
回复
swing里面的矩形一般指水平的,查了下api也没用具体给的倾斜的。要是搞倾斜的,再说楼主条件也不够搞成倾斜的。

import java.awt.Point;
public class Main {
public static void main(String args[]){
RectangeDemo r1 = new RectangeDemo(new Point(1,2),5,5);
RectangeDemo r2 = new RectangeDemo(new Point(10,8),5,5);

checkRelation(r1,r2);
}

static class RectangeDemo{
Point center;
double width;
double height;

public RectangeDemo(Point point, int width, int height) {
this.center = point;
this.width = width;
this.height = height;
}
}

public static void checkRelation(RectangeDemo r1,RectangeDemo r2){
if(Math.abs(r1.center.x -r2.center.x) > r1.width + r2.width
&& Math.abs(r1.center.y -r2.center.y) > r1.height + r2.height ){
System.out.println("相离");
}
else if(Math.abs(r1.center.x - r2.center.x) < Math.abs(r1.width - r2.width)
&& Math.abs(r1.center.y -r2.center.y) > Math.abs(r1.height - r2.height)){
System.out.println("包含");
}
else{
System.out.println("相交");
}
}
}
VanBaston 2012-05-01
  • 打赏
  • 举报
回复
这个你们前提长方形是水平的吗,会不会倾斜呢,如果你长方形还可以倾斜的话,那就很麻烦了啊!上边说的基本上都是水平的处理方式吧。
MiceRice 2012-05-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
如何编写代码:判断两个长方形是否存在包含关系
[/Quote]

只需要发现其中一个长方形的左上和右下角这两个点,都在另一个长方形之内,就说明是包含了。
多维世界 2012-05-01
  • 打赏
  • 举报
回复
如何编写代码:判断两个长方形是否存在包含关系
MiceRice 2012-05-01
  • 打赏
  • 举报
回复
包含比较简单,主要判断相交问题,但相交判定也比较麻烦,所以转为考虑如何判定不相交:

矩形各由两点(左上/右下)决定,使用屏幕坐标系
矩形 A (x1,y1),(x2,y2);
矩形 B (x3,y3),(x4,y4);

设:
m= (x1> x4)|(x2 <x3)
n= (y2 <y3)|(y1> y4)
则:
if(m|n) //不相交
else //相交
sdojqy1122 2012-05-01
  • 打赏
  • 举报
回复
这个。。。(x1,y1)L1,H1 (x2,y2)L2,H2
|x1-x2|>L1+L2&&|y1 - y2|>H1+H2 | |绝对值用Math.abs();
这种情况相离。
|x1-x2| < |L1-L2| && |y1 - y2|< |H1-H2| 包含
其他情况相交。

62,636

社区成员

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

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