Alqoritm Analizi
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.
– dairələrin mərkəzləri arasındakı məsafənin kvadratıdır. Onda:
Dairələr xarici toxunurlarsa, .
Dairələrin daxili toxunma nöqtəsi varsa, .
Dairələr ümumi nöqtələrə malik deyillər və biri digərinin içində deyilsə, .
Dairələr kəsişmirlər, lakin biri digərinin içindədirsə, .
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);