Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача: Центр тяжести
Форум «Всё о Паскале» > 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.

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