Witam .
Napisałem program do automatycznego rysowania "cykloidy" .niby wszystko działa bez zarzutu ale program zaczyna od rysowania prostej od środka układu wsp. do lewego górnego rogu i dopiero wtedy zaczyna rysować poprawnie lecz w górze okna.
Chcę żeby zaczynał od początku osi X z lewej strony i kończył się na końcu osi X z prawej.
Proszę o pomoc.
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 %%%%%
{
public partial class PulpitAnimacji1 : Form
{
Pen Pieorotoru = new Pen(Color.Black, 2);
Brush pedzielRysowaniaKulki = new SolidBrush(Color.Red);
int jd_Xs, jd_Ys;
int jd_Xp, jd_Yp, jd_Xt, jd_Yt;
float KatFi = 0.0f;
float WilkoscZmienyKataKulki = 1.5f;
float WilkoscZminanyKataSpirali = 0.15f;
float KatPolozemiaKulki;
private Timer ZegarSpirali = new Timer();
public PulpitAnimacji1()
{
InitializeComponent();
this.Left = 20;
this.Top = 20;
this.Width = (int)(Screen.PrimaryScreen.Bounds.Width * 0.80);
this.Height = (int)(Screen.PrimaryScreen.Bounds.Height * 0.80);
this.SetAutoSizeMode(System.Windows.Forms.AutoSizeMode.GrowAndShrink);
this.MaximizeBox = false;
this.MinimizeBox = false;
jd_Ys = jd_Yp = jd_Yt = this.Height / 2;
jd_Xs = jd_Xp = jd_Xt = this.Height / 2;
ZegarSpirali.Tick+=new EventHandler(Timer_zegar_Tick );
this.Paint+=new PaintEventHandler(PulpitAnimacji1_Paint);
ZegarSpirali.Interval = 150;
ZegarSpirali.Enabled = true;
}
private void Timer_zegar_Tick(object sender, EventArgs e)
{
if((jd_Yt>=0)&&(jd_Yt<this.Height))
KatPolozemiaKulki=KatPolozemiaKulki+WilkoscZminanyKataSpirali;
else
KatPolozemiaKulki=0;
this.Invalidate();
}
private void PulpitAnimacji1_Paint(object sender, PaintEventArgs e)
{
const int R = 10;
KatFi = 0;
jd_Xs = jd_Xp = jd_Xt = this.Width / 2;
jd_Ys = jd_Yp = jd_Yt = this.Height /2;
do
{
KatFi = KatFi + WilkoscZmienyKataKulki;
jd_Xt = R * (int)(KatFi - Math.Sin(KatFi));
jd_Yt = R * (int)(1 + Math.Cos(KatFi));
//jd_Xt = jd_Xs + (int)(R * KatFi * Math.Cos(KatFi));
//jd_Yt = jd_Ys + (int)(R * KatFi * Math.Sin(KatFi));
e.Graphics.DrawLine(Pieorotoru, jd_Xp, jd_Yp, jd_Xt, jd_Yt);
jd_Xp = jd_Xt;
jd_Yp = jd_Yt;
} while (KatFi <= KatPolozemiaKulki);
e.Graphics.FillEllipse(pedzielRysowaniaKulki, jd_Xt -Trb_promienKulki.Value, jd_Yt -Trb_promienKulki.Value, Trb_promienKulki.Value, Trb_promienKulki.Value);
System.Threading.Thread.Sleep(30);
}
}
}