Рассчитать параметры тела 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:
Материальное тело Newton:
Функция Move:
Ребят жду любые соображения по этому поводу:"Смоделировать движение тела под действием силы F под углом к горизонту и под действием силы тяжести."
typedef struct { float x,y; }vect;
typedef struct { float m; vect Poz, v, a; }newton;
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; }
Решение задачи: «Рассчитать параметры тела 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; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
, , . - Определяем константу G равную 9.8.
- Создаем структуру vect, которая содержит два поля: x и y.
- Создаем структуру newton, которая содержит пять полей: m, Poz, v, a и time.
- Определяем функцию Gravity, которая рассчитывает движение тела под действием силы тяжести.
- Определяем функцию PrintBody, которая выводит информацию о теле на экран.
- В функции main() создаем объект body и инициализируем его начальными значениями.
- Задаем вопрос пользователю о вводе массы тела и его координат.
- Используем цикл while для отслеживания изменения координаты тела по оси У.
- Внутри цикла вызываем функцию Gravity и функцию PrintBody.
- Проверяем условие выхода из цикла while.
- Завершаем программу с помощью функции system(
PAUSE
). - Возвращаем 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д