Помогите с задачей: Центр тяжести. Система из 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 := 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;
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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.