Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

24.12.2011, 23:10. Просмотров 1066. Ответов 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.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2011, 23:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Изображение физического маятника (C++):

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

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

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

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

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

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2011, 23:10
Привет! Вот еще темы с ответами:

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

Вывести множество цифр, входящих в изображение числа N, которые не входят в изображение числа M - C++
Помогите пожалуйста Сама задача " Пусть заданы два натуральных числа N и M. Составить программу, которая выводила множество цифр,...

Заданы координаты точки подвеса математического маятника A(xa, ya, za) и координаты одной из точек его наивысшего подъема B(xb, yb, zb). Найти координ - C++
помогите написать программу на с++ Добавлено через 37 секунд вот задача:Заданы координаты точки подвеса математического маятника...

Определить период Т физического маятника - Колебания и волны
Дан физический маятник: вращающийся шар (радиуса R, массы M) на стержне (длины l, массы m). Точку прикрепления стержня считать 0....


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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