Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2011_10_18_2.docx
Скачиваний:
17
Добавлен:
12.07.2019
Размер:
32.5 Кб
Скачать

InitializeComponent();

}

public float getY(float X) {

return (float)Math.Sin(X);

}

public float delta = 0;

private void panel1_Paint(object sender, PaintEventArgs e) {

List<PointF> points = new List<PointF>();

for (float x = -(float)Math.PI ; x < Math.PI; x += 0.2F) {

PointF newP = new PointF(x, getY(x + delta));

points.Add(newP);

}

GraphPainter p = new GraphPainter();

p.draw(points.ToArray(), e.Graphics, panel1.Width, panel1.Height);

}

private void timer1_Tick(object sender, EventArgs e) {

delta = delta + 0.1F;

panel1.Invalidate();

}

}

class GraphPainter {

//0, 3, 8

//0, 3/8, 8/8

//[a..b]

//[0..b-a]+a

//[0..1]*(b-a)+a

//(a-min)/(max-min)

//[0..maxDrawX]

//[0..1]*MaxDrawX

public void draw(PointF[] points, Graphics g, int maxDrawX, int maxDrawY) {

float minX = points.Select(p => p.X).Min();

float maxX = points.Select(p => p.X).Max();

for (int i = 0; i < points.Length; i++) {

if (maxX == minX) {

points[i].X = 0.5F;

} else {

points[i].X = (points[i].X - minX) / (maxX - minX);

}

points[i].X = points[i].X * maxDrawX;

}

float minY = points.Select(p => p.Y).Min();

float maxY = points.Select(p => p.Y).Max();

for (int i = 0; i < points.Length; i++) {

if (maxY == minY) {

points[i].Y = 0.5F;

} else {

points[i].Y = (points[i].Y - minY) / (maxY - minY);

points[i].Y = 1 - points[i].Y;

}

points[i].Y = points[i].Y * maxDrawY;

}

for (int i = 0; i < points.Length - 1; i++) {

g.DrawLine(Pens.Black, points[i], points[i + 1]);

}

}

}

}