Mam taki program do zrobiena na zaliczenie. Robie go już dobre dwa tygodnie siedze po nocach i nie weimm co jest nie tak nie działa jak powinie. Bardzo proszę jak ktoś wie jak to napisać co źle zrobiłam Błagam o pomoc .....
Oto kod:
// importowanie przestrzeni nazw
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Windows.Forms;
using ZedGraph;
// deklaracja przestrzeni nazw
namespace struna
{
public partial class Form1 : Form
{
int tickStart = 0;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
GraphPane Obszar = zg1.GraphPane;
// Umieszczał tytuły i etykietywału
Obszar.Title.Text = "Struna z wymuszeniem stochastycznym bez tłumienia";
Obszar.XAxis.Title.Text = "";
Obszar.YAxis.Title.Text = "Parameter A";
RollingPointPairList ppl = new RollingPointPairList(1000);
//------Ustawienia panelu---------------------
LineItem myCurve = Obszar.AddCurve("Linia Struny", ppl, Color.Red, SymbolType.None);
// Zapełniają tło wału z kolorowym gradientem
Obszar.Chart.Fill = new Fill(Color.Yellow, Color.LightGoldenrodYellow, 45F);
// Zapełniają tło wału z kolorowym gradientem
Obszar.Fill = new Fill(Color.DarkSlateBlue, Color.FromArgb(0, 250, 250), 60F);
//myCurve.Line.Width = 5.0f;
}
private void zg1_Load(object sender, EventArgs e)
{
}
private void Dane_Enter(object sender, EventArgs e)
{
}
private void timer1_Tick_1(object sender, EventArgs e)
{
if (zg1.GraphPane.CurveList.Count <= 0)
return;
LineItem curve = zg1.GraphPane.CurveList[0] as LineItem;
if (curve == null)
return;
IPointListEdit list = curve.Points as IPointListEdit;
if (list == null)
return;
// Czas jest w sekundzie
double time = (Environment.TickCount - tickStart) / 1000.0;//szybkość
//-------------------------------------------------struna---------------------------
double a = 2;// Double.Parse(textBox3.Text);
double T = 100.0;
double t = 1;
double dt = Math.PI / (a * T);
// double t1 = 20;
double l = 23;// Double.Parse(textBox1.Text);
double wspolczynnika = 2.56;
double wspolczynnikb = 1.78;
double ksi = 0.75;
double n;// Double.Parse(textBox2.Text);
double x = 1;
//
while (t <l)
{
//list.Add(0, 0);
for (n = 1; n <= 3; n++)
{
//list2.Add(t , 0);
list.Add(0.1 + t, ((2 / a * n * Math.PI * time / 5.0) * (Math.Sin((Math.PI * n * x * time / 5.0)) / l)) * (Math.Sin((Math.PI * n * a * t * time / 5.0) / l) * (wspolczynnika * (Math.Sin(Math.PI * n * ksi) / l)) - Math.Cos((Math.PI * n * a * t) / l) * (wspolczynnikb * Math.Sin((Math.PI * n * ksi * t) / l))));//wspolczynnika * Math.Sin(a * t * time) - wspolczynnikb * Math.Cos(a * t * time));//Math.Sin(2.0 * Math.PI * t / 3.0));
//list3.Add(t, l);
t = t + dt;
}
}
list.Add(l, 0);
zg1.AxisChange();
// Force a redraw
zg1.Invalidate();
}
private void Form1_Resize(object sender, EventArgs e)
{
SetSize();
}
private void SetSize()
{
// położenie okienka
zg1.Location = new Point(10, 10);
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Stop();
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
// Zrestartuj stoper.
timer1.Stop();
timer1.Start();
}
private void button2_Click(object sender, EventArgs e)
{
GraphPane Obszar = zg1.GraphPane;
// Umieszczał tytuły i etykietywału
Obszar.Title.Text = "Struna z wymuszeniem stochastycznym bez tłumienia";
Obszar.XAxis.Title.Text = "";
Obszar.YAxis.Title.Text = "Parameter A";
RollingPointPairList ppl = new RollingPointPairList(1000);
//------Ustawienia panelu---------------------
//LineItem myCurve = Obszar.AddCurve("Linia Struny", ppl, Color.Red, SymbolType.None);
// Zapełniają tło wału z kolorowym gradientem
Obszar.Chart.Fill = new Fill(Color.Yellow, Color.LightGoldenrodYellow, 45F);
// Zapełniają tło wału z kolorowym gradientem
Obszar.Fill = new Fill(Color.DarkSlateBlue, Color.FromArgb(0, 250, 250), 60F);
//myCurve.Line.Width = 5.0f;
// Sample at 50ms intervals
// Dobierają wzorce przy 50 miss interwałów
timer1.Interval = 50;
timer1.Enabled = true;
timer1.Start();
Obszar.XAxis.Scale.Min = 8.6;
Obszar.XAxis.Scale.Max = 23.2;//rysuję od początku wykresu , skala pokazana do 80
Obszar.XAxis.Scale.MajorStep = 2;//wyswietlanie skali co 5, 10
Obszar.YAxis.Scale.Min = -20;
Obszar.YAxis.Scale.Max = 20;
// Linia pozioma
zg1.AxisChange();
tickStart = Environment.TickCount;
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
}
private void label1_Click(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
}
private void textBox3_TextChanged(object sender, EventArgs e)
{
}
}
}
A to treść projektu:
Struna z wymuszeniem stochastycznym bez tłumienia. Równanie ruchu struny ma posta:
http://img101.imageshack.us/img101/4663/jedenlz9.png
Bedziemy zakładac ze konce struny sa zamocowane
u(0, t) = u(l, t) = 0
gdzie l to długosc struny. Przyjmiemy takze, ze w chwili poczatkowej
struna jest w spoczynku, to znaczy
u(0, x) = 0
dla x należy [0, l].
siła f(t, x) ma postac impulsów, co odpowiada uderzaniu czasteczek w
strune˛. Moment uderzenia n-tej czasteczki oznaczymy przez tn. Bedziemy
zakładac, ze momenty te sa losowe a zmienne losowe Tn = tn − tn−1
maja˛ jednakowe rozkłady wykładnicze i sa˛ niezalezne. Załozymy takze,
ze wielkosc czasteczki jest zmienna losowa a wielkosci posczególnych
czastek nie zaleza˛ od siebie. W przypadku struny losowe jest takze miejsce
uderzenia w trune n-tej czasteczki równe n.
Ruch struny wyrazi sie wtedy wzorem:
http://img143.imageshack.us/img143/521/wzorfd8.png
gdzie i to wielkosc i-tej cza˛steczki.
Zilustrowac ruch struny. Uzytkownik powinien miec mozliwosc wprowadzenia
stałych a, l, rozkładów i stałej rozkładu wykładniczego.</image>