• 大小: 62KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-14
  • 语言: C#
  • 标签: 曲线算法  样条曲线  

资源简介

曲线生成算法的C#gdi+实现(贝塞尔曲线、样条曲线、B样条曲线)

资源截图

代码片段和文件信息

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 曲线的生成算法
{
    public partial class FrmMain : Form
    {
        PointF[] pts;
        Graphics g;
        public FrmMain()
        {
            InitializeComponent();
        }
        //绘制Bezier曲线(控制点数要满足3n+1才能绘制)
        private void DrawBezier()
        {
            g.Clear(Color.White);
            pts = new PointF[10];
            pts[0] = new Point(50 100);
            pts[1] = new Point(80 230);
            pts[2] = new Point(120 230);
            pts[3] = new Point(140 160);
            pts[4] = new Point(180 50);
            pts[5] = new Point(230 50);
            pts[6] = new Point(270 120);

            pts[7] = new Point(330 230);
            pts[8] = new Point(380 230);
            pts[9] = new Point(470 150);
            if (pts.Length >= 4 && (pts.Length - 1) % 3 != 0)
            {
                MessageBox.Show(“控制点个数不合理!\n控制点个数应该满足3n+1““提示“);
                return;
            }
            g.DrawLines(Pens.Blue pts);

            PointF p = new PointF();
            PointF tp = new PointF();
            int j = 0;
            int n = (pts.Length - 1)/ 3; //绘制Bezier曲线条数
            double  d = 0.1; //t的取值间隔
            for (int i = 0; i < n; i++)
            {
                j = 3 * i;
                tp = pts[j];
                    for (double t =d; t <=1-d; t = t + d)
                    {
                        p.X = (float)(Math.Pow(1 - t 3) * pts[j].X + 3 * t * Math.Pow(1 - t 2) * pts[j+1].X +
                            3 * Math.Pow(t 2) * (1 - t) * pts[j+2].X + Math.Pow(t 3) * pts[j+3].X);
                        p.Y = (float)(Math.Pow(1 - t 3) * pts[j].Y + 3 * t * Math.Pow(1 - t 2) * pts[j+1].Y +
                            3 * Math.Pow(t 2) * (1 - t) * pts[j+2].Y + Math.Pow(t 3) * pts[j+3].Y);
                        g.DrawLine(Pens.Red tp p);
                        tp = p;
                    }
                    g.DrawLine(Pens.Red tp pts[j+3]);
            }
        }
        //矩阵相乘获得曲线上一点xy的坐标
        private PointF GetPoint(double tint[] MatrixPointF[] pts)
        {
            double x = 0 y = 0;
            double[] tp = new double[4];
            double[] temp = { Math.Pow(t 3) Math.Pow(t 2)t1};
                for (int j = 0; j <4; j++)
                {
                    for (int k = 0; k <4; k++)
                    {
                        tp[j] = tp[j] + temp[k] * Matrix[k j];
                    }
                }
            //
                for (int j = 0; j < 4; j++)
                {
                    x = x + tp[j] * pts[j].X;
                    y=  y +  tp[j] *pts[j].Y;
                }
                return new PointF((float)x (float)y);
        }
            //三次样条绘制曲线

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        634  2013-11-28 23:39  曲线的生成算法(good)\曲线数据.txt

     文件      14848  2018-08-10 15:06  曲线的生成算法(good)\曲线的生成算法\bin\Debug\曲线的生成算法.exe

     文件      38400  2018-08-10 15:06  曲线的生成算法(good)\曲线的生成算法\bin\Debug\曲线的生成算法.pdb

     文件      21472  2018-08-10 15:07  曲线的生成算法(good)\曲线的生成算法\bin\Debug\曲线的生成算法.vshost.exe

     文件        490  2018-04-12 07:35  曲线的生成算法(good)\曲线的生成算法\bin\Debug\曲线的生成算法.vshost.exe.manifest

     文件       8469  2013-12-19 16:56  曲线的生成算法(good)\曲线的生成算法\FrmMain.cs

     文件       5116  2013-12-01 14:24  曲线的生成算法(good)\曲线的生成算法\FrmMain.Designer.cs

     文件       6342  2013-12-01 14:24  曲线的生成算法(good)\曲线的生成算法\FrmMain.resx

     文件        789  2018-08-10 15:06  曲线的生成算法(good)\曲线的生成算法\obj\x86\Debug\DesignTimeResolveAssemblyReferences.cache

     文件       6864  2018-08-10 15:06  曲线的生成算法(good)\曲线的生成算法\obj\x86\Debug\DesignTimeResolveAssemblyReferencesInput.cache

     文件       2697  2018-08-10 15:07  曲线的生成算法(good)\曲线的生成算法\obj\x86\Debug\曲线的生成算法.csproj.FileListAbsolute.txt

     文件        776  2017-12-11 21:29  曲线的生成算法(good)\曲线的生成算法\obj\x86\Debug\曲线的生成算法.csproj.GenerateResource.Cache

     文件       1757  2018-08-10 15:06  曲线的生成算法(good)\曲线的生成算法\obj\x86\Debug\曲线的生成算法.csprojResolveAssemblyReference.cache

     文件      14848  2018-08-10 15:06  曲线的生成算法(good)\曲线的生成算法\obj\x86\Debug\曲线的生成算法.exe

     文件        180  2018-08-10 15:06  曲线的生成算法(good)\曲线的生成算法\obj\x86\Debug\曲线的生成算法.FrmMain.resources

     文件      38400  2018-08-10 15:06  曲线的生成算法(good)\曲线的生成算法\obj\x86\Debug\曲线的生成算法.pdb

     文件        180  2018-08-10 15:06  曲线的生成算法(good)\曲线的生成算法\obj\x86\Debug\曲线的生成算法.Properties.Resources.resources

     文件        504  2013-12-01 11:34  曲线的生成算法(good)\曲线的生成算法\Program.cs

     文件       1374  2013-12-01 11:33  曲线的生成算法(good)\曲线的生成算法\Properties\AssemblyInfo.cs

     文件       2893  2013-12-01 11:33  曲线的生成算法(good)\曲线的生成算法\Properties\Resources.Designer.cs

     文件       5612  2013-12-01 11:33  曲线的生成算法(good)\曲线的生成算法\Properties\Resources.resx

     文件       1107  2013-12-01 11:33  曲线的生成算法(good)\曲线的生成算法\Properties\Settings.Designer.cs

     文件        249  2013-12-01 11:33  曲线的生成算法(good)\曲线的生成算法\Properties\Settings.settings

     文件       3604  2013-12-01 11:47  曲线的生成算法(good)\曲线的生成算法\曲线的生成算法.csproj

     文件        905  2013-12-01 11:34  曲线的生成算法(good)\曲线的生成算法.sln

    ..A..H.     16896  2013-12-19 16:57  曲线的生成算法(good)\曲线的生成算法.suo

    ..A..H.     39424  2018-08-10 15:07  曲线的生成算法(good)\曲线的生成算法.v11.suo

    ..AD...         0  2014-01-20 00:02  曲线的生成算法(good)\曲线的生成算法\obj\x86\Debug\TempPE

     目录          0  2018-08-10 15:06  曲线的生成算法(good)\曲线的生成算法\obj\x86\Debug

     目录          0  2017-12-13 21:49  曲线的生成算法(good)\曲线的生成算法\bin\Debug

............此处省略9个文件信息

评论

共有 条评论