#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <conio.h>
const int M = 10;
struct ball // тип вводимых данных о шаре: координаты его центра и радиус
{
float x;
float y;
float z;
float rad;
};
// расстояние между двумя центрами
float r0(ball a1, ball a2)
{
float r;
r = sqrt(fabs((a1.x - a2.x)*(a1.x - a2.x) + (a1.y - a2.y)*(a1.y - a2.y) + (a1.z - a2.z)*(a1.z - a2.z)));
return (r);
}
// построение направляющего вектора прямой, содержащей 2 заданные точки
ball vect(ball o1, ball o2)
{
ball e1;
float R;
R = r0(o1, o2); // нормировка вектора
e1.x = (o2.x - o1.x) / R;
e1.y = (o2.y - o1.y) / R;
e1.z = (o2.z - o1.z) / R;
e1.rad = 0;
return e1;
}
void main()
{
int n,i,j;
ball BALLS[M],A1, A2, v0, res;
float R, max;
printf("n = ");
scanf("%i", &n);
printf("\n");
max = -1;
for ( i = 0; i < n; i++)
{
scanf_s("%f%f%f%f", &BALLS[i].x, &BALLS[i].y, &BALLS[i].z, &BALLS[i].rad);
}
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
if (BALLS[i].rad + BALLS[j].rad + r0(BALLS[i], BALLS[j]) > max)
{
max = BALLS[i].rad + BALLS[j].rad + r0(BALLS[i], BALLS[j]);
A1 = BALLS[i];
A2 = BALLS[j];
}
if (n == 1) printf("RESULT: %.3f %.3f %.3f %.3f\n", BALLS[0].x, BALLS[0].y, BALLS[0].z, BALLS[0].rad);
else
{
R = r0(A1, A2);
v0.rad = 0;
v0.x = A2.x - A1.x; v0.x = v0.x / R;
v0.y = A2.y - A1.y; v0.y = v0.y / R;
v0.z = A2.z - A1.z; v0.z = v0.z / R;
printf("v0: %.3f %.3f %.3f \n", v0.x, v0.y, v0.z);
printf("R: %.3f \n", R);
ball v1, v2;
v1.x = A1.x + v0.x*A1.rad; v1.y = A1.y + v0.y*A1.rad; v1.z = A1.z + v0.z*A1.rad;
if (r0(v1, A2) < R)
{
v1.x = A1.x - v0.x*A1.rad; v1.y = A1.y - v0.y*A1.rad; v1.z = A1.z - v0.z*A1.rad;
};
v2.x = A2.x + v0.x*A2.rad; v2.y = A2.y + v0.y*A2.rad; v2.z = A2.z + v0.z*A2.rad;
if (r0(v2, A1) < R)
{
v2.x = A2.x - v0.x*A2.rad; v2.y = A2.y - v0.y*A2.rad; v2.z = A2.z - v0.z*A2.rad;
};
res.rad = r0(v1, v2) / 2;
res.x = v1.x + (v2.x - v1.x) / 2;
res.y = v1.y + (v2.y - v1.y) / 2;
res.z = v1.z + (v2.z - v1.z) / 2;
printf("RESULT: %.3f %.3f %.3f %.3f\n", res.x, res.y, res.z, res.rad);
}
getch();
}
Be the first to comment
You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.