Моделирование сигнала датчика
Идеальная модель датчика представляет собой синусоидальный сигнал.
Приближенная к реальности модель соответственно синусоидальный сигнал плюс шум.
Т.е. фактически график синуса описывается формулой:
f(x) = A sin (ωt) + D,
где A - амплитуда колебаний, ω - угловая скорость вращения, D - шумовая составляющая.
Пример генерации шума:
Для выполнения данной задачи сначала создадим новый экземпляр класса Random:
Random rnd = new Random();
Теперь для того чтобы получить случайное число, достаточно использовать созданный экземпляр класса, вызывая метод Next();
// генерируем случайное число от 1 до 3
int random_talk = rnd.Next(1, 4);
Применение графики
Пространство имен System.Drawing обеспечивает доступ к функциональным возможностям графического интерфейса GDI+ Windows. Класс Graphics предоставляет методы рисования на устройстве отображения.
Рассмотрим пример использования графических возможностей С# для метода DrawLine класса Graphics .
Задача: На форме, в модуле pictureBox построить треугольник, заданный прямоугольными координатами вершин. Координаты должны быть заданы относительно pictureBox.
Рисование в pictureBox имеет то преимущество, что при сворачивании формы прорисованные объекты сохраняются. Если же рисовать непосредственно в поле формы, то этого не происходит.
1. Создадим новый проект Windows Form
2. Поместим на форме два контролла из панели инструментов: кнопку Button1 и окно для рисунка pictureBox1. Начальное положение и размеры этих объектов могут быть произвольными, далее программно мы их скорректируем.
3. Создадим в нашем коде функцию загрузки формы, для этого в конструкторе формы дважды щелкнем мышкой на поле формы – создастся процедура private void Form1_Load(object sender, System.EventArgs e)
4. Создадим в нашем коде функцию- события одного щелчка по кнопке Button1, для этого в конструкторе формы дважды щелкнем мышкой на этой кнопке – создастся процедура private void button1_Click(object sender, EventArgs e).
5. Создадим в нашем коде функцию- события рисования pictureBox1, для этого в конструкторе формы правой кнопкой мышки щелкнем на pictureBox1 и выберем «Свойства». В свойства pictureBox1 выберм вкладку «События» и выберм событие Paint, дважды щелкнем мышкой на этом элементе списка – создастся процедура private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
6. Далее дописываем код, как показано ниже.
7. Ключевой строчкой в коде является: pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint);
8. Она связывает событие рисования на pictureBox1 с процедурой pictureBox1_Paint.
9. Запускаем проект на выполнение и кликаем по кнопке «Построить».
Пример программы:
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 WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
float[] x = { 100.78F, 50.12F, 200.99F }; // Массив х-кординат треугольника
float[] y = { 100.45F, 200.77F, 300.18F }; // Массив y-кординат треугольника
private void Form1_Load(object sender, System.EventArgs e)
{
// Задаем размер нашей формы
this.Height = 700;
this.Width = 900;
// Задаем положение pictureBox1, координаты левого верхнего угла относительно формы
this.pictureBox1.Location = new System.Drawing.Point(40, 40);
// Задаем размер pictureBox1
this.pictureBox1.Width = 600;
this.pictureBox1.Height = 500;
// Помещаем кнопку button1 в нижний правый угол формы
this.button1.Left = this.Width - this.button1.Width - 10;
this.button1.Top = this.Height - this.button1.Height-40;
this.button1.Text = "Построить";
}
private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
// Создаем локальную версию графического объекта для PictureBox
Graphics g = e.Graphics;
// Прорисовка отрезков сторон треугольника
g.DrawLine(Pens.Red, x[0], y[0], x[1], y[1]);
g.DrawLine(Pens.Red, x[1], y[1], x[2], y[2]);
g.DrawLine(Pens.Red, x[0], y[0], x[2], y[2]);
}
private void button1_Click(object sender, EventArgs e)
{
pictureBox1.BackColor = Color.White;
pictureBox1.Visible = true;
// Connect the Paint event of the PictureBox to the event handler method.
pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint);
}
}
}