Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2010, 00:25   #1
tasty_angel
Новичок
Джуниор
 
Регистрация: 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));
tasty_angel вне форума Ответить с цитированием
Старый 01.12.2010, 00:26   #2
tasty_angel
Новичок
Джуниор
 
Регистрация: 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)
{

}
}
}



это продолжение...полностью не влезла
tasty_angel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Моделирование пружинного маятника. 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