Tutaq ki, düzbucaqlıların koordinatları aşağıdakı kimi verilib:
(x_1, y_1) - (x_2, y_2): birinci düzbucaqlı, x_1 < x_2, y_1 < y_2,
(x_3, y_3) - (x_4, y_4): ikinci düzbucaqlı, x_3 < x_4, y_3 < y_4
Hər iki başlanğıc düzbucaqlını tam əhatə edən minimal ölçülü düzbucaqlını nəzərdən keçirək. Onun qarşı bucaqlarını (minx, miny) və (maxx, maxy) kimi işarə edək. Onda:
minx = min(x_1, x_3), miny = min(y_1, y_3),
maxx = max(x_2, x_4), maxy = max(y_2, y_4)
Əhatə edən düzbucaqlının ölçüləri bərabərdir:
length = maxx - minx,
width = maxy - miny
Hər iki düzbucaqlının kvadratla tam əhatə oluna bilməsi üçün kvadratın tərəfi həm length-dən, həm də -dən kiçik olmamalıdır. Buna görə minimal kvadrat otlağın tərəfinin uzunluğu bu iki kəmiyyətin maksimumuna bərabərdir:
Misal
İki başlanğıc düzbucaqlını nəzərdən keçirək:
birinci düzbucaqlının aşağı sol bucağı , yuxarı sağ bucağı -dir,
ikinci düzbucaqlının aşağı sol bucağı , yuxarı sağ bucağı -dır
Nəticə düzbucaqlısının sərhədlərini hesablayaq:
minx = min(6, 1) = 1, miny = min(6, 8) = 6,
maxx = max(8, 4) = 8, maxy = max(8, 9) = 9
Əhatə edən düzbucaqlının ölçüləri bərabərdir:
length = 8 - 1 = 7,
width = 9 - 6 = 3
Əhatə edən kvadratın tərəfinin uzunluğu olacaq:
Deməli, minimal əhatə edən kvadratın sahəsi 7^2 = 49-a bərabərdir.
Alqoritmin realizasiyası
Əhatə edən düzbucaqlının sərhədlərini ilkinləşdirək. Koordinatlar -dan -a qədər diapazonda olduğundan, ilkin qiymətləri aşağıdakı kimi təyin etmək olar:
minx = 10; maxx = 0; miny = 10; maxy = 0;İki başlanğıc düzbucaqlının koordinatlarını oxuyuruq. Hər düzbucaqlı üçün əhatə edən düzbucaqlının sərhədlərini yeniləyirik.
for (i = 0; i < 2; i++)
{
scanf("%d %d %d %d", &a1, &b1, &a2, &b2);
if (a1 < minx) minx = a1;
if (a2 > maxx) maxx = a2;
if (b1 < miny) miny = b1;
if (b2 > maxy) maxy = b2;
}Əhatə edən düzbucaqlının uzunluğunu və enini hesablayırıq.
l = maxx - minx;
w = maxy - miny;Bu düzbucaqlını kvadratla əhatə etmək üçün kvadratın tərəfi onun həm uzunluğundan, həm də enindən kiçik olmamalıdır. Buna görə iki kəmiyyətdən böyüyünü seçirik.
len = (l > w) ? l : w;Kvadratın sahəsini hesablayırıq və cavabı çap edirik.
area = len * len;
printf("%d\n", area);