标签:http col ret 一个 实现 介绍 bsp return pow
根据这篇文章(https://blog.csdn.net/aimeimeits/article/details/72809382)的介绍,贝兹曲线的方程其实是若干表达式的加:
a * (1 - t)^b * t^c * Pn
每一个控制点对应一个上面的表达式。a、b、c是该控制点对应的三个系数,它们的规律可以参见那篇文章的介绍。Pn 是第 n 个控制点。t 则是一个从 0 到 1 的浮点数,用来插值算出曲线的任一位置。
下面是 C# 的实现函数:
1 Vector3 bezierInterpolate(Vector3[] controlPoints, float t) 2 { 3 Vector3 ret = Vector3.zero; 4 5 int n = controlPoints.Length; 6 7 int[] yangHui = new int[n]; 8 9 bool nOdd = n % 2 != 0; 10 int hn = n / 2; 11 int mi = nOdd? hn: hn - 1; 12 13 yangHui[0] = 1; 14 for(int l = 1; l < n; ++l) 15 { 16 for(int i = mi; i > 0; --i) 17 { 18 yangHui[i] += yangHui[i - 1]; 19 } 20 } 21 22 for(int i = n - 1; i > mi; --i) 23 { 24 yangHui[i] = yangHui[n - 1 - i]; 25 } 26 27 int a = 1, b = n - 1, c = 0; 28 29 for(int i = 0; i < n; ++i) 30 { 31 Vector3 p = controlPoints[i]; 32 a = yangHui[i]; 33 ret += (a * Mathf.Pow(1 - t, b) * Mathf.Pow(t, c)) * p; 34 35 --b; 36 ++c; 37 } 38 39 return ret; 40 }
标签:http col ret 一个 实现 介绍 bsp return pow
原文地址:https://www.cnblogs.com/Dolaham/p/10785014.html