「玩一玩」贝塞尔曲线,以及用鼠标和贝塞尔曲线交互

问题描述

by野比喵这段时间感觉很蛋疼。。虽然各种游戏玩的很开心。。还是多少要学习一下呗。。做了个小东西,贴出来得瑟下。。能力有限,就先这么着了。别试图找我要任何代码之类的。。我只是个amateur,这种帖子认真你就输了。。别试图接分。。那是不可能的。。当你对生活不满意,工作不满意,妹妹不满意。。。如果不想付出金钱去改变,活该苦逼。如果不想付出精力去改变,活该苦逼。如果不想付出生命去改变,活该苦逼。如果不能忍受别人的鄙视,亲,请给别人一个不鄙视你的理由先。。其实这篇没什么技术含量,类似Photoshop里的“钢笔”工具。。(代码里面的招数我经常用,可以在前面的帖子里翻到。。前半部分是理论,可以在数学书上翻。后半部分是实践,其实很简单。。正文开始贝塞尔曲线贝塞尔曲线(TheBézierCurves),是一种在计算机图形学中相当重要的参数曲线(2D,3D的称为曲面)。贝塞尔曲线于1962年,由法国工程师皮埃尔·贝塞尔(PierreBézier)所发表,他运用贝塞尔曲线来为汽车的主体进行设计。线性曲线给定点P0、P1,线性贝塞尔曲线只是一条两点之间的直线。这条线由下式给出:当参数t变化时,其过程如下:线性贝塞尔曲线函数中的t会经过由P0至P1的B(t)所描述的曲线。例如当t=0.25时,B(t)即一条由点P0至P1路径的四分之一处。就像由0至1的连续t,B(t)描述一条由P0至P1的直线。二次曲线二次方贝塞尔曲线的路径由给定点P0、P1、P2的函数B(t)追踪:为建构二次贝塞尔曲线,可以中介点Q0和Q1作为由0至1的t:*由P0至P1的连续点Q0,描述一条线性贝塞尔曲线。*由P1至P2的连续点Q1,描述一条线性贝塞尔曲线。*由Q0至Q1的连续点B(t),描述一条二次贝塞尔曲线。二次曲线看起来就是这样的:三次曲线为建构高阶曲线,便需要相应更多的中介点。对于三次曲线,可由线性贝塞尔曲线描述的中介点Q0、Q1、Q2,和由二次曲线描述的点R0、R1所建构。P0、P1、P2、P3四个点在平面或在三维空间中定义了三次方贝塞尔曲线。曲线起始于P0走向P1,并从P2的方向来到P3。一般不会经过P1或P2;这两个点只是在那里提供方向资讯。P0和P1之间的间距,决定了曲线在转而趋进P3之前,走向P2方向的“长度有多长”。曲线的参数形式为:看起来就是这样的:高阶曲线更高阶的贝塞尔曲线,可以用以下公式表示:用表示由点P0、P1、…、Pn所决定的贝塞尔曲线。则有:更多的关于贝塞尔曲线的内容,你可以去查阅各种数学书。加油,求知的骚年。应用在几乎所有的高级图像软件中,均使用到了三次贝塞尔曲线来实现“平滑曲线”绘制功能。例如Photoshop中的“钢笔”,CoralDraw中的“贝塞尔工具”,Fireworks中的“画笔”。在编程中实现计算机绘图要“画”出贝塞尔曲线,一般需要进行较多的计算,然后绘制出来,类似这样:绘制的代码可以在各类计算机图形学书籍中找到。GDI+幸运的是,GDI+已经封装好了贝塞尔曲线的绘制代码,如果你想画出贝塞尔曲线,只用调用方法:这是一个三次贝塞尔曲线,其中4个点分别为:起点,起点控制点,终点,终点控制点。绘制出来的效果如下:与鼠标的交互怎么实现Photoshop里那样可以调整的贝塞尔曲线呢?两种方法:*输入新参数生成曲线*用鼠标交互调整曲线很显然第二种看起来会拉风很多,那么就来试试看。你想要获得是这样的效果:这是一条三次贝塞尔曲线,图中应该这样解读:所以需要几个需要解决的:*表示贝塞尔曲线的锚点和控制点*绘制曲线和控制点/控制柄*鼠标交互看起来不是很难的样子,那么就来化整为零,各个击破吧。锚点对于三次贝塞尔曲线而言,有两个锚点:起始点和结束点。每个锚点有两个坐标:本身坐标和控制点坐标。于是,可以用这样的类来描述:三次贝塞尔曲线三次曲线前面已经说过原理了,那么它的结构应该就是这样的:画出来为了简单,就用一个最基本的渲染器来画,代码如下:画出曲线和控制点及其手柄:画出来的效果就是这样的:鼠标交互和鼠标实际上是这样交互的:*按下鼠标,如果落点在某个控制点上,就表示选中了该点,否则落空*移动鼠标,如果选中了某个控制点,则调整控制点坐标至新坐标,否则忽略*放开鼠标,取消任何选择看起来只需要处理MouseDown,MouseMove和MouseUp这三个事件就够了,很容易嘛。先弄一个全局标记:然后处理鼠标事件:MouseDown:MouseMove:MouseUp:为了简单,刷新就这么弄了:更高效的刷新应该只处理脏区。效果最后看起来就像这样。就这么简单。扩展和优化要实现Photoshop那种曲线效果,需要多个锚点连接起来。上面的方法在效率上也还有可以提高的地方。怎么办?自己看着办。(完)(C)Conmajia2013

解决方案

本帖最后由 conmajia 于 2013-01-27 02:33:26 编辑
解决方案二:
野比又出新玩意了
解决方案三:
不错的算法普及贴,顶一下。
解决方案四:
粉丝前来报到
解决方案五:
刚起床
解决方案六:
很好的,顶起来
解决方案七:
很好的,我也顶起
解决方案八:
菜鸟出来学习喽!!!
解决方案九:
请问你这些图是如何搞出来的呢?看起来很不错!
解决方案十:
菜鸟级别只能是默默的学习
解决方案十一:
好东西,顶了
解决方案十二:
厉害,能提供完整的代码工程吗?我按照你的说明,写出来的工程,一运行报错。
解决方案十三:
该回复于2013-06-23 12:28:41被版主删除
解决方案十四:
报错了就解决错误。。
解决方案十五:
呵呵不错
解决方案:
该回复于2016-01-31 23:18:07被版主删除
解决方案:
很好的,顶起来
解决方案:
ding一下
解决方案:

解决方案:
野比又开始玩了。
解决方案:
哇塞呵呵这太神奇了
解决方案:

解决方案:

解决方案:
接下来程序里面又要添加自由画笔了,又得记录不少点,还得记录点雨点之间的默认记录间隔,是否要填充绘制的区域呢?还得区分不同的需求,真麻烦
解决方案:

解决方案:
GOOD。我喜欢诶
解决方案:

解决方案:
很好,最好再形象一点就更好了
解决方案:
认真你就输了
解决方案:

解决方案:

解决方案:

解决方案:
拜读啦

解决方案:

解决方案:
我也share一个wpfversion
解决方案:
强人,向你学习
解决方案:
引用34楼nonocast的回复:

我也share一个wpfversionhttp://nonocast.cn/wpf-note-bezier/

引用34楼nonocast的回复:

我也share一个wpfversionhttp://nonocast.cn/wpf-note-bezier/

小清新咩。。改了下renderer。。向你靠齐。。
解决方案:

解决方案:

解决方案:
初步了解了贝塞尔曲线。。。有没有具体的应用呢?原来大家文章都发论坛啊,难怪我发博客没人看呢
解决方案:

解决方案:
不错,长见识了
解决方案:
挺复杂的,有空学学。
解决方案:
正在看graphicsPath,学习贝塞尔曲线,这个太及时了
解决方案:
111111111111111
解决方案:
好复杂啊,不用上半个月看不明折
解决方案:
活该苦逼
解决方案:
很有意思的贴子
解决方案:
表示没看完,但是赞一个
解决方案:
该回复于2016-01-31 23:18:07被版主删除
解决方案:
野比出东西必须来看看

时间: 2024-09-05 13:28:24

「玩一玩」贝塞尔曲线,以及用鼠标和贝塞尔曲线交互的相关文章

拇指玩」制作的「谷歌安装器」app

作者:匿名用户链接:https://www.zhihu.com/question/57468448/answer/153000587来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 先说Google 服务框架Google 服务框架全称 Google Mobile Service,其中包括了应用包,也就是我们希望用到的各种 Google 应用.Android 虽然开源且自由,但 Google 的应用程序并不包含其中,它们都属于 Google 的知识产权.所以厂家们预装

「玩一玩」功能强大 纯GDI+渲染的语法高亮编辑器控件 支持折叠、书签和代码缩略图等各种高级功能

问题描述 这个控件是纯GDI+绘图的,适用于.NET/.NETCF2.0,高版本.NET也是可以兼容的.代码缩略图(类似SublimeText)这些powerful的高级特性需要额外写一些代码,在DEMO里面已经有了,伸手党有福了.WPF党欢迎参与改良.但是如果你拿不出东西只是要秀优越,请有多远滚多远.lambda党同上.当然,蠢笨如我这文章是翻译乌克兰人PavelTorgashov的.之前翻译过他的,这两个控件可以完美兼容.先放出下载链接,满足下只要源码不要原理的码农们..至于不看这里回帖留邮

30万、70万和1000万,AI行业的第一仗是「挖人大战」

AI行业的第一仗是「挖人大战」 在今年春季招聘黄金档,对AI(人工智能)人才的抢夺"不计代价".抢不到人,就什么都别谈了.春节前的一天,闵万里突然有些好奇,想看看邮箱里自2016年1月以来收到过多少份职位邀约.最终的数字吓了他一跳--700多封,相当于一天收两封来自各路猎头的邮件.挖他的短信.电话.邮件,"有时候一天收到好几个,刚开始我还认真回复,后来实在烦了." 闵万里是阿里云的人工智能科学家,像他这样,从事人工智能研究的科学家如今奇货可居.连他手下团队里的中层和

Expression Design 4 - Chapter 3 看小光被包围了!!如何活用「Text On Path」设计效果

本章将教大家如何活用「Text On Path」,做出文绕图以及文字线性排列的效果 也可以学到如何使用Polyline以及B-Spline 范例最后成果图片: 跟着做,就能做初出跟范例一样的效果了! 01 我在网路上找了一张小光的图片来做修改 你可以下载文末的范例专桉来跟着做,或是使用自己喜欢的图片来进行 置入图片后,我们还需要一点文字,请到这个网站複製文字 複製完成后,请点选Text(快捷键T),随意的把刚刚的文字贴在画面上 02 接下来,我们要把文字绕着小光排列,所以需要使用Polyline

一份数学小白也能读懂的「马尔可夫链蒙特卡洛方法」入门指南

在我们中的很多人看来,贝叶斯统计学家不是巫术师,就是完全主观的胡说八道者.在贝叶斯经典方法中,马尔可夫链蒙特卡洛(Markov chain Monte Carlo/MCMC)尤其神秘,其中数学很多,计算量很大,但其背后原理与数据科学有诸多相似之处,并可阐释清楚,使得毫无数学基础的人搞明白 MCMC.这正是本文的目标. 那么,到底什么是 MCMC 方法?一言以蔽之: MCMC 通过在概率空间中随机采样以近似兴趣参数(parameter of interest)的后验分布. 我将在本文中做出简短明了

JAVA内存学习1——玩一玩StackOverFlowError和OutOfMemoryError

最近开始看周志明老师的<深入理解JAVA虚拟机>,只看不写不是好程序员,故记下一些心得和代码,作为留念. 第二章自动内存管理机制 P40 看到书中有提到StackOverFlowError和OutOfMemoryError,弄出来玩一玩.  static void getOutOfMemoryError(){         List<int[]> list = new LinkedList<int[]>();         for(int i=0;i<1000

该叫「我的电脑」还是「你的电脑」?

本文讲的是该叫「我的电脑」还是「你的电脑」?, "我的电脑"的变化历程 还记得以前使用 Windows 系统时我的电脑的图标吗?这个经典的小图标表示你在这台电脑上拥有的所有文件,所有的项目.工作资料以及各种数据等等. 而微软将最新 Windows 系统中的这个图标更名为**"电脑"(Computer),然后又将之改成"本机"(This PC)**.这样的修改是否因为"我的"这个用法给人带来了理解的误导.语义的不协调或者是根本没

报名|「OneAPM x DaoCloud」技术公开课:Docker性能监控!

如今,越来越多的公司开始 Docker 了,「三分之二的公司在尝试了 Docker 后最终使用了它」,也就是说 Docker 的转化率达到了 67%,同时转化时长也控制在 60 天内. 既然 Docker 这么火,Docker 监控是不是也该提上日程?或许具体问题要具体分析,但是似乎大家都在寻找新一代 Docker 监控的工具. 本次技术公开课将会给大家带来全方位的 Docker 实践,从监控之道到监控方案,让你了解到 Docker 实时性能状况,精准定位到性能薄弱的环节,从而优化应用,让监控之

3.15 晚会—「饿了么」之殇

一.开题有随想 3 月 15 号晚上的 315 晚会,相信很多人都记忆深刻,「饿了么」.「淘宝」等多家知名互联网厂商都被报出了负面的消息,BAT 中的百度也因为群众对其积攒的「怨气」又一次在微博形成热搜. 其实我们稳下心来想一想,拿饿了么举例,315 所报出的一些问题并没有我们想的那么严重:门店环境良好自然是大家心里期望的,可是当我们用低廉的价格在外卖平台上购餐的时候,谁心里都明白,这不可能是五星级酒店做出来的:而且,除非是在比较高端的餐厅或者酒店中,否则,尝菜这种做法并不少见. 那么真正让大众