资源简介
本工程是用C#语言编写,通过实现道格拉斯普克算法,达到了对线段的简化,其中递归的思想值得学习!
代码片段和文件信息
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Collections;
namespace 道格拉斯普克算法
{
public partial class Form1 : Form
{
List linePtList = new List();//原始点集
List ptL = new List();//简化后的点集
bool moving = true;//绘图与否
bool before = false;//简化与否
public Form1()
{
InitializeComponent();
}
//panel1的Paint方法,将线画在其上
private void panel1_Paint(object sender PaintEventArgs e)
{
Graphics g = this.panel1.CreateGraphics();
Pen pen = new Pen(Color.Red);//实例化 画笔对象
Pen pen1 = new Pen(Color.Blue);
pen1.Dashstyle = System.Drawing.Drawing2D.Dashstyle.Dot;//样式为:虚线
int count = linePtList.Count - 1;
//原始点的绘图
for (int i = 0; i < count; i++)
{
Point start = linePtList[i];
Point end = linePtList[i + 1];
g.DrawLine(pen start end);
}
//简化后的点的绘图
if (before)
{
for (int j = 0; j < ptL.Count - 1; j++)
{
Point start = ptL[j];
Point end = ptL[j + 1];
g.DrawLine(pen1 start end);
}
}
}
private void panel1_MouseDown(object sender MouseEventArgs e)
{
//判断是否正在画线,是的话就记录点击位置坐标
if (moving)
{
Point pt = new Point(e.X e.Y);
linePtList.Add(pt);
ptL.Add(pt);
this.panel1.Invalidate(true);
}
}
private void panel1_DoubleClick(object sender EventArgs e)
{
//停止绘图
moving = false;
this.panel1.Cursor = Cursors.Arrow;
}
private void panel1_MouseMove(object sender MouseEventArgs e)
{
if (e.Button == MouseButtons.Left && moving)
{
Point pt = new Point(e.X e.Y);
linePtList.Add(pt);
ptL.Add(pt);
this.panel1.Invalidate(true);
}
//动态显示鼠标位置坐标
labX.Text = “X:“ + e.X.ToString();
labY.Text = “Y:“ + e.Y.ToString();
}
private void btnSimp_Click(object sender EventArgs e)
{
//执行压缩函数,并经绘制压缩后的线段
before = true;
lineCompress(0 linePtList.Count - 1);
this.panel1.Invalidate();
}
//线段压缩函数
private void lineCompress(int from int to)
{
//判断点数是否大于或等于3个
if (tbYz.Text.ToString().Length == 0)
{
Message
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-08-31 18:36 道格拉斯普克算法\
文件 187 2014-08-31 10:48 道格拉斯普克算法\App.config
目录 0 2014-08-31 10:48 道格拉斯普克算法\bin\
目录 0 2014-09-28 19:47 道格拉斯普克算法\bin\Debug\
文件 13824 2014-10-01 20:14 道格拉斯普克算法\bin\Debug\道格拉斯普克算法.exe
文件 187 2014-08-31 10:48 道格拉斯普克算法\bin\Debug\道格拉斯普克算法.exe.config
文件 28160 2014-10-01 20:14 道格拉斯普克算法\bin\Debug\道格拉斯普克算法.pdb
文件 22984 2014-10-06 19:56 道格拉斯普克算法\bin\Debug\道格拉斯普克算法.vshost.exe
文件 187 2014-08-31 10:48 道格拉斯普克算法\bin\Debug\道格拉斯普克算法.vshost.exe.config
文件 490 2010-03-17 22:39 道格拉斯普克算法\bin\Debug\道格拉斯普克算法.vshost.exe.manifest
文件 6189 2014-10-06 18:30 道格拉斯普克算法\Form1.cs
文件 8431 2014-09-28 19:42 道格拉斯普克算法\Form1.Designer.cs
文件 5817 2014-09-28 19:42 道格拉斯普克算法\Form1.resx
目录 0 2014-08-31 10:48 道格拉斯普克算法\obj\
目录 0 2014-10-01 20:14 道格拉斯普克算法\obj\Debug\
文件 1308 2014-08-31 18:40 道格拉斯普克算法\obj\Debug\DesignTimeResolveAssemblyReferences.cache
文件 6955 2014-09-28 19:40 道格拉斯普克算法\obj\Debug\DesignTimeResolveAssemblyReferencesInput.cache
文件 0 2014-08-31 10:48 道格拉斯普克算法\obj\Debug\TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
文件 0 2014-08-31 10:48 道格拉斯普克算法\obj\Debug\TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
文件 0 2014-08-31 10:48 道格拉斯普克算法\obj\Debug\TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
目录 0 2014-08-31 10:48 道格拉斯普克算法\obj\Debug\TempPE\
文件 1668 2014-10-06 19:56 道格拉斯普克算法\obj\Debug\道格拉斯普克算法.csproj.FileListAbsolute.txt
文件 975 2014-09-28 19:47 道格拉斯普克算法\obj\Debug\道格拉斯普克算法.csproj.GenerateResource.Cache
文件 2209 2014-09-28 19:47 道格拉斯普克算法\obj\Debug\道格拉斯普克算法.csprojResolveAssemblyReference.cache
文件 13824 2014-10-01 20:14 道格拉斯普克算法\obj\Debug\道格拉斯普克算法.exe
文件 180 2014-09-28 19:47 道格拉斯普克算法\obj\Debug\道格拉斯普克算法.Form1.resources
文件 28160 2014-10-01 20:14 道格拉斯普克算法\obj\Debug\道格拉斯普克算法.pdb
文件 180 2014-09-28 19:47 道格拉斯普克算法\obj\Debug\道格拉斯普克算法.Properties.Resources.resources
文件 536 2014-08-31 10:48 道格拉斯普克算法\Program.cs
目录 0 2014-08-31 10:48 道格拉斯普克算法\Properties\
文件 1386 2014-08-31 10:48 道格拉斯普克算法\Properties\AssemblyInfo.cs
............此处省略7个文件信息
- 上一篇:WPF对比WinForm
- 下一篇:C#的皮尔逊Ⅲ型曲线计算
评论
共有 条评论