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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Подмена операции сложения на умножение. Си!!! http://www.cyberforum.ru/cpp-beginners/thread416654.html
Добрый вечер, господа! Вынужден обратиться снова к вам за помощью. Мне дали одно интересное задание: подменить операцию сложения на умножение. Я сначала написал на С++ через классы и перегрузку...
C++ Нотации массивов и указателей Айвор Хортон в своей книге Beginning Visual C++ 2010 утверждает (стр. 183, 2-й абзац сверху) что нотация указателей работает быстрее нотации массивов. Хочется, чтобы опытные люди подтвердили это или... http://www.cyberforum.ru/cpp-beginners/thread416651.html
C++ функция символьной строки
Дана символьная строка.Написать программу, которая оставляет в исходной строке латинские буквы. Обработку строки оформить в виде функции, ввод и вывод данных - в основной программе. тут...
C++ задача с матрицей
Задача:даны марица А и массив B. Надо написать программу,которая вычисляет массив С, состаящий из элементов А, расположенных между первым и последним положительным элементами каждого столбца, если...
C++ Преобразование в строку http://www.cyberforum.ru/cpp-beginners/thread416635.html
Здравствуйте, уважаемые господа. Задача такая: мне необходимо объединить два числа, содержащие только 0 и 1 (по 5 цифр в каждом), в одно, а через некоторое время разбить получившееся число...
C++ Наследие классов С++ Помогите плз разобраться с выводом.Прога вроде написана правильно а выводит не то что надо(какой то бред) Задание: В родительском классе исходные данные и вывод, рассчет в потомке. Вывод в... подробнее

Показать сообщение отдельно
Timoshka_
2 / 2 / 0
Регистрация: 30.10.2010
Сообщений: 84

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

24.12.2011, 23:10. Просмотров 1042. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru