İki dairə#4

İki dairə (Həll təhlili)

Xarici və daxili toxunma variantlarını, həmçinin bir dairənin digərinin içində olma ehtimalını nəzərə almaq lazımdır. Dairələr yalnız öz üst-üstə düşdükləri halda sonsuz sayda kəsişmə nöqtələrinə malikdirlər.

dist^2 = (x_2 - x_1)^2 + (y_2 - y_1)^2 – dairələrin mərkəzləri arasındakı məsafənin kvadratıdır. Onda:

Alqoritmin Tətbiqi

Əvvəlcə, iki kəsişmə nöqtəmiz olduğunu farz edək.

int res = 2;

Giriş məlumatlarını oxuyun.

scanf("%lf %lf %lf %lf %lf %lf", &xx1, &yy1, &r1, &xx2, &yy2, &r2);

Dairələrin mərkəzləri arasındakı məsafənin kvadratını hesablayın.

dist2 = (xx2-xx1)*(xx2-xx1) + (yy2-yy1)*(yy2-yy1);

Dairələrin üst-üstə düşmədiyini yoxlayın.

if ((xx1 == xx2) && (yy1 == yy2) && (r1 == r2)) res = -1; else

İki dairənin xarici toxunma şərtini yoxlayın.

if (fabs((r1 + r2) * (r1 + r2) - dist2) < EPS) res = 1; else

İki dairənin daxili toxunma şərtini yoxlayın.

if (fabs((r1 - r2) * (r1 - r2) - dist2) < EPS) res = 1; else

Dairələrin ümumi nöqtələrə malik olmadığı halları nəzərdən keçirin.

if ((r1 + r2)*(r1 + r2) < dist2 - EPS) res = 0; else
if ((r1 - r2)*(r1 - r2) > dist2 + EPS) res = 0;

Cavabı çap edin. Əgər yuxarıdakı şərtlərdən heç biri ödənmirsə, deməli, iki kəsişmə nöqtəmiz var.

printf("%d\n", res);