- 浏览: 1095581 次
- 性别:
- 来自: 杭州
-
文章分类
- 全部博客 (695)
- 心情日记 (14)
- AS开发工具 (12)
- 文章转载 (99)
- AIR (5)
- 问题总结 (46)
- SWF格式 (7)
- 测试总结 (10)
- 外文资料 (9)
- 算法技术 (33)
- AS3常用开源库 (43)
- 源码范例 (102)
- FLEX (72)
- FLASH 优化 (33)
- 游戏开发 (49)
- 开发技术 (11)
- 工作应用 (34)
- AS3收集 (140)
- WebBase (0)
- 开发构想 (4)
- 设计模式 (2)
- 框架和框架范例 (19)
- RED5 (3)
- java开发 (3)
- JAVA (1)
- FLASH-3D (23)
- 3D (6)
- 书籍 (10)
- 业界信息资料 (3)
- C# (1)
- JavaScript (12)
- HTML5 (6)
- Flixel (1)
- D5Power RPG网页游戏引擎 (0)
- ColorMatrixFilter - 获得相应颜色的色调 函数 (0)
- Starling (0)
最新评论
-
老顽童203:
字体
水果忍者鼠标跟随特效制作[转载] -
hairball00:
[转] 放出超多的Flash组件源代码 -
he74552775:
flash AS3 RegExp简单功能用法(转) -
hanshuai1232000:
第四点,有利也有弊,等你做了大型的aprg,你就知道了
[转]位图数据内存优化 -
yangfantao:
太感谢
[转] 放出超多的Flash组件源代码
http://bbs.9ria.com/viewthread.php?tid=71904&extra=page%3D1%26amp;orderby%3Ddateline%26amp;filter%3D86400
新年快到了,再也忍不住几个月不发帖了,这贴主要内容有:
1)n次方贝塞尔曲线(以1-10阶次为例子)
2)n次方贝塞尔曲线(Can Move版)(曲线可以移动,而效率不错哟,包括10次贝塞尔曲线)
3)n次方贝塞尔曲线(等分)(简单版等分,详细在
http://bbs.9ria.com/thread-24082-1-1.html
中,不同的是,俺不使用复杂的公式)
新年系列之——n次贝塞尔曲线AS再现出发!!
以俺的思路讲解,如果有必要的话,看看其他资料,保证对不明白贝塞尔曲线的兄弟们了解提升 一大步。
看看二次、三次的贝塞尔曲线公式:
其公式主要成分为基函数(贝塞尔曲线计算耗时的原因),基函数推导过程(以二次为例):
如此类推。。。所有的基函数数值都能计算出来
如果你还是一头汗!!那也没关系,先看看代码,基函数的代码
二次贝塞尔曲线一个点要计算出6次基函数数值,因此越平滑,越高阶的贝塞尔曲线,会越折磨CPU的。
要画出一个贝塞尔曲线的一个点在上面的第一张图中已经看出了,所以完整的帧代码为:
5阶次的贝塞尔曲线
10阶次的贝塞尔曲线
1阶次的贝塞尔曲线
那么,要移动10阶次的贝塞尔曲线,需要怎么做?
一切都是基函数的问题,就从他入手。
假设需要画100个点(已经可以画出很平滑的曲线了)
var sep:int = 100;
复制代码
如果阶次肯定地话,基函数的数值也就肯定了,如10阶次,一个点x坐标、y坐标分别需要计算出11个基函数数值。
把它保存起来
var datas:Array = [];
复制代码
以后需要的时候使用,这样就会得到意识不到的效果。(当然,3次贝塞尔曲线就足以模拟n次贝塞尔曲线,as3.0也是如此,但是做出实实在在的n次贝塞尔曲线,实在 )
效果图(移动前):
效果图(移动后):
效果图: 下载 (41.44 KB)
初始化时CPU会高一些,此后CPU都十分理想。哈哈,代码会在最后给出。
本帖最后由 shen_0_ 于 2011-1-7 18:37 编辑
http://bbs.9ria.com/thread-24082-1-1.html 帖子已经解答出等分的问题,但是考虑其效果的用途,可以再简单一些
我使用一个点
var p:Point=P_BEZ(0,sz);
复制代码
将曲线大致跟踪了一次(画的同时)
在画的时候不是画出真正的贝塞尔曲线,而是画出其相似的等分线段:
当然密集时会产生不理想的效果
这个教程告一段落! 新的一年要更加努力呀!!!!
新年快到了,再也忍不住几个月不发帖了,这贴主要内容有:
1)n次方贝塞尔曲线(以1-10阶次为例子)
2)n次方贝塞尔曲线(Can Move版)(曲线可以移动,而效率不错哟,包括10次贝塞尔曲线)
3)n次方贝塞尔曲线(等分)(简单版等分,详细在
http://bbs.9ria.com/thread-24082-1-1.html
中,不同的是,俺不使用复杂的公式)
新年系列之——n次贝塞尔曲线AS再现出发!!
以俺的思路讲解,如果有必要的话,看看其他资料,保证对不明白贝塞尔曲线的兄弟们了解提升 一大步。
看看二次、三次的贝塞尔曲线公式:

其公式主要成分为基函数(贝塞尔曲线计算耗时的原因),基函数推导过程(以二次为例):

如此类推。。。所有的基函数数值都能计算出来
如果你还是一头汗!!那也没关系,先看看代码,基函数的代码
function BEZ(n:int,k:int,t:Number):Number {//基函数 return C(n,k)*Math.pow(t,k)*Math.pow(1-t,n-k); } function C(n:int,k:int):Number {//组合排序 var son:int=jie_cheng(n); var mother:int=jie_cheng(k)*jie_cheng(n-k); return son/mother; } function jie_cheng(i:int):int {//阶乘 var n:int=1; for (var j:int=1; j<=i; j++) { n*=j; } return n; }
二次贝塞尔曲线一个点要计算出6次基函数数值,因此越平滑,越高阶的贝塞尔曲线,会越折磨CPU的。
要画出一个贝塞尔曲线的一个点在上面的第一张图中已经看出了,所以完整的帧代码为:
var points:Array = []; var sp:Sprite=new Sprite(); var n:int = 5; addChild(sp); draw_points(points,n); function P_BEZ(t:Number,sz:Array):Point {//n次 var x_p:Number = 0; var y_p:Number = 0; var n:int = sz.length; for (var i:int=0; i<sz.length; i++) { var b:Number = BEZ(n - 1,i,t); x_p += sz[i].x * b; y_p+=sz[i].y*b; } return (new Point(x_p,y_p)); } function BEZ(n:int,k:int,t:Number):Number {//基函数 return C(n,k)*Math.pow(t,k)*Math.pow(1-t,n-k); } function C(n:int,k:int):Number {//组合排序 var son:int=jie_cheng(n); var mother:int=jie_cheng(k)*jie_cheng(n-k); return son/mother; } function jie_cheng(i:int):int {//阶乘 var n:int=1; for (var j:int=1; j<=i; j++) { n*=j; } return n; } function draw_points(sz:Array,n:int):void { sz.length=0; for (var i:int=0; i<=n; i++) { sz[i]=new Point(800*Math.random(),500*Math.random()); draw_point(sz[i]); } draw_lines(sz); sp.graphics.lineStyle(2,0xff0000); var p:Point=P_BEZ(0,sz); sp.graphics.moveTo(p.x,p.y); for (var j:Number=0; j<1; j+=0.01) { p=P_BEZ(j,sz); sp.graphics.lineTo(p.x,p.y); } p=P_BEZ(1,sz); sp.graphics.lineTo(p.x,p.y); } function draw_point(p:Point):void {//画点 sp.graphics.lineStyle(0); sp.graphics.drawCircle(p.x,p.y,3); } function draw_lines(sz:Array):void {//画边 sp.graphics.lineStyle(0,0,0.3); sp.graphics.moveTo(sz[0].x,sz[0].y); for (var i:int=0; i<sz.length; i++) { var p:Point=sz[i]; sp.graphics.lineTo(p.x,p.y); } }
5阶次的贝塞尔曲线

10阶次的贝塞尔曲线

1阶次的贝塞尔曲线

那么,要移动10阶次的贝塞尔曲线,需要怎么做?
一切都是基函数的问题,就从他入手。
假设需要画100个点(已经可以画出很平滑的曲线了)
var sep:int = 100;
复制代码
如果阶次肯定地话,基函数的数值也就肯定了,如10阶次,一个点x坐标、y坐标分别需要计算出11个基函数数值。
把它保存起来
var datas:Array = [];
复制代码
以后需要的时候使用,这样就会得到意识不到的效果。(当然,3次贝塞尔曲线就足以模拟n次贝塞尔曲线,as3.0也是如此,但是做出实实在在的n次贝塞尔曲线,实在 )
效果图(移动前):

效果图(移动后):

效果图: 下载 (41.44 KB)

初始化时CPU会高一些,此后CPU都十分理想。哈哈,代码会在最后给出。
本帖最后由 shen_0_ 于 2011-1-7 18:37 编辑
http://bbs.9ria.com/thread-24082-1-1.html 帖子已经解答出等分的问题,但是考虑其效果的用途,可以再简单一些
我使用一个点
var p:Point=P_BEZ(0,sz);
复制代码
将曲线大致跟踪了一次(画的同时)
在画的时候不是画出真正的贝塞尔曲线,而是画出其相似的等分线段:

当然密集时会产生不理想的效果

这个教程告一段落! 新的一年要更加努力呀!!!!
- n次方贝塞尔.rar (243.1 KB)
- 下载次数: 49
评论
1 楼
xellosssky
2011-03-07
感谢楼主分享,最想做连接2点的随机曲线,用了万有引力公式,结果一个点变成另一个点的“卫星”,不断的绕着转了……
。现在可以尝试下贝塞尔曲线公式了

发表评论
-
HttpStatusConfig --一个HTTP 协议返回的 解析说明类
2012-04-18 16:40 0package guwanyuan.qicool.game ... -
HTTP/1.1协议规范(中文归纳版)
2012-04-18 16:39 2179一、介绍(introduction) ... -
[转] [Flash/Flex] 加载SWF性能VS影片剪辑性能
2012-03-15 22:29 0http://bbs.9ria.com/viewthread. ... -
关于富士通windows 7家庭普通板升级为windows 7旗舰版
2012-03-05 14:51 2054windows7普通家庭版不能一下升级到windows7旗舰版 ... -
水果忍者鼠标跟随特效制作[转载]
2012-03-01 16:06 2480实现这效果其实比较简单,主要是思路~! package ... -
请问如何才能让加载到一半的SWF不自动播放
2012-02-29 03:06 1564我用loader加载l=new Loader(); ... -
禁止输入文本可以粘贴
2012-02-10 13:15 2341//禁止输入文本粘贴动作 private static ... -
江湖情缘游戏里的跳的类
2012-02-08 23:55 0package com.app.role.montions ... -
[教程] 路点导航(Waypoint Navigation)
2011-12-31 00:51 0前言:这个不难,所以知道的童鞋不要喷,不知道的童鞋也不要怕,要 ... -
ARPG游戏引擎设计思路
2011-12-31 00:48 00.整体结构 下载 (32.92 KB ... -
Embed绑定XML与txt文本文件
2011-12-28 15:54 4681使用Embed标签可以将图片绑定到swf中并显示,那么我 ... -
Flash_Rich_Text_Editor(完美的富文本编辑器)
2011-12-27 17:55 0Flash_Rich_Text_Editor(完美的富文 ... -
弹弹堂测试
2011-12-08 04:21 0弹弹堂测试弹弹堂测试 -
一些DEMO
2011-11-28 17:42 0一些DEMO一些DEMO -
Matrix学习
2011-11-28 16:51 0Matrix学习 -
[转]三次贝尔曲线
2011-11-10 01:09 1954http://bbs.9ria.com/viewt ... -
[心得] 完美解决as3在ie中初始化时stageWidth和stageHeight为0的问题
2011-11-03 00:46 2963先看下面的一段脚本,这是比较经典的初始化脚本: pa ... -
五子棋算法详解
2011-10-31 04:14 0五子棋算法详解五子棋算法详解五子棋算法详解 -
[转]服务器端ActionScript语言参考
2011-10-31 00:29 0服务器端ActionScript语言参考 -
[转]FLASH与JS序列简单应用
2011-10-28 01:03 2118FLASH与JS序列简单应用 (一) 用swfob ...
相关推荐
根据控制点的数量不同,贝塞尔曲线可以分为线性贝塞尔曲线(一次)、二次贝塞尔曲线、三次贝塞尔曲线等。本文将重点介绍二次贝塞尔曲线及其在C#中的实现方法。 #### 二、二次贝塞尔曲线简介 二次贝塞尔曲线是由三个...
一个简单的策略是将360度的圆弧等分为n段,每一段对应一个三次贝塞尔曲线。对于更小的圆弧,可以根据其弧度相对于360度的比例来决定分段数。 **控制点的确定** 得到分段数后,接下来的任务是确定每个三次贝塞尔...
三次贝塞尔曲线是贝塞尔曲线中的一种,其特点是具有四个控制点,包括起点、终点以及两个控制点。三次贝塞尔曲线能够提供足够的灵活性来近似较为复杂的曲线形状。 总结来说,圆弧与贝塞尔曲线的互相转换是一个复杂但...
利用 De Casteljau算法生成n次的贝塞尔曲线 , 为了实现军标
此外,对于学习者来说,了解贝塞尔曲线的性质,如线性不等价性(改变控制点的位置不会改变曲线的形状)、平滑性(曲线在控制点处的切线可通过相邻控制点确定)和可分解性(任何三次贝塞尔曲线都可以拆分成两个二次...
贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线。一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋,我们...
这篇关于“C#/WPF二次贝塞尔曲线”的主题将深入探讨二次贝塞尔曲线的概念、参数方程以及如何在C# WPF应用中实现它的绘制。 二次贝塞尔曲线是一种由两个控制点和一个起始点及结束点定义的参数曲线。这种曲线在图形...
用TC生存二次贝塞尔曲线,其实稍微改一下就可以实现三次贝塞尔曲线的了。
三次贝塞尔曲线是一种在计算机图形学中广泛应用的数学模型,常用于曲线的平滑插值和形状设计。本文将深入探讨三次贝塞尔曲线的基本概念、数学公式、OpenGL实现及其在可视化中的应用。 三次贝塞尔曲线是由四个控制点...
java 二次贝塞尔曲线算法,根据起点、终点和控制点输出点集合
本篇文章将深入探讨两个关键概念:三次样条插值和贝塞尔曲线,以及它们在VC++环境中的实现。我们将通过分析标题和描述提供的信息,结合标签中的关键词,来详细阐述这两个概念及其在实际编程中的应用。 首先,我们来...
一阶贝塞尔曲线就是简单的线段,二阶贝塞尔曲线则类似于一个平滑的三次方曲线,以此类推。 本项目提供的源码是基于VS2013的工程,因此它兼容Microsoft的C++编译器,并且应该可以直接在Visual Studio环境中打开和...
3. **统一方法**:贝塞尔曲线的表示方式可以统一处理不同类型的曲线,如直线、二次曲线(抛物线、椭圆部分)和三次曲线。这意味着,无论曲线的复杂程度如何,处理和编辑的方法保持一致,减少了学习曲线,并提高了...
Qt 中有相当方便的绘制接口 ( 由 QPainter 提供 ) 。 例如贝塞尔曲线的 API: QPainterPath 的 quadTo() 和 ...因此,我想到利用贝塞尔的公式生成曲线点,然后用直线来连接,即可实现「 N阶贝塞尔曲线绘制 」。
三次贝塞尔曲线是一种在计算机图形学中广泛应用的数学模型,用于创建平滑的曲线路径。它的名字来源于法国工程师皮埃尔·贝塞尔(Pierre Bézier),他在20世纪60年代初发展了这种曲线。三次贝塞尔曲线由四个控制点...
最常见的是一阶贝塞尔曲线(线段),二阶贝塞尔曲线(三次方贝塞尔曲线)和三阶贝塞尔曲线(四次方贝塞尔曲线)。在VBA中,可以通过数学公式来计算曲线上的任意点位置。 二阶贝塞尔曲线的公式如下: B(t) = (1 - t)...
C++实现的三次贝塞尔曲线绘制,可拖动控制点修改曲线形状,包含源代码和可执行文件,VS2008的工程。 C++实现的三次贝塞尔曲线绘制,可拖动控制点修改曲线形状,包含源代码和可执行文件,VS2008的工程。
根据控制点的数量,贝塞尔曲线可以分为线性贝塞尔曲线(两个控制点)、二次贝塞尔曲线(三个控制点)和三次贝塞尔曲线(四个控制点)。更复杂的曲线可以通过连接多个贝塞尔曲线段来实现。 在Delphi中,使用...
贝塞尔曲线的基本形式是线性贝塞尔曲线,之后扩展到二次和三次贝塞尔曲线,更复杂的曲线可以通过组合这些基本形式来实现。线性贝塞尔曲线由两个控制点定义,二次贝塞尔曲线需要三个控制点,而三次贝塞尔曲线需要四个...