spline曲线绘制
导入头文件 CELLMath.hpp

1.初始化spline对象 定义几个关键点 根据时间t插值 获得点集合
2.进行绘制

#include <math.h>
#include "CELLMath.hpp"
#include "OpenGLWindow.h"
#include <vector>using namespace CELL;class   SamplerSpline :public OpenGLWindow
{public:std::vector<float3> _array;tspline<float> _spline;SamplerSpline(){_spline.addPoint(float3(10,10,0));_spline.addPoint(float3(20,100,0));_spline.addPoint(float3(100,80,0));_spline.addPoint(float3(200,100,0));_spline.addPoint(float3(300,10,0));_spline.addPoint(float3(400,150,0));for(float t=0;t<1.0f;t+=0.01f){float3 pos = _spline.interpolate(t);_array.push_back(pos);}}virtual void    render(){#define M_PI (3.14159265358979323846)//! 指定以下的操作针对投影矩阵glMatrixMode(GL_PROJECTION);//! 将投影举证清空成单位矩阵glLoadIdentity();glOrtho(0,_width,_height,0,-100,100);glEnableClientState(GL_VERTEX_ARRAY);glVertexPointer(3,GL_FLOAT,sizeof(float3),&_array[0]);glDrawArrays(GL_LINE_STRIP,0,_array.size()); }
};int __stdcall WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{SamplerSpline    instance;instance.main(800,600);return  0;
}

spline曲线编辑
1.画出关键点
2.重写鼠标监听事件 处理点击之后 对曲线的重新计算

#include <windows.h>
#include <tchar.h>
#include <math.h>
#include "CELLMath.hpp"
#include "OpenGLWindow.h"
#include <vector>using namespace CELL;class   SamplerSplineEditor :public OpenGLWindow
{public:std::vector<float3> _array;std::vector<float3> _keys;tspline<float> _spline;bool _isButtonDown;size_t _selectIndex;POINT _mouseOld;SamplerSplineEditor(){_isButtonDown = false;_selectIndex = -1;_spline.addPoint(float3(10,10,0));_spline.addPoint(float3(20,100,0));_spline.addPoint(float3(100,80,0));_spline.addPoint(float3(200,100,0));_spline.addPoint(float3(300,10,0));_spline.addPoint(float3(400,150,0));for(float t=0;t<1.0f;t+=0.01f){float3 pos = _spline.interpolate(t);_array.push_back(pos);}for(int i=0;i<_spline.getNumPoints();++i){_keys.push_back(_spline.getPoint(i));}}virtual void    render(){#define M_PI (3.14159265358979323846)//! 指定以下的操作针对投影矩阵glMatrixMode(GL_PROJECTION);//! 将投影举证清空成单位矩阵glLoadIdentity();glOrtho(0,_width,_height,0,-100,100);glEnableClientState(GL_VERTEX_ARRAY);glVertexPointer(3,GL_FLOAT,sizeof(float3),&_array[0]);glDrawArrays(GL_LINE_STRIP,0,_array.size()); glPointSize(8);glVertexPointer(3,GL_FLOAT,sizeof(float3),&_keys[0]);glDrawArrays(GL_POINTS,0,_keys.size());}virtual LRESULT events(HWND hWnd,UINT msgId, WPARAM wParam, LPARAM lParam){switch(msgId){case WM_CLOSE:case WM_DESTROY:{PostQuitMessage(0);}break;case  WM_LBUTTONDOWN:{_isButtonDown   =   true;_selectIndex    =   -1;POINT   pt  =  {LOWORD(lParam),HIWORD(lParam)};_mouseOld   =   pt;for (size_t i = 0 ;i< _keys.size() ; ++ i){RECT    rt;rt.left =   _keys[i].x - 4;rt.right =   _keys[i].x + 4;rt.top =   _keys[i].y - 4;rt.bottom =   _keys[i].y + 4;if (PtInRect(&rt,pt)){_selectIndex    =   i;break;}}}break;case WM_LBUTTONUP:{_isButtonDown   =   false;_selectIndex    =   -1;}break;case WM_MOUSEMOVE:{if (_isButtonDown && _selectIndex != -1){POINT   pt  =   {LOWORD(lParam),HIWORD(lParam)};POINT   off =   {   pt.x - _mouseOld.x,pt.y - _mouseOld.y};_mouseOld   =   pt;_keys[_selectIndex].x   +=  off.x;_keys[_selectIndex].y   +=  off.y;_spline.getPoint(_selectIndex).x    +=  off.x;_spline.getPoint(_selectIndex).y    +=  off.y;_spline.recalcTangents();_array.clear();for (float t = 0 ; t < 1.0f; t += 0.01f){float3  pos =   _spline.interpolate(t);_array.push_back(pos);}}}break;default:return DefWindowProc(hWnd, msgId, wParam, lParam);}return  0;}
};int __stdcall WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{SamplerSplineEditor    instance;instance.main(800,600);return  0;
}

spline曲线使用相关推荐

  1. Unity利用Curvy Spline插件生成曲线,并使物体沿生成的曲线运动

    插件下载: 网络资源 Assets Store 我用的是Curvy Splines - 7.1.4.导入后场景中会出现如下界面. 创建曲线 https://blog.csdn.net/cordova/ ...

  2. aitken插值方法的c++代码_无人驾驶路径规划技术-三次样条插值曲线及Python代码实现...

    自动驾驶运动规划(Motion Planning)是无人驾驶汽车的核心模块之一,它的主要任务之一就是如何生成舒适的.碰撞避免的行驶路径和舒适的运动速度.生成行驶路径最经典方法之一就是是Sampling ...

  3. Spline导数及曲率计算

    0 前言 曲率的公式为: 因此求曲率的重点在于获得拟合曲线的一阶导数和二阶导数. 1 实例1 根据参考资料[5]的提示,可以使用csape()对离散点进行Spline插值,然后使用fnder()对得到 ...

  4. 滑动轨迹 曲线 python_无人驾驶路径规划技术-三次样条插值曲线及Python代码实现...

    自动驾驶运动规划(Motion Planning)是无人驾驶汽车的核心模块之一,它的主要任务之一就是如何生成舒适的.碰撞避免的行驶路径和舒适的运动速度.生成行驶路径最经典方法之一就是是Sampling ...

  5. 【Python基础】科学计算库Scipy简易入门

    0.导语 Scipy是一个用于数学.科学.工程领域的常用软件包,可以处理插值.积分.优化.图像处理.常微分方程数值解的求解.信号处理等问题.它用于有效计算Numpy矩阵,使Numpy和Scipy协同工 ...

  6. Apollo进阶课程㉔丨Apollo 规划技术详解——Motion Planning Environment

    原文链接:进阶课程㉔丨Apollo 规划技术详解--Motion Planning Environment 自动驾驶汽车核心技术包括环境感知.行为决策.运动规划与控制等方面.其中,行为决策系统.运动规 ...

  7. 是Excel的图,不!是R的图

    原文章来源链接:https://brucezhaor.github.io/blog/2016/06/13/excel2ggplot/ 原文章作者:BruceZhaoR(RStats, interest ...

  8. scilab和matlab的区别,matlab 与scilab的比较.doc

    matlab 与scilab的比较 matlab 使用老出错,决定试试scilab. 几个例子来学习 scilab例1: 画等值线的命令//定义一个向量x=[ 1 2 3 ; 1 3 5 ; 8 2 ...

  9. 【CAD.Net】第四课:添加实体类和符号表到图纸

    下面列出所有的常用的CAD实体类 < 类名 类型 Entity 实体 Line 直线 : Solid 体 Circle 圆 Arc 圆弧 Ellipse 椭圆 Polyline 多段线 LWPo ...

  10. 3DSMAX中英文对照大全(从A-Z分类)

    A Absolute Mode Transform Type-in绝对坐标方式变换输入 Absolute/Relative Snap Toggle Mode绝对/相对捕捉开关模式 ACIS Optio ...

最新文章

  1. mysql 和 mongo db 语法对比
  2. html实现带有数字的列表,纯CSS实现雨滴形状的数字序号列表
  3. 10.4.4 使用ctypes调用kernel32.dll中的函数
  4. 简单说说:JavaSE、JavaEE、JavaME这三大体系
  5. 门户网站运营的几个方法
  6. python字典有什么用_Python中的字典介绍
  7. 华为云发布 EI 城市智能体
  8. [Java] 蓝桥杯 BASIC-1 基础练习 闰年判断
  9. 【MySQL】MySQL 5.7 sys Schema
  10. 【原创】MySQL 模拟PostgreSQL generate_series 表函数
  11. c语言中用了double语句,求助 C语言 中 double语句用法
  12. Activiti7 表介绍
  13. PHP+Javascript实现拖动滑块完成拼图验证码
  14. 怎样使用计算机定时关机,win10怎么定时关机?
  15. matlab神经网络工具箱的使用
  16. Windows命令行解决8080端口被占用
  17. [转载] 晓说——第1期:揭秘游戏规则奥斯卡走下“神坛“
  18. 通俗理解拉普拉斯算子(Laplace)
  19. GVM 内存结构 垃圾回收
  20. 服务器安全检测和防御技术

热门文章

  1. dna计算机的主要作用,我国首台DNA计算机 意义重大
  2. Git使用小技巧之挑拣合并
  3. IDEA使用Git大全
  4. 转——韩寒:一个流传多年的谣言
  5. 机器学习和深度学习资源汇总(陆续更新)
  6. nginx代理安装ssl证书
  7. 求解旋转图像的最大内接矩形
  8. 操作系统课堂笔记七-交换技术
  9. 每日新闻丨​iPhone11成败关系全球众多供应商下一张饭票
  10. 一个在ns3平台基于UDP协议实现的拥塞控制仿真框架