Перемещение объектов по случайной траектории - C#
Формулировка задачи:
Подскажите как реализовать перемещение объектов по случайной траектории с шагом не более 20 пикселей.. Именно в этом шаге и проблема. Он формирует случайные числа так, что перемещение идет по диагонали вниз да и еще с шагом явно превышающим 20 пикселей..
Решение задачи: «Перемещение объектов по случайной траектории»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
namespace lr3
{
delegate void Tik(object sender, Graphics gr);
class SourceTik
{
public event Tik Mail;
Graphics gr;
public System.Timers.Timer timer;
protected virtual void OnMail()
{
if (Mail != null) Mail(this, gr);
}
public SourceTik(Graphics GR)
{
timer = new System.Timers.Timer();
timer.Interval = 2000d;
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Start();
gr = GR;
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
OnMail();
}
}
public class Class_2
{
public int[] С1;
public int[] С2;
public int[] C3;
public Point[] T1;
public Point[] T2;
Random Rand;
int X;
int Y;
SourceTik obj;
public void Stop()
{
obj.timer.Stop();
}
void obj_TikTak( object sender,Graphics gr)
{
Draw(gr);
}
public Class_2(Graphics GR)
{
obj = new SourceTik(GR);
С1 = new int[3];
С2 = new int[3];
C3 = new int[3];
T1 = new Point[3];
T2 = new Point[3];
Rand = new Random();
X = 400;
Y = 200;
}
public void Changes()
{
X = 25 + Rand.Next(720); //Rand.Next(X - 20, X + 20);
Y = 25 + Rand.Next(500);//Rand.Next(Y - 20, Y + 20);
int k = Rand.Next(100);
С1[0] = X;
С1[1] = Y + 35;
С1[2] = 105;
X += 100;
С2[0] = X;
С2[1] = Y;
С2[2] = 75;
X -= 70;
Y += 130;
C3[0] = X;
C3[1] = Y;
C3[2] = 107;
T1[0] = new Point(X+k, Y + 120+k);
T1[1] = new Point(X - 75-k, Y - 30-k);
T1[2] = new Point(X + 50+k, Y - 70+k);
X += 100;
T2[0] = new Point(X+120+k, Y-50-k);
T2[1] = new Point(X + 20+k, Y - 130-k);
T2[2] = new Point(X -75 -k, Y +20-k);
}
public void Draw(Graphics gr)
{
obj.Mail -= new Tik(obj_TikTak);
obj.Mail += new Tik(obj_TikTak);
gr.Clear(Color.Gainsboro);
this.Changes();
gr.DrawEllipse(new Pen(Color.Green, 5), С1[0], С1[1], С1[2], С1[2]);
gr.DrawPolygon(new Pen(Color.Honeydew, 5), T1);
gr.DrawEllipse(new Pen(Color.Green, 5), С2[0], С2[1], С2[2], С2[2]);
gr.DrawEllipse(new Pen(Color.Green, 5), C3[0], C3[1], C3[2], C3[2]);
gr.DrawPolygon(new Pen(Color.Honeydew, 5), T2);
}
}
}