20130521:任意轨迹库中添加19条轨迹。按屏幕矩形边界上有16个点,连接起点P_i和终点P_j的轨迹平均有3条计算,任意轨迹库最多约有240*3=720条轨迹。
20130522-20130523:用MFC开发3阶以下贝塞尔曲线轨迹编辑工具供策划使用,3阶以下贝塞尔曲线轨迹编辑工具Bezier3Tool开发完成。

一阶贝赛尔曲线(线段):B(t)=(1-t)P_0+tP_1,t∈[0,1]
意义:由起点P_0到终点P_1的连续点,描述一条线段。
没有控制点。
二阶贝塞尔曲线(抛物线):B(t)=(1-t)^2P_0+2t(1-t)P_1+t^2P_2,t∈[0,1]
有1个控制点P_1。
三阶贝塞尔曲线:B(t)=(1-t)^3P_0+3t(1-t)^2P_1+3t^2(1-t)P_2+P_3t^3,t∈[0,1]
有2个控制点P_1、P_2。

轨迹大类5:起点为右边界上的点,终点为上边界上的点
构造轨迹起点为P_9(w,0.25h)=(1024,162.5),轨迹终点为P_16(w/6,h)=(170.7,650)的第一种轨迹Trace_9_16_1、第二种轨迹Trace_9_16_2、第三种轨迹Trace_9_16_3、第四种轨迹Trace_9_16_4的LUA代码:
function Trace_9_16_1(t)
          --轨迹起点为P_9(w,0.25h)=(1024,162.5),轨迹终点为P_16(w/6,h)=(170.7,650)的第一种轨迹
          --local P_9=ccp(1024,162.5)
          local a=1100
          local x=1024-a*t
          local y=0.00047*(x-1200)*(x-1200)+147.94
          return ccp(x,y)
end
function Trace_9_16_2(t)
          --轨迹起点为P_9(w,0.25h)=(1024,162.5),轨迹终点为P_16(w/6,h)=(170.7,650)的第二种轨迹
          --local P_9=ccp(1024,162.5)
          local a=1100
          local x=1024-a*t
          local y=-0.00048*x*x+663.986
          return ccp(x,y)
end
function Trace_9_16_3(t)
          --轨迹起点为P_9(w,0.25h)=(1024,162.5),轨迹终点为P_16(w/6,h)=(170.7,650)的第三种轨迹
          local P_9=ccp(1024,162.5)
          local P_16=ccp(170.7,650)
          local tempx=(P_9.x-P_16.x)*(P_9.x-P_16.x);
          local tempy=(P_9.y-P_16.y)*(P_9.y-P_16.y);
          local r=math.sqrt(tempx+tempy);--r=nT=2npiA,n=1,1.5,2,2.5,……
          local A=r/(math.pi*2)--200
          local arg=math.atan2(P_16.y-P_9.y,P_16.x-P_9.x);       
          --轨迹起点为P_9=(350,300),振幅为A,周期为T=2piA,“辐角为arg的反正弦波”曲线轨迹
          --将2调大为2.5
          local x=A*2.5*math.pi*t
          local y=A*math.sin(-2.5*math.pi*t)--+表示"正正弦波",-表示“反正弦波”
          local Pt=ccp(x*math.cos(arg)-y*math.sin(arg),x*math.sin(arg)+y*math.cos(arg))--(x,y)逆时针旋转a=arg之后变为(xcosa-ysina,xsina+ycosa)
          return ccp(P_9.x+Pt.x,P_9.y+Pt.y)       
end
--实际上从上边界出来后又从上边界进来了,最后从左边界出来
function Trace_9_16_4(t)
          --轨迹起点为P_9(w,0.25h)=(1024,162.5),轨迹终点为P_16(w/6,h)=(170.7,650)的第三种轨迹
          local P_9=ccp(1024,162.5)
          local P_16=ccp(170.7,650)
          local tempx=(P_9.x-P_16.x)*(P_9.x-P_16.x);
          local tempy=(P_9.y-P_16.y)*(P_9.y-P_16.y);
          local r=math.sqrt(tempx+tempy);--r=nT=2npiA,n=1,1.5,2,2.5,……
          local A=r/(math.pi*2)--200
          local arg=math.atan2(P_16.y-P_9.y,P_16.x-P_9.x);       
          --轨迹起点为P_9=(350,300),振幅为A,周期为T=2piA,“辐角为arg的正正弦波”曲线轨迹
          --将2调大为2.5
          local x=A*2.5*math.pi*t
          local y=A*math.sin(2.5*math.pi*t)--+表示"正正弦波",-表示“反正弦波”,与Trace_9_16_3不同的地方
          local Pt=ccp(x*math.cos(arg)-y*math.sin(arg),x*math.sin(arg)+y*math.cos(arg))--(x,y)逆时针旋转a=arg之后变为(xcosa-ysina,xsina+ycosa)
          return ccp(P_9.x+Pt.x,P_9.y+Pt.y)       
end
轨迹大类4:起点为右边界上的点,终点为左边界上的点
构造轨迹起点为P_9(w,0.25h)=(1024,162.5),轨迹终点为P_1(0,0.75h)=(0,487.5)的第一种轨迹Trace_9_1_1、第二种轨迹Trace_9_1_2、第三种轨迹Trace_9_1_3、第四种轨迹Trace_9_1_4
的LUA代码:
function Trace_9_1_1(t)
          --轨迹起点为P_9(w,0.25h)=(1024,162.5),轨迹终点为P_1(0,0.75h)=(0,487.5)的第一种轨迹
          --local P_9=ccp(1024,162.5)
          local a=1100
          local x=1024-a*t--与Trace_1_9_1(t)不同的地方
          local y=-0.31738*x+487.5
          return ccp(x,y)
end
--顶点在左边界上、开口向右的抛物线,暂时不采用该轨迹
function Trace_9_1_2(t)
          --轨迹起点为P_9(w,0.25h)=(1024,162.5),轨迹终点为P_1(0,0.75h)=(0,487.5)的第二种轨迹
          --local P_9=ccp(1024,162.5)
          local a=400
          local y=162.5+a*t--与Trace_1_9_2(t)不同的地方
          local x=0.00969*(y-487.5)*(y-487.5)
          return ccp(x,y)
end
function Trace_9_1_3(t)
          --轨迹起点为P_9(w,0.25h)=(1024,162.5),轨迹终点为P_1(0,0.75h)=(0,487.5)的第三种轨迹
          --local P_1=ccp(0,487.5)
          local a=400
          local y=162.5+a*t--与Trace_1_9_3(t)不同的地方
          local x=-0.00485*y*y+1152.63
          return ccp(x,y)
end
--顶点在右边界上、开口向左的抛物线
function Trace_9_1_4(t)
          --轨迹起点为P_9(w,0.25h)=(1024,162.5),轨迹终点为P_1(0,0.75h)=(0,487.5)的第三种轨迹
          --local P_9=ccp(1024,162.5)
          local a=400
          local y=162.5+a*t--与Trace_1_9_4(t)不同的地方
          local x=-0.00969*(y-162.5)*(y-162.5)+1024
          return ccp(x,y)
end
轨迹大类3:起点为左边界上的点,终点为右边界上的点
构造轨迹起点为P_1(0,0.75h)=(0,487.5),轨迹终点为P_9(w,0.25h)=(1024,162.5)的第一种轨迹Trace_1_9_1、第二种轨迹Trace_1_9_2、第三种轨迹Trace_1_9_3、第四种轨迹Trace_1_9_4的LUA代码:
function Trace_1_9_1(t)
          --轨迹起点为P_1(0,0.75h)=(0,487.5),轨迹终点为P_9(w,0.25h)=(1024,162.5)的第一种轨迹
          --local P_1=ccp(0,487.5)
          local a=1100
          local x=a*t
          local y=-0.31738*x+487.5
          return ccp(x,y)
end
function Trace_1_9_2(t)
          --轨迹起点为P_1(0,0.75h)=(0,487.5),轨迹终点为P_9(w,0.25h)=(1024,162.5)的第二种轨迹
          --local P_1=ccp(0,487.5)
          local a=400
          local y=487.5-a*t
          local x=0.00969*(y-487.5)*(y-487.5)
          return ccp(x,y)
end
function Trace_1_9_3(t)
          --轨迹起点为P_1(0,0.75h)=(0,487.5),轨迹终点为P_9(w,0.25h)=(1024,162.5)的第三种轨迹
          --local P_1=ccp(0,487.5)
          local a=400
          local y=487.5-a*t
          local x=-0.00485*y*y+1152.63
          return ccp(x,y)
end
--顶点在右边界上、开口向左的抛物线,暂时不采用该轨迹
function Trace_1_9_4(t)
          --轨迹起点为P_1(0,0.75h)=(0,487.5),轨迹终点为P_9(w,0.25h)=(1024,162.5)的第三种轨迹
          --local P_1=ccp(0,487.5)
          local a=400
          local y=487.5-a*t
          local x=-0.00969*(y-162.5)*(y-162.5)+1024
          return ccp(x,y)
end
轨迹大类2:起点为左边界上的点,终点为上边界上的点
问:构造轨迹起点为P_1,轨迹终点为P_12时的第一种轨迹Trace_1_12_1、第二种轨迹Trace_1_12_2?
构造轨迹起点为P_1(0,0.75h)=(0,487.5),轨迹终点为P_12(5w/6,h)=(853.3,650)的第一种轨迹Trace_1_12_1、第二种轨迹Trace_1_12_2、第三种轨迹Trace_1_12_3、第四种轨迹Trace_1_12_4的LUA代码:
function Trace_1_12_1(t)
          --轨迹起点为P_1(0,0.75h)=(0,487.5),轨迹终点为P_12(5w/6,h)=(853.3,650)的第一种轨迹
          --local P_1=ccp(0,487.5)
          local a=950
          local x=a*t
          local y=0.19044*x+487.5
          return ccp(x,y)
end
function Trace_1_12_2(t)
          --轨迹起点为P_1(0,0.75h)=(0,487.5),轨迹终点为P_12(5w/6,h)=(853.3,650)的第二种轨迹
          --local P_1=ccp(0,487.5)
          local a=950
          local x=a*t
          local y=0.00075*(x-300)*(x-300)+420
          return ccp(x,y)
end
function Trace_1_12_3(t)
          --轨迹起点为P_1(0,0.75h)=(0,487.5),轨迹终点为P_12(5w/6,h)=(853.3,650)的第三种轨迹
          --local P_1=ccp(0,487.5)
          local a=950
          local x=a*t
          local y=0.00204*(x-380)*(x-380)+192.924
          return ccp(x,y)
end
--与x轴有两个交点、开口向上的抛物线,暂时不采用该轨迹
function Trace_1_12_4(t)
          --轨迹起点为P_1(0,0.75h)=(0,487.5),轨迹终点为P_12(5w/6,h)=(853.3,650)的第四种轨迹
          --local P_1=ccp(0,487.5)
          local a=950
          local x=a*t
          local y=0.00357*(x-400)*(x-400)-83.7
          return ccp(x,y)
end
轨迹大类1:起点为左边界上的点,终点为下边界上的点
问:构造轨迹起点为P_1、轨迹终点为P_8的第一种轨迹Trace_1_8_1、第二种轨迹Trace_1_8_2、第三种轨迹Trace_1_8_3?
不妨取:
y=a/(x-c)+b=11840/(x-877)+500
y=-ax^2+b=-0.00067x^2+487.5
y=ce^(-ax)-b=500e^(-0.0043x)-12.5
【连接P_1(0,0.75h)=(0,487.5)和P_8(5w/6,0)=(853.3,0)线段的中点为(5w/12,0.375h),则该双曲线的上凸关键点为?该抛物线的上凸关键点为?该指数曲线的下凸关键点为?】

代数曲线的单值化:
直线y=kx+b的一个参数方程为:x=at,y=kat+b,t∈[0,1]
双曲线y=a/(x-c)+b=11840/(x-877)+500的一个参数方程为:x=at,y=11840/(at-877)+500,t∈[0,1],这里a>=x(P_8)-x(P_1)=5w/6=853.3

构造轨迹起点为P_1(0,0.75h)=(0,487.5),轨迹终点为P_8(5w/6,0)=(853.3,0)的第一种轨迹Trace_1_8_1、第二种轨迹Trace_1_8_2、第三种轨迹Trace_1_8_3的LUA代码:
function Trace_1_8_1(t)
          --轨迹起点为P_1(0,0.75h)=(0,487.5),轨迹终点为P_8(5w/6,0)=(853.3,0)的第一种轨迹
          --local P_1=ccp(0,487.5)
          local a=854
          local x=a*t
          local y=11840/(x-877)+500
          return ccp(x,y)
end
function Trace_1_8_2(t)
          --轨迹起点为P_1(0,0.75h)=(0,487.5),轨迹终点为P_8(5w/6,0)=(853.3,0)的第二种轨迹
          --local P_1=ccp(0,487.5)
          local a=854
          local x=a*t
          local y=-0.00067*x*x+487.5
          return ccp(x,y)
end
function Trace_1_8_3(t)
          --轨迹起点为P_1(0,0.75h)=(0,487.5),轨迹终点为P_8(5w/6,0)=(853.3,0)的第三种轨迹
          --local P_1=ccp(0,487.5)
          local a=854
          local x=a*t
          local y=500*math.exp(-0.0043*x)-12.5
          return ccp(x,y)
end
参数:
屏幕矩形的宽和高
w=1024
h=650
轨迹起点和轨迹终点
左边界上3个点
P_1=ccp(0,0.75h)
P_2=ccp(0,0.5h)
P_3=ccp(0,0.25h)
下边界5个点
P_4=ccp(w/6,0)
P_5=ccp(w/3,0)
P_6=ccp(w/2,0)
P_7=ccp(2w/3,0)
P_8=ccp(5w/6,0)
右边界3个点
P_11=ccp(w,0.75h)
P_10=ccp(w,0.5h)
P_9=ccp(w,0.25h)
上边界5个点
P_16=ccp(w/6,h)
P_15=ccp(w/3,h)
P_14=ccp(w/2,h)
P_13=ccp(2w/3,h)
P_12=ccp(5w/6,h)
一款实用的绘制函数图象的小工具http://www.oschina.net/code/snippet_585649_13831
一般平面曲线轨迹测试用例,用于自定义轨迹库和轨迹编辑器的前期工作
y=x+sinx
y=x^3/8
圆锥曲线Ax^2+Bxy+Cy^2+Dx+Ey+F=0
双曲余弦曲线y=(e^x+e^(-x))/2
蔓叶线x^3+y^3=3axy
y^2=x^3
x^3-y^3=2x^2
3x^2-10y^2=17
指数曲线y=ax^x(a>0且a≠1)
x^3-4x-2y=0<=>y=x^3/2-2x
定理:过原点的代数曲线,令曲线中的一次项之和等于0,就得到了曲线在原点的切线方程。这个结论对任何过原点的代数曲线都是有效的。
x^2-y^2+x^3=0
4x^2-2y^2+x^3=0
抛物线y=ax^2
阿基米德螺线r=aθ
星形线x^(2/3)+y^(2/3)=a^(2/3),这一方出现于莱布尼兹于1715年的信函中。
y=lnx
心脏线r=2a(1±cosθ)
卡西尼卵形线
贝努里双纽线
悬链线y=ach(x/a)
摆线,第一篇关于摆线的论文是伽利略的学生托里拆利在1644年写的。
等角螺线或对数螺线r=aexp(θcotρ)
费马螺线或抛物螺线


3阶以下贝塞尔曲线轨迹库和任意轨迹库相关推荐

  1. 轨迹规划-贝塞尔曲线

    1. 简介 贝塞尔曲线于 1962 年,由法国工程师皮埃尔·贝济埃(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计,贝塞尔曲线最初由保尔·德·卡斯特里奥于1959年运用 ...

  2. java实现的三阶贝塞尔曲线_n 阶贝塞尔曲线计算公式实现

    n 阶贝塞尔曲线计算公式实现 关于贝塞尔曲线是什么,可以用来做什么,这里就不再介绍,如果你还不了解,可以先去看看下面这篇文章:贝塞尔曲线扫盲 1. 效果参考 2. 思路解析 百度百科上给出的一般参数公 ...

  3. n 阶贝塞尔曲线计算公式实现

    n 阶贝塞尔曲线计算公式实现 关于贝塞尔曲线是什么,可以用来做什么,这里就不再介绍,如果你还不了解,可以先去看看下面这篇文章:贝塞尔曲线扫盲 1. 效果参考 2. 思路解析 百度百科上给出的一般参数公 ...

  4. 过三点的二次贝塞尔曲线及其升阶

    贝塞尔曲线(Bézier curve)是计算机图形学中相当重要的参数曲线,Photoshop 中的钢笔效果,Flash5 的贝塞尔曲线工具都是它在计算机图形学中的具体应用. 贝塞尔曲线由法国雷诺汽车公 ...

  5. 贝塞尔曲线开发的艺术

    贝塞尔曲线开发的艺术 一句话概括贝塞尔曲线:将任意一条曲线转化为精确的数学公式. 很多绘图工具中的钢笔工具,就是典型的贝塞尔曲线的应用,这里的一个网站可以在线模拟钢笔工具的使用: http://bez ...

  6. 贝塞尔曲线算法之JS获取点

    什么是贝塞尔曲线? 贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线. 这个一阶贝塞尔曲线绘制过程,黑点按百分比t从P0->P1移动,看不出什 ...

  7. html5贝塞尔曲线,用canvas绘制一个曲线动画——深入理解贝塞尔曲线

    前言 在前端开发中,贝赛尔曲线无处不在: 它可以用来绘制曲线,在svg和canvas中,原生提供的曲线绘制都是使用贝赛尔曲线 它也可以用来描述一个缓动算法,设置css的transition-timin ...

  8. android path基本使用以及贝塞尔曲线入门

    今天周一,产品要求版本迭代到1.5.3,发现需求没啥东西,后台暂时也给不了数据,于是又有时间写博客了,这是我很喜欢的模式,今天讲下path的基本使用以及贝塞尔曲线入门,后期会讲些贝塞尔曲线结合动画的效 ...

  9. dotween曲线运动 unity_【Unity3d游戏开发】游戏中的贝塞尔曲线以及其在Unity中的实现...

    RT,马三最近在参与一款足球游戏的开发,其中涉及到足球的各种运动轨迹和路径,比如射门的轨迹,高吊球,香蕉球的轨迹.最早的版本中马三是使用物理引擎加力的方式实现的足球各种运动,后来的版本中使用了根据物理 ...

最新文章

  1. 「小程序JAVA实战」小程序的视频展示页面初始化(63)
  2. stella forum v1.2 用例分析
  3. 深入SecureFile—新一代LOB揭秘000
  4. C/C++ 之 C发展史及 各标准特性说明
  5. netstat命令查看套接字信息
  6. UOJ #592. 投放点的选择
  7. Kinect+OpenNI+OpenCV使用
  8. spock 集成测试_Spock 1.2 –轻松进行集成测试中的Spring Bean模拟
  9. Hadoop未授权访问漏洞记录(影响版本:全版本,端口号:50070)
  10. C语言经典100例-6
  11. Matlab中pickic_MATLAB中uigetfile命令的应用
  12. Python:井字棋游戏
  13. 移动通信基础(8)帧结构
  14. kangle安装php7.0_搭建Kangle+EasyPanel对接SWAP IDC虚拟主机自助开通完整教程
  15. 安卓adb问题处理总结
  16. dellnas存储服务器型号,Dell Storage NX系列NAS存储
  17. ios备忘录下载安卓版_安利3款手机实用软件,安卓和ios都有份
  18. 激光雷达(二)——三角测距法和TOF原理
  19. 网站推广-----100个基本推广方法
  20. 报账系统总结(1):路由分配/数据库/主页/注册/登陆

热门文章

  1. 视频安全之授权播放和防录屏跑马灯
  2. 利用51单片机进行LED 跑马灯设计
  3. 智慧城市建设热潮下怎么抢占先机?
  4. 隐藏Detected problems with API compatibility警告弹窗
  5. 实用的网页加密源码,附四种模板风格
  6. python pyqt5 打开文件夹 读取文件列表
  7. 独家|陆金所IPO幕后事:内部高管看空、P2P存量难消、兑付方案未果
  8. about s3c44b0
  9. css找某个元素的下个子元素,css判断某元素的子元素个数并分别设置样式的方法...
  10. 局域网访问mysql