Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2016, 00:42   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Делфи, моделирование физических процессов. Исходник.

Ребят, всем привет, есть у кого-нибудь любые программы, относящиеся к предмету "физика" с исходным кодом?

Будь то, например, взаимодействие атомов, показ падения тела на объекты различной массы и т.д., главное чтоб была визуализация.

Просто любая программа, сам искал - не нашел
from dark to light)

Последний раз редактировалось Алексей_2012; 15.01.2016 в 00:49.
Алексей_2012 вне форума Ответить с цитированием
Старый 15.01.2016, 04:12   #2
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Вот нашел моделирование броска мяча, только не понял что это за параметры...

Код:
 IsRunning: boolean;
  Radius:    Cardinal=5;  
  k:         single=0.5; 
  R:         single=0.97; 
  m:         single=100;    
  g:         single=9.8; // я написал, но все ускорилось в разы, было 1.3
  fx,fy:     single;      
  x:         single=20;   
  y:         single=300;
вот полный код, достаточно маленький, и какая строчка отвечает за расчет и физику?

Код:
unit Unit1;
 
interface
 
uses
  Windows, Messages, Classes, Controls, Forms, Math;
 
type
  TForm1 = class(TForm)
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  end;
 
var
  Form1:     TForm1;
  IsRunning: boolean;
  Radius:    Cardinal=5;  //ГђГ*äèóñ
  k:         single=0.5;  //ÊîýôôèöåГ*ГІ óïðóãîñòè Г±ГІГҐГ*
  R:         single=0.97; //ÑîïðîòèâëåГ*ГЁГҐ
  m:         single=100;    //Г¬Г*Г±Г±Г*
  g:         single=9.8;  //óñêîðåГ*ГЁГҐ ñâîáîäГ*îãî ГЇГ*äåГ*ГЁГї
  fx,fy:     single;      //Âåêòîð ñèëû
  x:         single=20;   //ÊîîðäèГ*Г*ГІГ» ГІГҐГ«Г*
  y:         single=300;
 
implementation
 
{$R *.dfm}
 
procedure TimerProc(hwnd,uMsg,idEvent,dwTime: LongInt);stdcall;
begin
  BitBlt(Form1.Canvas.Handle,0,0,Form1.Width,Form1.Height,0,0,0,WHITENESS);
  x :=x+fx;
  y :=y+fy;
  fx:=fx*R;
  fy:=fy*R+m*g;
  if Cardinal(round(x)-Radius)>Cardinal(Form1.ClientWidth-Radius*2) then
    fx:=-fx*k;
  if Cardinal(round(y)-Radius)>Cardinal(Form1.ClientHeight-Radius*2) then
    fy:=-fy*k;
  x:=min(max(x,Radius),Form1.ClientWidth-Radius);
  y:=min(max(y,Radius),Form1.ClientHeight-Radius);
  Ellipse(Form1.Canvas.Handle,round(x-Radius),round(y-Radius),round(x+Radius),round(y+Radius));
end;
 
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if not IsRunning then
  begin
    BitBlt(Form1.Canvas.Handle,0,0,Form1.Width,Form1.Height,0,0,0,WHITENESS);
    fx:=(x-unit1.x)*0.1;
    fy:=(y-unit1.y)*0.1;
    MoveToEx(Form1.Canvas.Handle,round(unit1.x),round(unit1.y),0);
    LineTo(Form1.Canvas.Handle,round(x),round(y));
  end;
end;
 
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if IsRunning then
  begin
    KillTimer(Form1.Handle,0);
    unit1.x:=20;
    unit1.y:=300;
  end
  else
    SetTimer(Form1.Handle,0,50,@TimerProc);
  IsRunning:=not IsRunning;
end;
 
end.
Вложения
Тип файла: zip бросок.zip (7.4 Кб, 30 просмотров)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 15.01.2016, 06:15   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,883
По умолчанию

А что тут думать ? Таймерная процедура почти вся отвечает за расчёт, кроме первой и последней строки, это прорисовка. 2 ифки это очень похоже на отражение мяча от стенок, ещё там 2 строки, по сути тоже ифки на функциях min и max - некие ограничения, наверное невылета мяча за форму, следовательно весь расчёт вообще только в 4 строках в начале - приращение координат на текущую дельту и модификация дельты под действием тяжести и сопротивления воздуха (как я понял R). В маусдауне запуск мяча с фикс координат, в маусмуве задание направления (как я понял). Прогу не смотрел, только читнул код из поста.

Где-то видел исходник показа эмуляции эмиссии электронов с электрода на сетку (но там было вроде сложно всё, на опенгле), ещё всякие исходники подвижных механизмов встречаются типа маятников и кривошипов. Но это было давно - и я их также как и любой другой человек просто нагугливал.

Последний раз редактировалось phomm; 15.01.2016 в 06:20.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Моделирование диффузионных процессов nihi Помощь студентам 1 20.03.2013 22:29
Компьютерное моделирование, моделирование физических процессов. (в Excel ) Dytchi Помощь студентам 0 06.02.2012 15:54
Моделирование физических процессов Graff Valdemar Помощь студентам 0 10.04.2010 11:44
Моделирование различных процессов в Excel! Kuzelek Microsoft Office Excel 4 21.12.2009 13:25
Имитационное моделирование процессов управления Altera Общие вопросы Delphi 6 10.06.2009 07:23