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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Timoshka_
2 / 2 / 0
Регистрация: 30.10.2010
Сообщений: 84
#1

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

24.12.2011, 23:10. Просмотров 1034. Ответов 0
Метки нет (Все метки)

здравствуйте, есть исходник на делфи программы по изображению физического маятника, какими способами ее можно реализовать на с++?





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     Изображение физического маятника
Посмотрите здесь:

Изображение маятника - C++
Задание: Приложение должно выводить изображение колеблющегося согласно законам физики маятника. Интерфейс приложения должен позволять...

Изображение колеблющегося маятника - C++
Задание. Приложение должно выводить изображение колеблющегося согласно законам физики маятника. Интерфейс приложения должен позволять...

Как узнать, какому протоколу физического (нижнего) уровня принадлежит фрейм (ETHERNET_FRAME) - C++
Пишу снифер на c++(пытаюсь). Создал сокет и перевел его в режим прослушивания. Как из фрейма понять он был отправлен/принят по wifi,...

Движение маятника в Borland 3.1 - C++
Написать программу имитирующую движение(без затухания) маятника. Помогите пожалуйста,не могу разобраться.

Вычислить период колебания маятника длины L - C++
Я накидал следующую программу, но она не работает, что подскажете? #include <iostream> #include <math.h> /* run this program using...

Разработать класс "Счет физического лица" и обеспечить возможность работы с ним - C++
-продумать атрибуты класса и инкапсулировать их в закрытой части интерфейса класса; -определить в классе по крайней мере три...

Стабилизация обратного маятника на тележке(метод Рунге-Кутта) - C++
Добрый день! Есть уравнения обратного маятника на тележке. Нашел по этой ссылке:...

нарисовать изображение - C++
вот мой код помогите пожалуста найти ощибки что тут не правильно! очень прощу! вот мой код #include <iostream> using namespace...

Изображение с монитора - C++
Возможно я ошибаюсь, но изображение с монитора хранится где-то в памяти? Так вот вопросы: 1) В каком диапазоне адресов хранится...

Изображение в структуре - C++
Пишу Лабу, необходимо в структуре добавить фотографию, как это осуществить, приложение консольное.


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru