La problema asta nu ai nevoie de C. Ci de geometrie. Am uitat aproape complet geometrie, dar sa vad daca imi aduc aminte.
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;
}