Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.40 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<malloc.h>
  4. #include<math.h>
  5.  
  6. //Задание: Задано можество материальных точек, среди них найти такую точку, которая ближе всех расположена к центру тяжести этого множества. Пространство трехмерное.
  7. //Алгоритм решения: сперва по формуле находим центр тяжести в трёхмерном пространстве, затем вычисляя расстояния находим точку, ближайшую к центру тяжести
  8.  
  9.  
  10. float distance(float x1, float y1, float z1, float x2, float y2, float z2)
  11. {
  12. return sqrt((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1) + (z2 - z1)*(z2 - z1));
  13. }
  14. int main()
  15. {
  16. int N; //количество точек
  17. printf("Введите количество точек N:\n");
  18. scanf("%d", &N);
  19. float *x = malloc(N * sizeof(float));
  20. float *y = malloc(N * sizeof(float));
  21. float *z = malloc(N * sizeof(float));
  22. float *m = malloc(N * sizeof(float));
  23. for (int i = 0; i < N; i++) // x, y, z - это координаты точек, m - масса
  24. {
  25. scanf("%f %f %f %f", &x[i], &y[i], &z[i], &m[i]);
  26. }
  27. float centre_x = 0; // координаты и масса центра:
  28. float centre_y = 0;
  29. float centre_z = 0;
  30. float centre_m = 0;
  31. //float all_m = 0;
  32. for (int i = 0; i < N; i++) { // так как центр масс равен сумме масс исходных точек, то:
  33. centre_m += m[i];
  34. }
  35. for (int i = 0; i < N; i++) //теперь покоординатно вычислим центр масс:
  36. {
  37. centre_x += x[i] * m[i] / (centre_m);
  38. centre_y += y[i] * m[i] / (centre_m);
  39. centre_z += z[i] * m[i] / (centre_m);
  40. }
  41. // Осталось найти точку, ближайшую к центру масс, для этого:
  42. float ax = x[0], ay = y[0], az = z[0];
  43. float mindistance = distance(ax, ay, az, centre_x, centre_y, centre_z);
  44. for (int i = 0; i < N; i++)
  45. if (distance(x[i], y[i], z[i], centre_x, centre_y, centre_z) < mindistance)
  46. {
  47. mindistance = distance(x[i], y[i], z[i], centre_x, centre_y, centre_z);
  48. ax = x[i]; ay = y[i]; az = z[i];
  49. }
  50. printf("%f %f %f\n", centre_x, centre_y, centre_z);
  51. printf("%f %f %f\n", ax, ay, az);
  52. free(x); free(y); free(z); free(m);
  53. return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement