• Algs4-1.2.3编写一个Interval2D用例


    1.2.3编写一个Interval2D用例,从命令行接受参数N、min和max。生成N个随机的2D间隔,其宽和高均匀地分布在单位正方形中的min和max之间。用StdDraw画出它们并打印出相关的间隔对的数量以及有包含关系的间隔对数量。
    解:相交是两个矩形区域有共点,包含是指一个矩形在一个矩形内,包含也是相交的一种情况。两个矩形相交并且一个矩形的三个顶点在另一个矩形区域内,那么两个矩形有包含关系。
    图片
    图片
    将下面的代码添加到Interval2D.java文件中,用来获取2D的左上角、左下角、右上角的坐标。
      public Point2D leftTopCorner() {
           return new Point2D(x.min(),y.min());
        }
       
        public Point2D leftBottom(){
            return new Point2D(x.min(),y.max());
        }
       
        public Point2D rightTopCorner(){
            return new Point2D(x.max(),y.min());
        }


    下面的代码用来实现本题要求
    public class Test2
    {
        public static void main(String[] args)
        {
           int N=Integer.parseInt(args[0]);
           double min=Double.parseDouble(args[1]);
           double max=Double.parseDouble(args[2]);
           Interval2D[] inter2dArray=new Interval2D[N];
           //
           double lo;
           double hi;
            //generate interval2D
         for(int i=0;i<N;i++)
           {
              lo=StdRandom.uniform(min,max);
              hi=StdRandom.uniform(lo,max);
              Interval1D x=  new Interval1D(lo,hi);
             //
              lo=StdRandom.uniform(min,max);
              hi=StdRandom.uniform(lo,max);
              Interval1D y=  new Interval1D(lo,hi);
              //
              inter2dArray[i]=new Interval2D(x,y);
              inter2dArray[i].draw();
           }
            //find  intersect and contains
          int intersectCount=0;
          int containCount=0;
           for (int i=0 ;i<N;i++)
               for (int j=i+1;j<N;j++)
                 {
                  //intersect
                  if (inter2dArray[i].intersects(inter2dArray[j]))
                     intersectCount++;
                  //contains: intersect and contains three top point
                    if (
                       (inter2dArray[i].contains(inter2dArray[j].leftTopCorner())  &&
                        inter2dArray[i].contains(inter2dArray[j].leftBottom()) &&
                        inter2dArray[i].contains(inter2dArray[j].rightTopCorner())
                      ) ||
                      (inter2dArray[j].contains(inter2dArray[i].leftTopCorner())  &&
                       inter2dArray[j].contains(inter2dArray[i].leftBottom()) &&
                       inter2dArray[j].contains(inter2dArray[i].rightTopCorner())
                      )
                     )
                     containCount++;
                }
         StdOut.printf("intersectCount=%d,containCount=%d",intersectCount,containCount);             
        }//end main
    }//end class

  • 相关阅读:
    【Java/加解密】将字符串后N位用0覆盖
    【Oracle】使用sqlldr命令行从csv文件获得数据导入Oracle数据库某表中
    【Java/shell】Java使用Runtime和Process调用dos命令
    【Java/shell/Oracle】Java使用Runtime和Process调用sqlldr命令向Oracle数据库某表批量塞入数据
    【依赖】使用Apache的Codec如base64需要引用的依赖
    【Java/FTP】使用apache.commons的FTPClient往FTP服务器上传下载文件
    Dapr云原生应用开发系列7:工作流集成
    rtop – 通过SSH监控远程主机
    2022年区块链影响最大的四个行业
    CentOS Linux 8生命周期结束
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9848817.html
Copyright © 2020-2023  润新知