Drawing wave line in C#
March 31st, 2009
Download source code (Microsoft Visual C# 2005 Express Edition)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Drawing.Drawing2D; namespace Tutorial6 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void pictureBox1_Paint(object sender, PaintEventArgs e) { e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; PointF[] pt = new PointF[] { new PointF(50,50), new PointF(150,50), new PointF(200,100), new PointF(200,200), }; e.Graphics.DrawLines(Pens.Gray, pt); List<PointF> PointList = new List<PointF>(); float curDist = 0; float distance = 0; for (int i = 0; i < pt.Length - 1; i++) { PointF ptA = pt[i]; PointF ptB = pt[i + 1]; float deltaX = ptB.X - ptA.X; float deltaY = ptB.Y - ptA.Y; curDist = 0; distance = (float)Math.Sqrt(Math.Pow(deltaX, 2) + Math.Pow(deltaY, 2)); while (curDist < distance) { curDist++; float offsetX = (float)((double)curDist / (double)distance * (double)deltaX); float offsetY = (float)((double)curDist / (double)distance * (double)deltaY); PointList.Add(new PointF(ptA.X + offsetX, ptA.Y + offsetY)); } } for (int i = 0; i < PointList.Count - 24; i = i + 24) { drawWaveLine(e.Graphics, Pens.Black, PointList[i].X, PointList[i].Y, PointList[i + 24].X, PointList[i + 24].Y); } } public void drawWaveLine(Graphics g, Pen pen, float x1, float y1, float x2, float y2) { float angle = (float)((Math.Atan2(y2 - y1, x2 - x1) * 180 / 3.14159265)); g.TranslateTransform(x1, y1); g.RotateTransform(angle); GraphicsPath gp1 = new GraphicsPath(); Point[] p1 = new Point[] { new Point(0,0), new Point(3,-3), new Point(6,-4), new Point(9,-3), new Point(12,0), new Point(15,3), new Point(18,4), new Point(21,3), new Point(24,0) }; g.DrawLines(pen, p1); g.RotateTransform(-angle); g.TranslateTransform(-x1, -y1); } } }