黑马程序员技术交流社区

标题: 一个几何问题:两个矩形 [打印本页]

作者: 电玩    时间: 2013-5-10 12:44
标题: 一个几何问题:两个矩形
本帖最后由 电玩 于 2013-5-10 16:00 编辑

3.28(几何方面:两个矩形)编写一个程序,提示用户输入两个矩形中点的X坐标和Y坐标以及它们的宽度和高度。然后判定第二个矩形是在第一个矩形内
,还是和第一个矩形有交集,或者是没有交集。

这道题出自《java语言程序设计》(美 Y.Danilei Liang)第三章 第28题 的(**)两星题(难)。自己做不出来,求高手解答,代码要注释。
作者: long    时间: 2013-5-10 13:45
不难啊,我帮楼主做。
作者: long    时间: 2013-5-10 15:41
本帖最后由 long 于 2013-5-10 15:42 编辑
  1. public class Rectangle{
  2.         public static int getInt(){
  3.                 int i = 0;
  4.                 try{
  5.                         byte[] buf = new byte[20];
  6.                         System.in.read(buf);
  7.                         String s = new String(buf);
  8.                         i = Integer.parseInt(s.trim());
  9.                 }
  10.                 catch(Exception e){
  11.                         System.out.println("程序遇到异常,即将终止");
  12.                         System.exit(0);
  13.                 }
  14.                 finally{
  15.                         return i;
  16.                 }
  17.         }
  18.         public static void sop(Object o){
  19.                 System.out.print(o);
  20.         }
  21.                         
  22.         public static void main(String[] args){
  23.                 //先定义并初始化两个矩形的变量
  24.                 int rx1 = 0; //第一个矩形的x坐标
  25.                 int ry1 = 0; //第一个矩形的y坐标
  26.                 int width1 = 0; //第一个矩形的宽度
  27.                 int height1 = 0; //第一个矩形的高度
  28.                
  29.                 int rx2 = 0; //第二个矩形的x坐标
  30.                 int ry2 = 0; //第二个矩形的y坐标
  31.                 int width2 = 0; //第二个矩形的宽度
  32.                 int height2 = 0; //第二个矩形的高度
  33.                
  34.                 sop("请输入第一个矩形的x坐标(按回车键结束):");
  35.                 rx1 = getInt();
  36.                 sop("请输入第一个矩形的y坐标(按回车键结束):");
  37.                 ry1 = getInt();
  38.                 sop("请输入第一个矩形的宽度(按回车键结束):");
  39.                 width1 = getInt();
  40.                 sop("请输入第一个矩形的高度(按回车键结束):");
  41.                 height1 = getInt();
  42.                 sop("\n");
  43.                
  44.                 sop("请输入第二个矩形的x坐标(按回车键结束):");
  45.                 rx2 = getInt();
  46.                 sop("请输入第二个矩形的y坐标(按回车键结束):");
  47.                 ry2 = getInt();
  48.                 sop("请输入第二个矩形的宽度(按回车键结束):");
  49.                 width2 = getInt();
  50.                 sop("请输入第二个矩形的高度(按回车键结束):");
  51.                 height2 = getInt();
  52.                
  53.                 int left1 = rx1 - width1/2; //矩形一的左下角的x坐标,确定矩形一最左边
  54.                 int right1 = rx1 + width1/2; //矩形一的右上角的x坐标,确定矩形一最右边
  55.                 int up1 = ry1 + height1/2; //矩形一的右下角的y坐标,确定矩形一最高点
  56.                 int down1 = ry1 - height1/2; //矩形一的左下角的y坐标,确定矩形一最低点
  57.                
  58.                 int left2 = rx2 - width2/2; //矩形二的左下角的x坐标,确定矩形二最左边
  59.                 int right2 = rx2 + width2/2; //矩形二的右上角的x坐标,确定矩形二最右边
  60.                 int up2 = ry2 + height2/2; //矩形二的右下角的y坐标,确定矩形二最高点
  61.                 int down2 = ry2 - height2/2; //矩形二的左下角的y坐标,确定矩形二最低点
  62.                
  63.                 //判定第二个矩形是否在第一个矩形内
  64.                 if(left1 <= left2 && right1 >= right2 && up1 >= up2 && down1 <= down2){
  65.                         sop("第二个矩形在第一个矩形内。");
  66.                         return;
  67.                 }
  68.                 //判定第二个矩形和第一个矩形是否没有交集
  69.                 else if(right1 <= left2 || left1 >= right2 || down1 >= up2 || up1 <= down2){
  70.                         sop("第二个矩形和第一个矩形没有交集。");
  71.                         return;
  72.                 }
  73.                 else
  74.                         sop("第二个矩形和第一个矩形有交集。");               
  75.         }
  76. }
复制代码

作者: 电玩    时间: 2013-5-10 15:59
long 发表于 2013-5-10 13:45
不难啊,我帮楼主做。

谢谢大侠!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2