Форум программистов, компьютерный форум CyberForum.ru

Изображение физического маятника - C++

Восстановить пароль Регистрация
 
Timoshka_
 Аватар для Timoshka_
2 / 2 / 0
Регистрация: 30.10.2010
Сообщений: 84
24.12.2011, 23:10     Изображение физического маятника #1
здравствуйте, есть исходник на делфи программы по изображению физического маятника, какими способами ее можно реализовать на с++?





Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Spin, ExtCtrls, Buttons, TeEngine, Series, TeeProcs, Chart;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label3: TLabel;
    Label5: TLabel;
    Shape1: TShape;
    Timer1: TTimer;
    Shape2: TShape;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button2: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
 
 
const
  g = 9.81;  // Скорость свободного падения
  koef = 500;    // коэф ускорения
 
  dt = 0.02;   // приращь t
 
var
  Form1: TForm1;
  l0 : extended;     //длина нити
  f0 : extended;     //нач угол маятника
  k : extended;      //коэф затухания
  amp : extended;
  omeg : extended;
  f : extended;        // угол маятника в момент t (наверное
  v : extended;         //скорость
  a : extended;         //ускорение
  x0,y0 : extended;    //полож. отвеса
  x,y : extended;      //полож маятника
  mu : extended;
  t : extended;       //щётчик приращения
  l : extended;        //вроде амплитуда
 
 
 
implementation
 
uses Unit2;
 
{$R *.DFM}
 
 
Procedure DrawMayatnik;  // объявляем процедуру
begin
Form1.Canvas.Pen.Color:=Form1.Color;   //выбираем цвет каким будем рисовать на канвасе формы   (цвет формы)
Form1.Canvas.MoveTo(round(x0),round(y0));  //перемещаемся в координаты
Form1.Canvas.LineTo(round(x),round(y));     //рисуем
 
Form1.Shape1.Repaint;    //перерисовываем компонент shape1
Form1.Shape2.Repaint;    //перерисовываем компонент shape2
 
y := round( y0 + l*koef*cos(f) );  //высчитываем координату y
x := round( x0 + l*koef*sin(f) );   //высчитываем координату x
 
Form1.Shape2.Top := round(y - Form1.Shape2.Height/2);  //перемещаем компонент shape2 по вертикали в координату y
Form1.Shape2.Left := round(x - Form1.Shape2.Width/2);  //перемещаем компонент shape2 по горизонтали в координату x
 
Form1.Canvas.Pen.Color:=clBlack;     //выбираем цвет каким будем рисовать на канвасе формы (чёрный цвет)
Form1.Canvas.MoveTo(round(x0),round(y0));  //перемещаемся в координаты
Form1.Canvas.LineTo(round(x),round(y));  //рисуем
end;
//------------------------------------------------------------------------------
procedure TForm1.Timer1Timer(Sender: TObject);
begin
t := t + dt;    //приращи t
f := f + v*dt + a*dt*dt/2;  //рассчитываем угол маятника
v := v + a*dt;   //скорость+ ускорение и умножить на коэффицент приращения
a := -2*k*v - ( 1 + mu*cos(omeg*t) ) * sin(f);  //рассчитываем ускорение
l := l0 + amp * cos(omeg*t);          //по ходу рассчитываем амплитуду
form2.series1.AddXY(x,a);   // рисуем график в компоненте
DrawMayatnik;                      //перерисовываем график
end;
//------------------------------------------------------------------------------
 
 
 
procedure TForm1.Button2Click(Sender: TObject);
begin
 
  if timer1.Enabled=false then    //проверяем запущен ли таймер
  begin
  timer1.Enabled:=true;        //запускаем таймер
  button2.Caption:='запущено';       //меняем название кнопки
    //длина подвеса
    l0 := strtofloat(edit1.Text) / 1000;
    //нач. угол
    f0 := strtofloat(edit2.Text) * pi / 180;
 
    //коэф. затухания
    k := strtofloat(edit3.Text) / 100;
 
    amp := 5 / 1000;    //устанавливаем значение
 
    t := 0;        //обнуляем счётчик приращения
    l := l0;          //амп =10
    f := f0;         // устанавливаем угол маятника
    v := 0;            //устанавливаем скорость = 0
    mu := amp / 10;         //вычисление
    a := - ( 1 + mu*cos(t) ) * sin(f);  //устанавливаем ускорение
    //series1.AddXY(x,a);
 
    x0 := Shape1.Left + round(Shape1.Width/2);   //устанавливаем x0 координаты положения компонента shape1
    y0 := Shape1.Top + round(Shape1.Height/2);  //устанавливаем y0 координаты положения компонента shape1
 
    // Рисуем маятник
    DrawMayatnik;
 
    Timer1.Enabled:=true; //включаем таймер
 
  end
  else
  if timer1.Enabled=true then   //проверяем запищен ли таймер
  begin
  timer1.Enabled:=false;          //выключаем таймер
  button2.Caption:='остановлено';  //меняем название кнопки
  end;
 
end;
 
end.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2011, 23:10     Изображение физического маятника
Посмотрите здесь:

Движение маятника в Borland 3.1 C++
C++ нарисовать изображение
Как узнать, какому протоколу физического (нижнего) уровня принадлежит фрейм (ETHERNET_FRAME) C++
C++ Изображение маятника
Вычислить период колебания маятника длины L C++
Изображение в структуре C++
Изображение колеблющегося маятника C++
Стабилизация обратного маятника на тележке(метод Рунге-Кутта) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 19:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru