Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача: Центр тяжести
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
ipu
Помогите с задачей: Центр тяжести. Система из n материальных точек в пространстве задана с помощью последовательности действительных чисел x1, y1, z1, p1,; x2, y2, z2, p2 … xn, yn, zn, pn. Где xi, yi, zi – координаты i-точки, pi-ее вес. (i =1,2…n). Получить координаты центра тяжести системы. Проверить правильность результата, определив суммарный момент вращения.
Заранее спасибо, особенно интересует суммарный момент вращения
ipu
Помогите плиииизз!
volvo
Координаты центра тяжести в системе материальных точек:

Если координаты и масса точек заданы так:

Код

Var
 x, y, z: Array[1 .. n] Of Real;
 p: Array[1 .. n] Of Real;


то координаты центра тяжести вычисляются:

Код

sx := 0; sy := 0; sz := 0; sm := 0;
for i := 1 to n Do
 Begin
   sx := sx + x[i]*p[i];
   sy := sy + y[i]*p[i];
   sz := sz + z[i]*p[i];
   sm := sm + p[i];
 End;

{ Сам центр тяжести: }
centerX := sx/sm;
centerY := sy/sm;
centerZ := sz/sm;


... а дальше - просто переносишь начало координат в центр тяжести, и проверяешь, равна ли нулю сумма всех произведений вектора расстояния от центра до каждой точки на скаляр массы в этой точке. blink.gif
volvo
Решение выглядит так:


Const
  nPoints = 4;

{ Допустим, что данные хранится в массиве 
(также можно осуществить ввод из файла) }
Const
  stream: Array[1 .. 4 * nPoints] Of Real =
  (*   X    Y    Z    p   *)
    ( 1.0, 1.0, 1.0, 2.0,
      5.0, 1.0, 1.0, 1.5,
      5.0, 5.0, 1.0, 2.5,
      1.0, 5.0, 1.0, 2.75 );

Var
  i: Integer;
  x, y, z, p: Array[1 .. nPoints] Of Real;
  sx, sy, sz, sm: Real;

  centerx, centery, centerz: Real;
  momentx, momenty, momentz: Real;
Begin
  { Подготовим данные к более удобному использованию }
  For i := 1 To nPoints Do
    Begin
      x[i] := stream[Pred(i)*nPoints + 1];
      y[i] := stream[Pred(i)*nPoints + 2];
      z[i] := stream[Pred(i)*nPoints + 3];
      p[i] := stream[Pred(i)*nPoints + 4];
    End;

  { Подсчет сумм для вычисления центра тяжести }
  sx := 0; sy := 0; sz := 0; sm := 0;
  for i := 1 to nPoints Do
   Begin
     sx := sx + x[i]*p[i];
     sy := sy + y[i]*p[i];
     sz := sz + z[i]*p[i];
     sm := sm + p[i];
   End;

  { координаты самого центра тяжести }
  centerx := sx/sm;
  centery := sy/sm;
  centerz := sz/sm;

  WriteLn( 'mass center: (',
    centerx:5:2, centery:5:2, centerz:5:2, ')' );

  momentx := 0.0; momenty := 0.0; momentz := 0.0;
  {сумма моментов вращения - }
  For i := 1 To nPoints Do
    Begin
      momentx := momentx + (centerx - x[i]) * p[i];
      momenty := momenty + (centery - y[i]) * p[i];
      momentz := momentz + (centerz - z[i]) * p[i];
    End;

{ при правильно рассчитанном центре тяжести суммарный
момент вращения должен быть нулевым }
  WriteLn( 'moment : (',
    momentx:5:2, momenty:5:2, momentz:5:2, ')' );
End.

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.