Hermit插值曲线代码与显示效果
来源:互联网 发布:usb网络共享电脑驱动xp 编辑:程序博客网 时间:2024/06/06 21:43
简介
Hermit插值是拉格朗日(Lagrange)插值的推广。其不仅要插值于节点,而且要插值于节点的斜率。给定n+1个点x0,x1,…,xn的函数值f(x),及其斜率f'(x),其Hermit插值公式为:
实现代码
//xmin控制点x方向最小值//xmax控制点x方向最大值//origin_pts所有控制点//origin_slopes其中y值表示控制点的斜率//generate_pts生成的Hermit曲线//N生成Hermit曲线点数量int N = 100;for (int n = 0; n <= N; n++){float x = (xmax - xmin)*n / N + xmin;float y = 0;for (int i = 0; i < origin_pts.size(); i++){float yi = 1 * origin_pts.at(i).y;float lkn1 = 1, lkr1 = 1;float lkn = 1, lkr = 1;for (int j = 0; j < origin_pts.size(); j++){vec3 pt = origin_pts.at(j);vec3 slope = origin_slopes.at(j);if (i != j){lkn *= ((x - pt.x) / (origin_pts.at(i).x - origin_pts.at(j).x));lkr *= ((x - pt.x) / (origin_pts.at(i).x - origin_pts.at(j).x));lkn1 /= (origin_pts.at(i).x - origin_pts.at(j).x);lkr1 /= (origin_pts.at(i).x - origin_pts.at(j).x);}}y = y + ((1 - (x - origin_pts.at(i).x)*(lkn1 + lkr1))*lkn*lkr)*yi;yi = 1 * origin_slopes.at(i).y;yi *= (x - origin_pts.at(i).x);for (int j = 0; j < origin_pts.size(); j++){if (i != j){//yi = yi*(x - origin_pts.at(j).x) / (origin_pts.at(i).x - origin_pts.at(j).x);vec3 pt = origin_pts.at(j);vec3 slope = origin_slopes.at(j);//yi = pt.y + (x - pt.x)*(slope.y - 2 * pt.y);//yi *= yi;yi *= ((x - pt.x) / (origin_pts.at(i).x - origin_pts.at(j).x));yi *= ((x - pt.x) / (origin_pts.at(i).x - origin_pts.at(j).x));}}y += yi;}generate_pts.push_back(vec3(x, y, 0.0f));}演示效果
输入控制点及其斜率
(-3,-3),0
(-1,1),1
(0,3),-1
(3,4),2
(5,5),0
显示效果
1 0
- Hermit插值曲线代码与显示效果
- cubic_interpolation 三次曲线插值代码
- hermit 曲线算法(待证)
- bezier曲线的插值模拟算法
- 拉格朗日(Lagrange)插值曲线
- 贝塞尔曲线与翻页效果
- 【数据结构与算法】【查找】插值查找的代码实现
- Chart 显示曲线值
- 曲线拟合与插值
- 插值与拟合
- 插值与拟合
- 插值与拟合
- Opencv 三次样条曲线(Cubic Spline)插值
- 利用Eigen进行B-Spline 曲线插值运算
- 看看代码显示效果
- listview效果显示代码
- 数字图像缩放之最近邻插值与双线性插值处理效果对比
- 采用Cardinal法构造插枝分段三次样条曲线 : 代码篇
- V4L2(二)虚拟摄像头驱动vivi深入分析
- DLL与LIB库文件的生成和使用---C++
- ORA-00257 archive error、noarchivelog
- Ajax学习日记(1)
- Java IO流——对文件的操作
- Hermit插值曲线代码与显示效果
- Javascript中的事件处理程序
- mac下安装mysql
- Makefile详解-概述
- Flask MVVM 开发(vue.js) - ajax如何同步更新地址栏history 以及使用浏览器返回按钮
- Latex 常用符号
- Java集合之Vector、Stack
- 欢迎使用CSDN-markdown编辑器
- android开发(如何开发一个可以维护的好项目):一 、定义基类