結城浩さんの本に載っていたプログラムです。
ですが、説明がわかりにくくていまいち処理がわからなかったので
質問させていただきました。
どうやら、X軸とY軸がありY軸は下に行けばいくほど数字が大きくなる。
X軸は右に行けばいくほど大きくなる。座標上にある、二つの長方形の重なりあう部分の座標を求めるプログラムのようです。(イメージとしては、下に添付してある画像のような感じになるようです。)
質問としては一つです。
プログラム中のこの部分なのですが、おそらく「長方形の座標を示している」行であると思います。
a = new Rectangle(0, 0, 20, 10);
b = new Rectangle(5, 5, 20, 10);
c = new Rectangle(20, 10, 20, 10);
d = new Rectangle(-10, -20, 100, 200);
e = new Rectangle(21, 11, 20, 10);
その後の処理としては、aとb→c→d→eというようにそれぞれ比較していっているのもなんとなくわかります。
ですが、しっかり解説されていなかったので、この4つの数字がどのように座標を示しているのかよくわかりませんでした。
よろしくお願いします。
class Rectangle {
final int INITIAL_WIDTH = 10;
final int INITIAL_HEIGHT = 20;
int width;
int height;
int x;
int y;
Rectangle() {
width = INITIAL_WIDTH;
height = INITIAL_HEIGHT;
x = 0;
y = 0;
}
Rectangle(int width, int height) {
this.width = width;
this.height = height;
this.x = 0;
this.y = 0;
}
Rectangle(int x, int y, int width, int height) {
this.width = width;
this.height = height;
this.x = x;
this.y = y;
}
void setLocation(int x, int y) {
this.x = x;
this.y = y;
}
void setSize(int width, int height) {
this.width = width;
this.height = height;
}
public String toString() {
return "[" + x + ", " + y + ", " + width + ", " + height + "]";
}
Rectangle intersect(Rectangle r) {
int sx = Math.max(this.x, r.x);
int sy = Math.max(this.y, r.y);
int ex = Math.min(this.x + this.width, r.x + r.width);
int ey = Math.min(this.y + this.height, r.y + r.height);
int newwidth = ex - sx;
int newheight = ey - sy;
if (newwidth > 0 && newheight > 0) {
return new Rectangle(sx, sy, newwidth, newheight);
} else {
return null;
}
}
public static void main(String[] args) {
Rectangle a, b, c, d, e;
a = new Rectangle(0, 0, 20, 10);
b = new Rectangle(5, 5, 20, 10);
c = new Rectangle(20, 10, 20, 10);
d = new Rectangle(-10, -20, 100, 200);
e = new Rectangle(21, 11, 20, 10);
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
System.out.println("d = " + d);
System.out.println("e = " + e);
System.out.println("a と a の重なり = " + a.intersect(a));
System.out.println("a と b の重なり = " + a.intersect(b));
System.out.println("a と c の重なり = " + a.intersect(c));
System.out.println("a と d の重なり = " + a.intersect(d));
System.out.println("a と e の重なり = " + a.intersect(e));
}
}
No.1ベストアンサー
- 回答日時:
a = new Rectangle(0, 0, 20, 10);
は座標(0,0)を基点とした幅20高さ10の長方形。
b = new Rectangle(5, 5, 20, 10);
は座標(5,5)を基点とした幅20高さ10の長方形。
てことよ。
メソッドintersectは
自分自身と、引数に渡された長方形の
重なり合っている部分の長方形の
基点と幅・高さを算出しているわ。
そしてtoStringで基点の座標と幅・高さを出力している。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- その他(プログラミング・Web制作) Pythonによる物理の斜方投射の位置座標表示について 2 2023/06/05 12:46
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- その他(プログラミング・Web制作) 物理の斜方投射で目盛りに数値を入れたい 2 2023/05/27 06:32
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- その他(プログラミング・Web制作) 物理の斜方投射の目盛り線とx軸、y軸の追加について 3 2023/05/26 21:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メンバ関数のconst
-
JUnit4のアノテーションについて
-
Javaの基礎のプログラム
-
画像が表示されません。
-
Dateクラスへ格納
-
初心者です。JScrollPane につ...
-
Java 初心者 int型の取り扱い方
-
eclipseに記述したjavaファイル...
-
C# 半角カナの文字化けについて
-
【JAVAエラー】互換性のない型...
-
Javaで文字と数字が混ざったも...
-
ハートマークを表示するには?
-
0~9まで入力させ、前に入力さ...
-
System.out.printlnの出力先
-
配列への文字列の格納について
-
C言語のポインターに関する警告
-
JSPでDBからデータ読み込みブラ...
-
パソコンキーボードで時分秒を...
-
nullcline
-
エクセルの配列定数について教...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
Javaで電卓を作りたい
-
式の型は配列型で int に解決済...
-
javaでカレンダー作成
-
java spring でエラーが出て困...
-
JAVAでCの関数ポインタのような...
-
JAVA エラー 式の開始が不正で...
-
6桁の数字を重複なしでランダム...
-
c# デリゲート関連の命名について
-
C++からC#のdllを参照する際、...
-
メインが含まれていません
-
(Swing)JTextFieldを半角のみ入...
-
DataSet(DataTable)の使い方
-
三目並べ(Tick-Tack-Toe)をJav...
-
JUnit4のアノテーションについて
-
初心者ですが、今javaで簡単な...
-
classを使って座標軸を求めるコ...
-
javaでcsvファイル読込時の改行...
-
C#で実行時にメソッドの返り値...
-
Java 初心者 int型の取り扱い方
おすすめ情報