Рисуем синусоидальную волну в WPF - PullRequest
4 голосов
/ 03 июня 2009

Этот кажется довольно глупым, но я изо всех сил пытаюсь это сделать,

Как нарисовать синусоидальную волну в WPF ??

Спасибо

Ответы [ 3 ]

4 голосов
/ 03 июня 2009

Нарисуйте линии между точками, которые вы рассчитываете с помощью функции Math.Sin. Вам нужно решить, сколько точек за цикл использовать, компромисс между скоростью рисования и точностью. Предположительно, вам также нужно масштабировать амплитуду в соответствии с областью на экране, поскольку функция Sin будет возвращать значение от +1 до -1.

3 голосов
/ 03 июня 2009

Как ты делаешь свой "Рисование". В WPF нет событий OnPaint, таких как Winforms, так что это может оказаться немного сложным. Способ сделать это в WinForms был бы использовать Graphics.DrawBezier метод

e.Graphics.DrawBezier(new Pen(new SolidBrush(Color.Red)), 
                          new Point(0, 100), 
                          new Point(50, 0), 
                          new Point(50, 200), 
                          new Point(100, 100));

Может быть, это полезно, но я даже не уверен, как рисовать непосредственно на холсте WPF.

Быстрый взгляд на MSDN показывает, что у него есть элемент управления BezierSegment, который может вам пригодиться.

2 голосов
/ 03 июня 2009

Если вам нужны кривые между вашими точками, вы можете использовать PolyBezier для рисования вашей синусоидальной волны с помощью PointCollection, рассчитанной по методу Math.Sin. В качестве альтернативы вы можете создать множество сегментов Безье, которые перетекают друг в друга. Наконец, просто добавьте ваши PolyBezier или BezierSegments к вашей форме с помощью метода рисованияa.Children.Add (кривая), где область рисования - это сетка или холст, на который вы рисуете.

...