Graphics: Движение объектов по одной траектории - C#
Формулировка задачи:
Ребят помогите пожалуйста.У меня программа на C# ,она создаёт два объекта,после нажимаем на кнопку "запуск 1 объекта,начинает двигаться 1 объект по вытян.параболе.Затем нажимаем на Запуск 2 объекта ,он должен догнать первый.И в этом прблемма,второй объект двигаеться но не по той же траектории что и первый! Как быть? вот код
Заранее спасибо кто поможет
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 laba_4
{
public partial class Form1 : Form
{
bool l = false;
MyLabel1 D;
MyLabel T;
static public arch d = new arch();
public class MyLabel1
{
public System.Windows.Forms.Label m3;
public System.Windows.Forms.Timer MyTimer1;
double y0;
double x0;
double M;
public MyLabel1(Control Sender)
{
m3 = new Label();
m3.Parent = Sender;
m3.Size = new System.Drawing.Size(100, 100);
m3.Top = 190;
m3.BackColor = System.Drawing.SystemColors.Desktop;
MyTimer1 = new Timer();
MyTimer1.Interval = 1;
MyTimer1.Tick += new System.EventHandler(movett);
}
public double x1
{
set
{
x0 = value;
double Mhor = m3.Parent.Width / 3000.0;
m3.Left = System.Convert.ToInt32(x0 * Mhor);
}
get
{
return x0;
}
}
public double y1
{
set
{
y0 = value;
double Mhor = m3.Parent.Width / 3000.0;
m3.Top = -System.Convert.ToInt32(y0 * Mhor) + m3.Parent.Height / 2 - m3.Height;
}
get
{
return y0;
}
}
public void movett(object sender, EventArgs e)
{
if (d.archx >= x1) x1 = x1 + 2;
else x1 = x1 - 2;
if (d.archy >= y1) y1 = y1 + 2;
else y1 = y1 - 2;
}
}
public class arch //класс архив нужен чтобы второй объект получал координаты от первого
{
public double archx;
public double archy;
}
public class MyLabel
{
double y0;
double x0;
double a = 10;
double k = 0.0003;
public System.Windows.Forms.Label m;
public System.Windows.Forms.Label m1;
public System.Windows.Forms.Label m2;
public System.Windows.Forms.Timer MyTimer;
//конструктор класса
public MyLabel(Control Sender)
{
m = new Label();
m.BackColor = System.Drawing.SystemColors.GradientActiveCaption;
m.Parent = Sender;
m.Text = " 1 ";
m.Click += new System.EventHandler(this.move);
m.Left = 150;
m.Top = 190;
m.Width = 100;
m.Height = 30;
m1 = new Label();
m1.BackColor = System.Drawing.SystemColors.GradientActiveCaption;
m1.Parent = Sender;
m1.Text = " 2 ";
m1.Click += new System.EventHandler(this.move);
m1.Top = 190;
m1.Left = m.Width / 2 - (m1.Width / 2);
m1.Left = 4;
m1.Width = 50;
m1.Height = 30;
m2 = new Label();
m2.BackColor = System.Drawing.SystemColors.GradientActiveCaption;
m2.Parent = Sender;
m2.Text = " 3 ";
m2.Click += new System.EventHandler(this.move);
m2.Width = 25;
m2.Left = m.Width / 2 - (m2.Width / 2);
m2.Left = 10;
m2.Top = 180;
m2.Width = 25;
m2.Height = 30;
MyTimer = new Timer();
MyTimer.Interval = 2;
MyTimer.Tick += new System.EventHandler(this.move1);
}
public void move(object sender, EventArgs e)
{
x = x + 1;
y = y + 1;
}
public void move1(object sender, EventArgs e)
{
xcor = x + a;
d.archx = xcor;
k = 0.0003;
ycor = k * Math.Pow(x, 2);
d.archy = ycor;
}
public double xcor
{
set
{
x0 = value;
double Mhor = m.Parent.Width / 3000.0;
m.Left = System.Convert.ToInt32(x0 * Mhor);
m1.Left = m.Left + m.Width / 2 - (m.Width / 4);
m2.Left = m.Left + m.Width / 2 - (m.Width / 10);
}
get
{
return x0;
}
}
public double ycor
{
set
{
y0 = value;
double Mhor = m.Parent.Height / 3000.0;
m.Top = (m.Parent.Height - (m.Height + 30)) - System.Convert.ToInt32(y0 * Mhor);
m1.Top = m.Top - m.Height;
m2.Top = m.Top - m.Height - m1.Height;
}
get
{
return y0;
}
}
public double x//класс координация меток на форме по Х
{
set
{
x0 = value;
double Mhor = m.Parent.Width / 3000.0;
m.Left = System.Convert.ToInt32(x0 * Mhor);
m1.Left = m.Left + m.Width / 2 - (m.Width / 4);
m2.Left = m.Left + m.Width / 2 - (m.Width / 10);
}
get
{
return x0;
}
}
public double y//класс координация меток на форме по У
{
set
{
y0 = value;
double Mhor = m.Parent.Height / 3000.0;
m.Top = (m.Parent.Height - (m.Height + 30)) - System.Convert.ToInt32(y0 * Mhor);
m1.Top = m.Top - m.Height;
m2.Top = m.Top - m.Height - m1.Height;
}
get
{
return y0;
}
}
// public void movet(object sender, EventArgs e)
// {
// xcor = x + 1;
// ycor = y + 1;
// }
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{// d = new arch(this);
T = new MyLabel(this);
T.x = 0;
T.y = 0;
D = new MyLabel1(this);
}
private void button2_Click(object sender, EventArgs e)
{
if (l == false) l = true;
else l = false;
T.MyTimer.Enabled = l;
}
private void button3_Click(object sender, EventArgs e)
{
if (l == false) l = true;
else l = false;
D.MyTimer1.Enabled = l;
}
}
}Решение задачи: «Graphics: Движение объектов по одной траектории»
textual
Листинг программы
public void movett(object sender, EventArgs e)
{
if (d.archx >= x1) x1 = x1 + 2;
else x1 = x1 - 2;
if (d.archy >= y1) y1 = y1 + 2;
else y1 = y1 - 2;
}