Помогите с задачей: Центр тяжести. Система из n материальных точек в пространстве задана с помощью последовательности действительных чисел x1, y1, z1, p1,; x2, y2, z2, p2 … xn, yn, zn, pn. Где xi, yi, zi – координаты i-точки, pi-ее вес. (i =1,2…n). Получить координаты центра тяжести системы. Проверить правильность результата, определив суммарный момент вращения. Заранее спасибо, особенно интересует суммарный момент вращения
ipu
22.10.2004 21:47
Помогите плиииизз!
volvo
22.10.2004 22:48
Координаты центра тяжести в системе материальных точек:
Если координаты и масса точек заданы так:
Код
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;
... а дальше - просто переносишь начало координат в центр тяжести, и проверяешь, равна ли нулю сумма всех произведений вектора расстояния от центра до каждой точки на скаляр массы в этой точке.
volvo
23.10.2004 5:23
Решение выглядит так:
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 := 1To nPoints DoBegin
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 := 1to nPoints DoBegin
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 := 1To nPoints DoBegin
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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.