IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Задача: Центр тяжести
сообщение
Сообщение #1


Гость






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


Гость






Помогите плиииизз!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Координаты центра тяжести в системе материальных точек:

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

Код

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 -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Решение выглядит так:


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.

 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 18.04.2024 8:20
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name