本系列博客習題來自《算法(第四版)》培遵,算是本人的讀書筆記浙芙,如果有人在讀這本書的,歡迎大家多多交流籽腕。為了方便討論嗡呼,本人新建了一個微信群(算法交流),想要加入的皇耗,請?zhí)砑游业奈⑿盘枺簔hujinhui207407 謝謝南窗。另外,本人的個人博客 http://www.kyson.cn 也在不停的更新中郎楼,歡迎一起討論
知識點
- Interval2D的實現(xiàn)
- 長方形的繪制
題目
1.2.3 編寫一個Interval2D的用例万伤,從命令行接受參數(shù)N、min和max呜袁。生成N個隨機的2D間隔敌买,其寬度和高均勻地分布在單位正方形中的min和max之間。用StdDraw畫出它們并打印出相交的間隔對的數(shù)量以及有包含關系的間隔對數(shù)量阶界。
1.2.3 Write an Interval2D client that takes command-line arguments N,min,and max and generates N random 2D intervals whose width and height are uniformly distributed between min and max in the unit square. Draw them on StdDraw and print the number of pairs of intervals that intersect and the number of intervals that are contained in one another.
分析
StdDraw庫
又看到我們可愛的StdDraw庫了虹钮,之前我們已經(jīng)在文章
算法練習(13):隨機連接(1.1.31)中學會了畫圓
算法練習(14):直方圖(1.1.32)中學習了畫矩形。
這次我們還是繪制矩形膘融,只是不需要填充芙粱。這里不多做介紹了。
Random庫
題目要求我們隨機生成2D間隔氧映,所以我們還需要使用Random庫春畔,這個庫也是我們的老朋友了,如圖岛都,要生成
min
到max
之間的隨機數(shù)律姨,可以使用方法StdRandom.uniform(min, max);
答案
public class Interval2D {
public Interval1D x;
public Interval1D y;
public Interval2D(Interval1D tx, Interval1D ty) {
this.x = tx;
this.y = ty;
}
/*
* 包含
*/
public boolean contains(Point2D p) {
if (this.x.contains(p.x) && this.y.contains(p.y) ) {
return true;
}
return true;
}
public double width() {
return x.length();
}
public double height() {
return y.length();
}
/***
* 生成一個隨機2D間隔,該間隔的長和寬都位于min和max之間
* @param min
* @param max
* @return
*/
public static Interval2D ramdomInterval2D(double min,double max) {
double xMin = StdRandom.uniform(min, max);
double xMax = StdRandom.uniform(min, max);
double yMin = StdRandom.uniform(min, max);
double yMax = StdRandom.uniform(min, max);
Interval1D interval1d1 = new Interval1D(xMin, xMax);
Interval1D interval1d2 = new Interval1D(yMin, yMax);
Interval2D interval2d = new Interval2D(interval1d1, interval1d2);
return interval2d;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
double min = 0.3;
double max = 0.8;
int N = 15;
for (int i = 0; i < N; i++) {
Interval2D interval2d = ramdomInterval2D(min, max);
StdDraw.rectangle(interval2d.x.lo, interval2d.y.lo, interval2d.width() / 2, interval2d.height() / 2);
}
}
演示結(jié)果
視頻講解
代碼索引
廣告
我的首款個人開發(fā)的APP壁紙寶貝上線了臼疫,歡迎大家下載线召。