C# 实现Bezier曲线(vs2008)
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 doBezier { public partial class Form1 : Form { PointF[] p = new PointF[]; //存储控制点坐标 int count; //记录已输入的控制点个数 Graphics g; //GDI 对象 public Form1() { InitializeComponent(); g = CreateGraphics(); count = ; } private void Form1_Load(object sender, EventArgs e) { } private void Form1_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { if (count == ) //如果输入的是第一个点,先清空窗口 g.Clear(BackColor); g.FillRectangle(Brushes.Red, e.X - , e.Y - , , ); //输出一个标记 p[count] = new PointF(e.X, e.Y); //存储 count ; //记录输入控制点个数 return; } else { PointF q1 = new PointF(); PointF q2 = new PointF(); double u; for (int i = ; i <= ; i )//生成100个点并连成折线 { u = (double)i / 100.0; if (i == ) { q1 = deCasteljau(u); } else { q2 = deCasteljau(u); g.DrawLine(Pens.Black, q1, q2); q1.X = q2.X; q1.Y = q2.Y; } } count = ; return; } } PointF deCasteljau(double u) //曲线参数为u,函数返回一个二维点 { int i, k; //以下将控制点数组p[],复制到数组q[] PointF[] q = new PointF[]; for (i = ; i < count; i ) { q[i].X = p[i].X; q[i].Y = p[i].Y; } //以下用de Casteljau割角算法计算bezier曲线上参数点u对应的x,y, //计算完成后,结果存储在q[0] for (k = ; k < count; k ) for (i = ; i < count - k; i ) { q[i].X = (float)(1.0 - u) * q[i].X (float)u * q[i ].X; q[i].Y = (float)(1.0 - u) * q[i].Y (float)u * q[i ].Y; } return new PointF(q[].X, q[].Y); } private void Form1_Paint(object sender, PaintEventArgs e) { } } }
C# 实现Bezier曲线(vs2008)的更多相关文章
- Bezier曲线的原理 及 二次Bezier曲线的实现
原文地址:http://blog.csdn.net/jimi36/article/details/7792103 Bezier曲线的原理 Bezier曲线是应用于二维图形的曲线.曲线由顶点和控制点组成 ...
- [摘抄] Bezier曲线、B样条和NURBS
Bezier曲线.B样条和NURBS,NURBS是Non-Uniform Rational B-Splines的缩写,都是根据控制点来生成曲线的,那么他们有什么区别了?简单来说,就是: Bezier曲 ...
- 连续bezier曲线的实现
需求场景 一系列的坐标点,划出一条平滑的曲线 3次Bezier曲线 基本上大部分绘图工具都实现了3次Bezier曲线,4个点确定一条3次Bezier曲线.以html5中的canvas为例 let ct ...
- 7.5.5编程实例-Bezier曲线曲面绘制
(a)Bezier曲线 (b) Bezier曲面 1. 绘制Bezier曲线 #include <GL/glut.h> GLfloat ct ...
- 实验6 Bezier曲线生成
1.实验目的: 了解曲线的生成原理,掌握几种常见的曲线生成算法,利用VC+OpenGL实现Bezier曲线生成算法. 2.实验内容: (1) 结合示范代码了解曲线生成原理与算法实现,尤其是Bezier ...
- 简单而粗暴的方法画任意阶数Bezier曲线
简单而粗暴的方法画任意阶数Bezier曲线 虽然说是任意阶数,但是嘞,算法原理是可以到任意阶数,计算机大概到100多阶就会溢出了 Bezier曲线介绍] [本文代码] 背景 在windows的Open ...
- python bezier 曲线
1.手写bezier公式,生成bezier代码, 如果给的点数过多,则会生成一半bezier曲线,剩下的一半就需要进行拼接: import numpy as np import matplotlib. ...
- iOS Bezier曲线
https://www.jianshu.com/p/2316f0d9db65 1. Bezier曲线 相关软件:PaintCode:可以直接画图,软件根据图像生产Bezier曲线 相关概念:UIBez ...
- Bezier曲线的实现——de Casteljau算法
这学期同时上了计算机图形学和计算方法两门课,学到这部分的时候突然觉得de Casteljau递推算法特别像牛顿插值,尤其递推计算步骤很像牛顿差商表. 一开始用伯恩斯坦多项式计算Bezier曲线的时候, ...
随机推荐
- ASP.NET MVC自定义异常处理
1.自定义异常处理过滤器类文件 新建MyExceptionAttribute.cs异常处理类文件
- 判断Excel版本信息
可以通过获取application对应的Version属性获取当前打开的Excel的版本信息(Application.Version).
- 好文章之——PHP系列(一)
注:最近实习的公司是一家做电商企业,后台主要是php开发,好久不怎么接触php的我看了几篇相关文章,提高下对它的认识与理解,发现里面的学习思路还是非常好的,当然也会重新拾一下基础知识啦! 其实自己心中 ...
- linux 单引号,双引号,反引号的小总结。
还是老惯例说说事情的起因,由于最开始对linux下面的各种引号并不是特别敏感,导致有一天我在添加数据库字段的时候出现的错误,当时出现错误的原因是我在最外层使用了单引号进行包裹,然后一句话里面需要转意的 ...
- Java之Logger日志(Java8特性)
import java.util.logging.Level; import java.util.logging.Logger; public class LoggingDemo { public s ...
- Java之枚举类范例
代码如下: package catf.component.http.model; /** * @Auther:gongxingrui * @Date:2018-04-17 * @Description ...
- P3201 [HNOI2009]梦幻布丁
题目描述 N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色. 输入输出格式 输入格式: 第 ...
- day6 三级菜单
#__author__: Administrator #__date__: 2018/7/12 china = { "shandong":{ "linyi":[ ...
- python3.5 opencv3显示视频fps
由于要进行多路视频的处理,所以fps就很重要 fps介绍 模板: 1.获取某一时刻的fps import time while True: start_time = time.time() # sta ...
- MT【229】最小值函数
已知定义域为$R$的函数,$f(x),g(x)$满足:$f(x)+g(x)=e^{-x^2+1}$,则$min\{f(x),g(x)\}$的最大值为______ 解答:$min\{f(x),g(x)\ ...