La problema asta nu ai nevoie de C. Ci de geometrie. Am uitat aproape complet geometrie, dar sa vad daca imi aduc aminte. ![Grin](https://www.craiovaforum.ro/images/smilies/biggrin.gif)
Asa. Si din cate imi aduc aminte, ecuatia cercului este: (X - X0)^2 + (Y - Y0)^2 = R^2.
Unde: X,Y este orice punct de pe cerc (adica, multimea punctelor care descriu cercul); iar X0,Y0 este centrul cercului iar raza este R.
Folosind formula asta, ar trebui sa aflii unde se afla cele 3 puncte: in afara sau in interiorul cercului.
Ca sa te ajut:
ai asa: (x - x0)^2 + (y - y0)^2 - R^2 = 0
Acum iei un punct (x,y). Pentru a afla unde se afla acest punct relativ la cerc aplici ecuatia si daca:
- rezultatul este mai mic decat zero -> punctul se afla in cerc
- rezultatul este mai mare decat zero -> punctul se afla in afara cercului
- rezultatul este egal cu zero (ecuatia) -> punctul se afla pe cerc (defineste cercul).
Cod:
#include <stdio.h>
#include <math.h>
struct point {
int x;
int y;
};
typedef struct point POINT;
struct circle {
int x0;
int y0;
unsigned int r;
};
typedef struct circle CIRCLE;
int whereInCircle(POINT P, CIRCLE C) {
return pow((P.x - C.x0), 2) + pow((P.y - C.y0), 2) - pow(C.r, 2);
}
int main() {
size_t i;
// Circle 1
CIRCLE C1;
// Circle 2 (three points)
POINT P[3];
int status = 0;
printf("Circle 1:");
printf("\n\tX origin: ");
scanf("%d", &C1.x0);
printf("\tY origin: ");
scanf("%d", &C1.y0);
printf("\tRadius: ");
scanf("%d", &C1.r);
int sz = sizeof(P) / sizeof(POINT);
printf("\n\nCircle 2:");
for (i = 0; i < sz; i++) {
printf("\n\tPoint %d: ", i);
printf("\n\t\tX: ");
scanf("%d", &P[i].x);
printf("\t\tY: ");
scanf("%d", &P[i].y);
}
// Now, parse the three points and see where they are relative to Circle 1:
for (i = 0; i < sz; i++) {
if (whereInCircle(P[i], C1) <= 0) {
status++;
}
}
switch (status) {
case 0:
printf("\nThe second circle is outside the first circle");
break;
case 3:
printf("\nThe second circle is inside the first circle");
break;
default:
printf("\nThe second circle is intersecting the first circle");
}
getche();
return 0;
}