样条曲线catmull rom转bezier
b0,..,b3是贝塞尔,c-1, c2是catmull rom控制点
[b0] = 1 [ 0 6 0 0] [c_1]
[b1] - [-1 6 1 0] [c0]
[b2] 6 [ 0 1 6 -1] [c1]
[b3] [ 0 0 6 0] [c2]
Qt版本代码:
QList<QPointF> cps;
cps.append(QPointF(, ));
cps.append(QPointF(, ));
cps.append(QPointF(, ));
cps.append(QPointF(, ));
cps.append(QPointF(, )); QPainter p(this); //draw control point
foreach(const QPointF& pos, cps)
p.drawEllipse(pos, , ); QPainterPath path;
//create bezier from catrull-rom
/*
full conversion matrix (inverse bezier * catmull-rom): 4*4(matrix, 4* 1(catrull-rom control points)
0.000, 1.000, 0.000, 0.000,
-0.167, 1.000, 0.167, 0.000,
0.000, 0.167, 1.000, -0.167,
0.000, 0.000, 1.000, 0.000 conversion doesn't require full matrix multiplication,
so below we simplify
*/
path.moveTo(cps.first());
QPointF prevFar, prev, point, next;
for(int i = ; i < cps.size(); i ++)
{
int prevFarIdx = i - ;
int prevIdx = i - ;
int nextIdx = i + ;
point = cps[i];
if(prevIdx >= )
prev = cps[prevIdx];
else
prev = point;
if(prevFarIdx >= )
prevFar = cps[prevFarIdx];
else
prevFar = prev;
if(nextIdx < cps.size())
next = cps[nextIdx];
else
next = point; QPointF control1(prevFar.x() * qreal(-0.167) +
prev.x() +
point.x() * qreal(0.167),
prevFar.y() * qreal(-0.167) +
prev.y() +
point.y() * qreal(0.167)); QPointF control2(prev.x() * qreal(0.167) +
point.x() +
next.x() * qreal(-0.167),
prev.y() * qreal(0.167) +
point.y() +
next.y() * qreal(-0.167)); path.cubicTo(control1, control2, point);
}
p.drawPath(path);
参考:
1. http://stackoverflow.com/questions/1030596/drawing-hermite-curves-in-opengl
样条曲线catmull rom转bezier的更多相关文章
- Cocos Creator 动作(动画)笔记
动作cc.ActionInterval 和cc.ActionInstant; var action = cc.moveTo(2, 100, 100); // 创建一个移动动作node.runActio ...
- 样条之CatmullRom
所谓样条曲线是指给定一组控制点而得到一条曲线,曲线的大致形状由这些点予以控制,一般可分为插值样条和逼近样条两种,插值样条通常用于数字化绘图或动画的设计,逼近样条一般用来构造物体的表面.CatmullR ...
- cocos学习
第一章 JavaScript 快速入门 1.1 变量 在 JavaScript 中,我们像这样声明一个变量: var a; 保留字 var 之后紧跟着的,就是一个变量名,接下来我们可以为变量赋值: v ...
- Cocos2d-x 3.2 Lua演示样本 ActionTest(操作测试)
Cocos2d-x 3.2 Lua演示样本 ActionTest(操作测试) 2014年博文大赛,请投上您宝贵的一票:http://vote.blog.csdn.net/Article/Details ...
- Cocos2d-x 3.2 学习笔记(八)Action
Action -动作.所有精灵的表现,人机交互的表现,都是动作.cocos2dx 里面封装的动作可谓是丰富! Action有三个子类 1.FiniteTimeAction类是所有在有限时间能够完成的动 ...
- Unity中DOTween插件的DOTweenPath轨迹移动
先来看一下DOTweenPath组件的截图 1.Scene View Commands (1)SHIFT+CTRL:add a waypoint 加一个轨迹点 (2)SHIFT+ALT: ...
- [翻译] ios-image-filters
ios-image-filters https://github.com/esilverberg/ios-image-filters photoshop-style filter interface ...
- 解析DXF图形文件格式
一.DXF文件格式分析 DXF文件由标题段.表段.块段.实体段和文件结束段5部分组成,其内容如下. ☆标题段(HEADER)标题段记录AutoCAD系统的所有标题变量的当前值或当前状态.标题变量记录了 ...
- UE制作PBR材质攻略Part 1 - 色彩知识
目录 一.前言 二.色彩知识 2.1 色彩理论 2.1.1 成像原理 2.1.2 色彩模型和色彩空间 2.1.3 色彩属性 2.1.4 直方图 2.1.5 色调曲线 2.1.6 线性空间与Gamma空 ...
随机推荐
- [Java][Web]Request 实现转发和 MVC 设计模式
String data = "aaaaa"; request.setAttribute("data",data); // 将数据存在 request reque ...
- springmvc和activemq的整合使用
1.简介:ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台 ...
- C++:const_cast类型转换
针对const_cast,太多人在用同一个示例问同一个问题:void main(){ const int a = 3; const int *pc = &a; int *p = c ...
- Java - 将 List 等分(最后一部分处理多余部分)
背景 今天由于要使用多线程,所以事先需要确定启动线程个数.于是需要先将集合进行分配,确定线程的个数. 解决方案 首先是实现 public static <T> List<List&l ...
- 全连接BP神经网络
前馈神经网络 前馈神经网络(feedforward neural network)是最朴素的神经网络,通常我们所说的前馈神经网络有两种,一种叫反向传播网络(Back propagation Netwo ...
- [z]兼容IE6的相对于浏览器窗口定位
http://blog.uedsc.com/css-position.html http://www.w3cmm.com/notepad/css-position.html http://sofish ...
- 使用COM口的2、3针的通断作为中端源(有一个读图像的摄像头,当把卡插到位时触发中端,防止在插卡的过程中出现不稳定的图像)
利用串口2读,串口3发数据的特点.建立不断的发送流,再从接收端接收.如果收到,则数据畅通,否则断开.相当于产生一个中断.这样电脑对外部事件可作出反应. using System;using Syste ...
- c#中如何获取本机用户名、MAC地址、IP地址、硬盘ID、CPU序列号、系统名称、物理内存
我们在利用C#开发桌面程序(Winform)程序的时候, 经常需要获取一些跟系统相关的信息, 以下这些代码获取能有些用处. c#中如何获取本机用户名.MAC地址.IP地址.硬盘ID.CPU序列号.系统 ...
- 跟我学算法-SVM(支持向量机)
支持向量机是一个点离决策边界越近,离决策面越远的问题 求解的过程主要是通过拉格朗日乘子法,来求解带约束的优化问题,在问题中涉及两个方面,一个是线性的,一个是非线性的,非线性的有 我们平时比较常见的高斯 ...
- RocketMQ初探(四)之RocketMQ4.x版本可视化管理控制台rocketmq-console-ng搭建(Apache)
之前有部署过3.2.6为AliBaba版本的Web监控平台(可参考之前博客 https://www.cnblogs.com/buyige/p/9395453.html),现用RocketMQ4.2.0 ...