Рассчитать параметры тела M, в зависимости от силы F и времени t - C (СИ)

Узнай цену своей работы

Формулировка задачи:

В общем задачка такая: Уравнение движения материального тела характеризуется его скоростью и ускорением s=s0+v0*t+(a*t^2)/2 Согласно основных законов механики ускорение определяется массой приложенной к нему силы a=F/m Пока на тело действует сила, оно движется ускоренно, а при исчезновении F продолжает двигатся с постоянной скоростью или останется неподвижным(при v=0). Заметим что масса тела является скалярной величиной, а положение, скорость, ускорение и сила векторные величины. При этом вдоль каждого направления x и y уравнения будут одинаковыми с учетом соответствующих проекций векторов. Разработать две структуры Vect{x,y} и материальное тело Newton{double m, Vect Poz, Vect v, Vect a} а также функцию void Move{Newton M, Vect F, double t), рассчитывающее параметры тела M, в зависимости от силы F и времени t. При этом, внутри функции уравнение распадутся на три оператора по каждой проекции ax=Fx/m vx=v0+a*t/2 x=x+vx*t Вызывая в цикле по времени нашу функцию Move можно смоделировать движение нашего тела даже с изменяющимися во времени силами. Смоделировать движение тела под действием силы F под углом к горизонту и под действием силы тяжести. вот некоторые наработки: Структура Vect:
typedef struct
{
float x,y;
}vect;
Материальное тело Newton:
typedef struct
{
float m;
vect Poz, v, a;
}newton;
Функция Move:
void move(newton M,vect F, int t){
float x,y,m;
vect a,v;
M.a.x=F.x/m;
M.a.y=F.y/m;
M.v.x+=(M.a.x*t)/2;
M.v.y+=(M.v.y*t)/2;
M.Poz.x+=M.v.x*t;
M.Poz.y+=M.v.y*t;
}
Ребят жду любые соображения по этому поводу:"Смоделировать движение тела под действием силы F под углом к горизонту и под действием силы тяжести."

Решение задачи: «Рассчитать параметры тела M, в зависимости от силы F и времени t»

textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
#define  G      9.8
typedef struct
{
    float x,y;
}vect;
 
typedef struct
{
    float m;
    vect Poz, v, a;
    float time;
}newton;
 
newton Gravity(newton& body, float timeStep)
{ // при падении с высоты без наличия сторонних сил
    // тело падает строко параллельно оси У и коодинаты по Х не меняются
    // рассчитываем только для оси У
    // не отслеживаем момент приземления (при большрм шаге времени, можем уйти подземлю)
    float x,y,m;
    vect a,v;
  body.v.y+=-G*timeStep/2;
    body.Poz.y+=body.v.y*timeStep;
    body.time+=timeStep;
    return body;
}
 
void PrintBody(newton body)
{
    printf("\nBody: ");
    printf("time:%2.2f; x:%2.2f; y:%2.2f; Vx:%2.2f; Vy:%2.2f;",
        body.time, body.Poz.x, body.Poz.y, body.v.x, body.v.y); 
}
 
 
int main()
{
    newton body;
    printf("Move body under gravity:\n");
    printf("Enter mass of a body: "); scanf("%f",&body.m);
    printf("Enter coordinate body:\n");
    printf("x: "); scanf("%f",&body.Poz.x);
    printf("y: "); scanf("%f",&body.Poz.y);
    // считаем, что кроме силы тяжести другие силы не дейсвуют
    // рассматриваем самый простой случай: падение с высоты, с начальной нулевой
    // скоростью.
    body.v.x=0; body.v.y=0;
    body.a.x=0; body.a.y=0;
    body.time=0;    //  Считаем, что тело отпускают в момент времени 0
 
    while(body.Poz.y>=0) // пока коодината тела по оси У больше нуля
    {
        Gravity(body, 0.2);
        PrintBody(body);
        getch();
    }
 
    printf("\n");   system("PAUSE");
    return 0;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы: , , .
  2. Определяем константу G равную 9.8.
  3. Создаем структуру vect, которая содержит два поля: x и y.
  4. Создаем структуру newton, которая содержит пять полей: m, Poz, v, a и time.
  5. Определяем функцию Gravity, которая рассчитывает движение тела под действием силы тяжести.
  6. Определяем функцию PrintBody, которая выводит информацию о теле на экран.
  7. В функции main() создаем объект body и инициализируем его начальными значениями.
  8. Задаем вопрос пользователю о вводе массы тела и его координат.
  9. Используем цикл while для отслеживания изменения координаты тела по оси У.
  10. Внутри цикла вызываем функцию Gravity и функцию PrintBody.
  11. Проверяем условие выхода из цикла while.
  12. Завершаем программу с помощью функции system(PAUSE).
  13. Возвращаем 0, чтобы указать, что программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы