Bu, Java Programlama - Kapsamlı Sürüme Giriş kitabının 3.28. Kod, iki dikdörtgenin girintili olup olmadığını, birinin diğerinin içinde olup olmadığını ve birinin diğerinin dışında olup olmadığını test eder. Bu koşulların hiçbiri karşılanmazsa, bu ikisi birbiriyle çakışır.
** 3.28 (Geometri: iki dikdörtgen) Kullanıcıdan iki dikdörtgenin merkezini x-, y-koordinatlarını, genişliğini ve yüksekliğini girmesini isteyen ve ikinci dikdörtgenin ilk içinde mi yoksa birinci dikdörtgenle mi çakıştığını belirleyen bir program yazın, Şekil 3.9'da gösterildiği gibi. Programınızı tüm durumları kapsayacak şekilde test edin. İşte örnek çalışmalar:
R1'in merkez x-, y-koordinatlarını, genişliğini ve yüksekliğini girin: 2.5 4 2.5 43 r2'nin merkez x-, y-koordinatlarını, genişliğini ve yüksekliğini girin: 1.5 5 0.5 3 r2 r1'in içinde
R1'in orta x-, y-koordinatlarını, genişliğini ve yüksekliğini girin: 1 2 3 5.5 r2'nin orta x-, y-koordinatlarını, genişliğini ve yüksekliğini girin: 3 4 4.5 5 r2 r1 ile çakışıyor
R1'in orta x-, y-koordinatlarını, genişliğini ve yüksekliğini girin: 1 2 3 3 r2'nin orta x-, y-koordinatlarını, genişliğini ve yüksekliğini girin: 40 45 3 2 r2 r1 ile çakışmaz
import java.util.Scanner;
public class ProgrammingEx3_28 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out
.print("Enter r1's center x-, y-coordinates, width, and height:");
double x1 = input.nextDouble();
double y1 = input.nextDouble();
double w1 = input.nextDouble();
double h1 = input.nextDouble();
w1 = w1 / 2;
h1 = h1 / 2;
System.out
.print("Enter r2's center x-, y-coordinates, width, and height:");
double x2 = input.nextDouble();
double y2 = input.nextDouble();
double w2 = input.nextDouble();
double h2 = input.nextDouble();
w2 = w2 / 2;
h2 = h2 / 2;
// Calculating range of r1 and r2
double x1max = x1 + w1;
double y1max = y1 + h1;
double x1min = x1 - w1;
double y1min = y1 - h1;
double x2max = x2 + w2;
double y2max = y2 + h2;
double x2min = x2 - w2;
double y2min = y2 - h2;
if (x1max == x2max && x1min == x2min && y1max == y2max
&& y1min == y2min) {
// Check if the two are identicle
System.out.print("r1 and r2 are indentical");
} else if (x1max <= x2max && x1min >= x2min && y1max <= y2max
&& y1min >= y2min) {
// Check if r1 is in r2
System.out.print("r1 is inside r2");
} else if (x2max <= x1max && x2min >= x1min && y2max <= y1max
&& y2min >= y1min) {
// Check if r2 is in r1
System.out.print("r2 is inside r1");
} else if (x1max < x2min || x1min > x2max || y1max < y2min
|| y2min > y1max) {
// Check if the two overlap
System.out.print("r2 does not overlaps r1");
} else {
System.out.print("r2 overlaps r1");
}
}
}