贝塞尔曲线gdi

转载 2015年07月09日 09:49:11


1.画贝塞尔曲线

DrawBezier(Pen pen, Point pt1, Point pt2, Point pt3, Point pt4)
DrawBezier(Pen pen, PointF pt1, PointF pt2, PointF pt3, PointF pt4)
DrawBezier(Pen pen, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)
DrawBeziers(Pen pen, Point[] points)
DrawBeziers(Pen pen, PointF[] points)
复制代码
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            //创建画板从Paint事件中的直接引用Graphics对象
            Graphics graphics = e.Graphics;
            graphics.Clear(Color.Black);

            //定义画笔
            Pen pen = new Pen(Color.White, 3.0f);

            Point p1 = new Point(100, 100);
            Point p2 = new Point(200, 400);
            Point p3 = new Point(400, 400);
            Point p4 = new Point(500, 100);

            graphics.DrawBezier(pen, p1, p2, p3, p4);
        }

2. 绘制曲线

复制代码
        DrawCurve(Pen pen, Point[] points)
        DrawCurve(Pen pen, PointF[] points)
        
        //tension:大于或等于 0.0F 的值,该值指定曲线的张力。
        DrawCurve(Pen pen, Point[] points, float tension)
        DrawCurve(Pen pen, PointF[] points, float tension)

        //offset:从 points 参数数组中的第一个元素到曲线中起始点的偏移量。
        //numberOfSegments: 起始点之后要包含在曲线中的段数。
        DrawCurve(Pen pen, PointF[] points, int offset, int numberOfSegments)
        DrawCurve(Pen pen, Point[] points, int offset, int numberOfSegments, float tension)
        DrawCurve(Pen pen, PointF[] points, int offset, int numberOfSegments, float tension)
复制代码
复制代码
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            //创建画板从Paint事件中的直接引用Graphics对象
            Graphics graphics = e.Graphics;
            graphics.Clear(Color.Black);

            //定义画笔
            Pen pen = new Pen(Color.White, 3.0f);

            //定义点坐标
            Point[] points = { 
                         new Point(50,50),
                         new Point(100,25),
                         new Point(200,5),
                         new Point(250,50),
                         new Point(300,100),
                         new Point(350,200),
                         new Point(250,250)
                     };
            graphics.DrawCurve(pen, points, 0.5f);
        }
复制代码

     第三个参数是张力(平滑度),如果等于0.0的话就是线段了,相当于DrawLines,越接近1.0越光滑。如果大于1.0的出现异常结果。


3.画封闭曲线

复制代码
DrawClosedCurve(Pen pen, Point[] points)
DrawClosedCurve(Pen pen, PointF[] points)

//tension:大于或等于 0.0F 的值,该值指定曲线的张力。
//fillmode:System.Drawing.Drawing2D.FillMode 枚举的成员,它确定填充曲线的方式。需要此参数但被忽略。
DrawClosedCurve(Pen pen, Point[] points, float tension, FillMode fillmode)
DrawClosedCurve(Pen pen, PointF[] points, float tension, FillMode fillmode)
复制代码
复制代码
private void Form1_Paint(object sender, PaintEventArgs e)
        {
            //创建画板从Paint事件中的直接引用Graphics对象
            Graphics graphics = e.Graphics;
            graphics.Clear(Color.Black);

            //定义画笔
            Pen pen = new Pen(Color.White, 3.0f);

            //定义点坐标
            Point[] points = { 
                         new Point(50,50),
                         new Point(100,25),
                         new Point(200,5),
                         new Point(250,50),
                         new Point(300,100),
                         new Point(350,200),
                         new Point(250,250)
                     };
            graphics.DrawClosedCurve(pen, points);
        }

史上最全的贝塞尔曲线(Bezier)全解(一):初识贝塞尔曲线

作为一个有只志向的码农,除了知道一些基本的知识够自己努力搬砖以外,还应该get一些更炫酷的技能,用更优雅的姿势进行搬砖;想要实现一些十分炫酷的效果,贝塞尔曲线就必须进行一些研究了; 最近一段时...
  • sangxiaonian
  • sangxiaonian
  • 2016年07月21日 16:20
  • 2309

两张图教你使用二三阶贝塞尔曲线

Bézier curve(贝塞尔曲线)是应用于二维图形应用程序的数学曲线。 曲线定义:起始点、终止点(也称锚点)、控制点。通过调整控制点,贝塞尔曲线的形状会发生化。 1962年,法国数学家Pierre...
  • DylanZhuang
  • DylanZhuang
  • 2016年07月13日 11:32
  • 6357

二次贝塞尔曲线长度

二次贝塞尔曲线通常以如下方式构建,给定二维平面上的固定点P0,P1,P2,用B(t)表示该条曲线 用一个动画来演示,可以更加清楚的表明这条曲线的构建过程 如果t变量本身线形变化的话,这条...
  • LANGZI7758521
  • LANGZI7758521
  • 2016年08月03日 11:06
  • 1034

cubic-bezier贝塞尔曲线CSS3动画工具

工具及应用 这里给出两个在线动画调试工具。 cubic-bezier还是比较少用到,PC端中,有浏览器不兼容。但是手机端中,可以使用并带来炫酷的动画及体验。 缓动函数速查表: http:...
  • qq_25600055
  • qq_25600055
  • 2016年04月02日 19:45
  • 9706

一分钟就懂贝塞尔曲线

转载:http://gold.xitu.io/entry/574d1fb61532bc00607b62a9 相信很多同学都知道“贝塞尔曲线”这个词,我们在很多地方都能经常看到。但是,可能并不是每位同...
  • LGGisKing
  • LGGisKing
  • 2016年06月30日 15:50
  • 2392

求二次、三次贝塞尔曲线的某个时间的位置及切线方向

Public Module BezierHelper     '''     ''' 获得二次贝塞尔曲线在某个时刻的位置     ''' B(t) = P0(1-t)^2+ 2P1t(1-t) + ...
  • llimite
  • llimite
  • 2016年11月24日 09:34
  • 1639

绘制贝塞尔样条曲线

一条二维贝塞尔曲线样条曲线使用四个点定义:两个端点和两个控点。两个端点表示曲线的起点和终点。控点就好像 “磁铁” 一样把曲线从两个端点的直线处吸弯。两个端点是固定的,两个控点可以改变,按住鼠标左键并拖...
  • chaoyuan899
  • chaoyuan899
  • 2013年02月07日 22:04
  • 3355

一张图带你彻底了解二阶贝塞尔曲线

上一篇自定义View中,贝塞尔曲线出现的频率很高,有小伙伴就问到关于贝塞尔曲线控制点坐标怎么计算的问题。一阶贝塞尔曲线是一条直线,确定起点终点即可,三阶贝塞尔曲线有两个控制点,相对比较复杂,不容易控制...
  • tyk0910
  • tyk0910
  • 2016年06月10日 12:31
  • 10764

贝塞尔曲线扫盲

贝塞尔曲线扫盲 相信很多同学都知道“贝塞尔曲线”这个词,我们在很多地方都能经常看到。但是,可能并不是每位同学都清楚地知道,到底什么是“贝塞尔曲线”,又是什么特点让它有这么高的知名度。 ...
  • cdnight
  • cdnight
  • 2015年09月15日 15:46
  • 17440

Android 利用属性动画结合贝塞尔曲线方程编写好看的动画.

研究一下贝塞尔曲线. /** * 贝塞尔方程 */ private class BeizerEvaluator implements TypeEvaluator { ...
  • u010316858
  • u010316858
  • 2015年07月15日 14:35
  • 4040
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:贝塞尔曲线gdi
举报原因:
原因补充:

(最多只允许输入30个字)