Отрисовка движущейся синусоидной волны
Собственно как можно сделать таковую?
На Windows.Forms C#
Ответы (1 шт):
Автор решения: Алексей Обухов
→ Ссылка
Функцию можно нарисовать линиями: задаем шаг рисования s и проводим линии (x, f(x), x+s, f(x+s)).
Эффект движущейся функции можно сделать смещением всего графика вправо.
Сделал через объект Graphics, поэтому работает не очень быстро. Получилось около 100 строчек кода, чтоб не спамить, даю ссылку на код.
Добавляю код в текст ответа:
- Смещение функции вправо:
for (double shift = 0; ; shift += .05)
{
DrawF(g, Math.Sin, 100, 100 * Math.PI, shift);
}
- Построение функции отрезками:
void DrawF(Graphics g, Func<double, double> f, double XSCALE, double YSCALE, double xShift)
{
double XCENTER = this.Width / 2;
double YCENTER = this.Height / 2;
double XSIZE = this.Width;
double xStart = -XCENTER / XSCALE - xShift;
double xEnd = (XSIZE - XCENTER) / XSCALE;
double XSTEP = .05;
double x1 = xStart;
double y1 = -f(x1);
Pen pen = new Pen(Brushes.Black, 1);
for (double x = xStart + XSTEP; x < xEnd + XSTEP; x += XSTEP)
{
double y = -f(x);
g.DrawLine(pen, (int)((x1 + xShift) * XSCALE + XCENTER), (int)(y1 * YSCALE + YCENTER), (int)((x + xShift) * XSCALE + XCENTER), (int)(y * YSCALE + YCENTER));
x1 = x;
y1 = y;
}
}
