样条之埃尔米特(Hermite)
2014-10-15 06:50
225 查看
埃尔米特(Charles Hermite,1822—1901) 法国数学家。巴黎综合工科学校毕业。曾任法兰西学院、巴黎高等师范学校、巴黎大学教授。法兰西科学院院士。在函数论、高等代数、微分方程等方面都有重要发现。1858年利用椭圆函数首先得出五次方程的解。1873年证明了自然对数的底e的超越性。在现代数学各分支中以他姓氏命名的概念(表示某种对称性)很多,如“埃尔米特二次型”、“埃尔米特算子”等。
这种算法是由上一节讲的CatmullRom演变而成。
关于插值与样条的介绍请看:/article/4891792.html
核心代码:
切图:
相关软件的下载地址为:http://files.cnblogs.com/WhyEngine/TestSpline.zip
这种算法是由上一节讲的CatmullRom演变而成。
关于插值与样条的介绍请看:/article/4891792.html
核心代码:
void YcHermiteSpline::BuildWeights() { ClearWeights(); for (Yuint i = 0; i < 4; i++) { m_splineWeights[i] = (Yreal*)malloc((m_subD)*sizeof(Yreal)); } Yreal u, u_2, u_3; for (Yuint i = 0; i < m_subD; i++) { u = (float)i / m_subD; u_2 = u * u; u_3 = u_2 * u; // 参见"游戏编程精粹1"P420 /* m0 = ((1 - alpha) / 2.0f) * ((v2 - v1) + v3 - v2); m1 = ((1 - alpha) / 2.0f) * ((v3 - v2) + v4 - v3); dest = (((2 * t3) - (3 * t2) + 1) * v2) + ((t3 - (2 * t2) + t) * m0) + ((t3 - t2) * m1) + (((-2 * t3) + (3 * t2)) * v3); ==================== m0 = ((1 - alpha) / 2.0f) * (v3 - v1); m1 = ((1 - alpha) / 2.0f) * (v4 - v2); m0 = ((1 - alpha) / 2.0f) * v3 - ((1 - alpha) / 2.0f) * v1; m1 = ((1 - alpha) / 2.0f) * v4 - ((1 - alpha) / 2.0f) * v2; ==================== dest = (((2 * t3) - (3 * t2) + 1) * v2) + ((t3 - (2 * t2) + t) * ((1 - alpha) / 2.0f) * v3) -((t3 - (2 * t2) + t) * ((1 - alpha) / 2.0f) * v1) ((t3 - t2) * ((1 - alpha) / 2.0f) * v4) -((t3 - t2) * ((1 - alpha) / 2.0f) * v2) (((-2 * t3) + (3 * t2)) * v3); ==================== v1: -((t3 - (2 * t2) + t) * ((1 - alpha) / 2.0f) v2: ((2 * t3) - (3 * t2) + 1) - (t3 - t2) * ((1 - alpha) / 2.0f) v3: (t3 - (2 * t2) + t) * ((1 - alpha) / 2.0f) + ((-2 * t3) + (3 * t2)) v4: (t3 - t2) * ((1 - alpha) / 2.0f) */ // CatmullRom // 貌似m_alpha==0时,Hermite就是CatmullRom //m_splineWeights[0][i] = (-1.0f*u_3 + 2.0f*u_2 - 1.0f*u + 0.0f)*0.5f; //m_splineWeights[1][i] = ( 3.0f*u_3 - 5.0f*u_2 + 0.0f*u + 2.0f)*0.5f; //m_splineWeights[2][i] = (-3.0f*u_3 + 4.0f*u_2 + 1.0f*u + 0.0f)*0.5f; //m_splineWeights[3][i] = ( 1.0f*u_3 - 1.0f*u_2 + 0.0f*u + 0.0f)*0.5f; m_splineWeights[0][i] = -(u_3 - (2 * u_2) + u) * (1 - m_alpha) / 2.0f; m_splineWeights[1][i] = (2 * u_3) - (3 * u_2) + 1 - (u_3 - u_2) * (1 - m_alpha) / 2.0f; m_splineWeights[2][i] = (-2 * u_3) + (3 * u_2) + (u_3 - (2 * u_2) + u) * (1 - m_alpha) / 2.0f; m_splineWeights[3][i] = (u_3 - u_2) * (1 - m_alpha) / 2.0f; } }
切图:
相关软件的下载地址为:http://files.cnblogs.com/WhyEngine/TestSpline.zip
相关文章推荐
- 埃尔米特(Hermite)插值
- glsl smoothstep 属于埃尔米特(Hermite)插值
- 样条之埃尔米特(Hermite)
- 学成绩不佳的数学大师─埃尔米特 (Hermite)
- 样条之埃尔米特(Hermite)插值函数
- 埃尔米特(Hermite)插值及其MATLAB程序
- 学成绩不佳的数学大师─埃尔米特 (Hermite)
- 样条之埃尔米特(Hermite)插值函数
- 学成绩不佳的数学大师─埃尔米特 (Hermite)
- Hermite (埃尔米特)曲线
- Hermite插值是牛顿插值的极限情形
- OpenGL绘制简单的参数曲线(一)——三次Hermite曲线
- OpenGL实现Hermite算法绘制三次曲线
- Hermite插值是牛顿插值的极限情形
- OpenGL - Hermite算法多点画光滑曲线
- 用Hermite插值方法估计积分值
- 数值分析:Hermite多项式
- Hermite多项式正交性证明
- 用Hermite插值方法估计积分值
- 数值分析:Hermite多项式