|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.12.2010, 00:25 | #1 |
Новичок
Джуниор
Регистрация: 01.12.2010
Сообщений: 2
|
усовершенствовать програмку маятника
плиз...пожалуйста,help me!!!! очень надо...она полность работает,но требуется привести её к более солидному виду...может чем-нить можно помочь!!! вот программа:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { Bitmap Bitmap1; Bitmap Bitmap2; Graphics Pic1; Graphics Pic2; Pen Pen1 = new Pen(Color.Red); Pen Pen2 = new Pen(Color.Blue); const int n = 200; double[] T = new double[n+1]; bool stop; Public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Bitmap1 = new Bitmap(pictureBox1.Width, pictureBox1.Height); Bitmap2 = new Bitmap(pictureBox2.Width, pictureBox2.Height); Pic1 = Graphics.FromImage(Bitmap1); Pic2 = Graphics.FromImage(Bitmap2); button1.Enabled = false; button2.Enabled = true; button3.Enabled = false; double FiMax = Math.PI * Double.Parse(textBox1.Text) / 180; double L = Double.Parse(textBox3.Text); double g = Double.Parse(textBox4.Text); //------------------------------------------------------------------------------------------------------------ double dFi = 2 * FiMax / n; double K = Math.Sin(FiMax / 2); double Teta1; double Teta2 = -Math.PI / 2; T[0] = 0; for (int i = 1; i <= n; i++) { Teta1 = Teta2; if (i < n) { Teta2 = Math.Asin(Math.Sin((i * dFi - FiMax) / 2) / K); } else { Teta2 = Math.PI / 2; } double S = (1 / Math.Sqrt(1 - K * K * Math.Sin(Teta1) * Math.Sin(Teta1)) + 1 / Math.Sqrt(1 - K * K * Math.Sin(Teta2) * Math.Sin(Teta2))) / 2; for (int j = 1; j < 10000; j++) { double Teta = Teta1 + j * (Teta2 - Teta1) / 10000; S += 1 / Math.Sqrt(1 - K * K * Math.Sin(Teta) * Math.Sin(Teta)); } S *= (Teta2 - Teta1) / 10000; T[i] = T[i - 1] + S; } textBox5.Text = String.Format("{0:e}", 2 * T[n]*Math.Sqrt(L/g)); textBox6.Text = String.Format("{0:e}", Math.Sqrt(2 * g * L * (1 - Math.Cos(FiMax)))); textBox7.Text = String.Format("{0:e}", g * L * (1 - Math.Cos(FiMax))); //------------------------------------------------------------------------------------------------------------ double Kx = Bitmap2.Width / (2 * T[n]); double Ky = (Bitmap2.Height - 40) / (2 * FiMax); stop = false; L0: ; for (int i = 1; i <= n; i++) { double Fi = i * dFi - FiMax; int X = (int)Math.Round(Bitmap1.Width / 2 + 150 * Math.Sin(Fi)); int Y = (int)Math.Round(50 + 150 * Math.Cos(Fi)); Pic1.Clear(Color.White); Pic1.DrawEllipse(Pen1, X - 10, Y - 10, 20, 20); Pic1.DrawLine(Pen2, Bitmap1.Width / 2, 50, X, Y); Pic2.Clear(Color.White); Pic2.DrawLine(Pen2, 0, Bitmap2.Height / 2, Bitmap2.Width, Bitmap2.Height / 2); Pic2.DrawLine(Pen2, 0, 0, 0, Bitmap2.Height); for (int j = 1; j <= n; j++) Pic2.DrawLine(Pen1, (float)(Kx * T[j - 1]), Bitmap2.Height / 2 - (float)(Ky * (dFi * (j - 1) - FiMax)), (float)(Kx * T[j]), Bitmap2.Height / 2 - (float)(Ky * (dFi * j - FiMax))); for (int j = n - 1; j >= 0; j--) Pic2.DrawLine(Pen1, (float)(Kx * (T[n] + T[n - (j + 1)])), Bitmap2.Height / 2 - (float)(Ky * (dFi * (j + 1) - FiMax)), (float)(Kx * (T[n] + T[n - j])), Bitmap2.Height / 2 - (float)(Ky * (dFi * j - FiMax))); Pic2.DrawEllipse(Pen2, (float)(Kx * T[i]) - 3, Bitmap2.Height / 2 - (float)(Ky * (dFi * i - FiMax)) - 3, 6, 6); pictureBox1.Image = Bitmap1; pictureBox2.Image = Bitmap2; double Interval = (1E+08) * (T[i] - T[i-1]); for (int j = 1; j <= Interval; j++) { } Application.DoEvents(); if (stop) goto L1; } for (int i = n-1; i >= 0; i--) { double Fi = i * dFi - FiMax; int X = (int)Math.Round(Bitmap1.Width / 2 + 150 * Math.Sin(Fi)); |
01.12.2010, 00:26 | #2 |
Новичок
Джуниор
Регистрация: 01.12.2010
Сообщений: 2
|
int Y = (int)Math.Round(50 + 150 * Math.Cos(Fi));
Pic1.Clear(Color.White); Pic1.DrawEllipse(Pen1, new Rectangle(X - 10, Y - 10, 20, 20)); Pic1.DrawLine(Pen2, Bitmap1.Width / 2, 50, X, Y); Pic2.Clear(Color.White); Pic2.DrawLine(Pen2, 0, Bitmap2.Height / 2, Bitmap2.Width, Bitmap2.Height / 2); Pic2.DrawLine(Pen2, 0, 0, 0, Bitmap2.Height); for (int j = 1; j <= n; j++) Pic2.DrawLine(Pen1, (float)(Kx * T[j - 1]), Bitmap2.Height / 2 - (float)(Ky * (dFi * (j - 1) - FiMax)), (float)(Kx * T[j]), Bitmap2.Height / 2 - (float)(Ky * (dFi * j - FiMax))); for (int j = n - 1; j >= 0; j--) Pic2.DrawLine(Pen1, (float)(Kx * (T[n] + T[n - (j + 1)])), Bitmap2.Height / 2 - (float)(Ky * (dFi * (j + 1) - FiMax)), (float)(Kx * (T[n] + T[n - j])), Bitmap2.Height / 2 - (float)(Ky * (dFi * j - FiMax))); Pic2.DrawEllipse(Pen2, Bitmap2.Width/2 + (float)(Kx * T[n-i]) - 3, Bitmap2.Height / 2 - (float)(Ky * (dFi * i - FiMax)) - 3, 6, 6); pictureBox1.Image = Bitmap1; pictureBox2.Image = Bitmap2; double Interval = (1E+08) * (T[i+1] - T[i]); for (int j = 1; j <= Interval; j++) { } Application.DoEvents(); if (stop) goto L1; } goto L0; L1: ; button1.Enabled = true; button2.Enabled = false; button3.Enabled = true; Pic1.Dispose(); Pic2.Dispose(); Bitmap1.Dispose(); Bitmap2.Dispose(); } private void button2_Click(object sender, EventArgs e) { stop = true; } private void button3_Click(object sender, EventArgs e) { Application.Exit(); } private void Form1_Load(object sender, EventArgs e) { } } } это продолжение...полностью не влезла |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Моделирование пружинного маятника. | Blondinko | Помощь студентам | 3 | 30.11.2011 17:12 |
Моделирование математического маятника MathCad | JustHappy | Помощь студентам | 1 | 19.05.2010 17:54 |
КОлебания маятника | Blad47 | Общие вопросы Delphi | 3 | 31.10.2009 21:31 |
Помогите усовершенствовать код | xPAL | Общие вопросы Delphi | 6 | 20.09.2008 00:05 |