- UID
- 5181
- 精华
- 积分
- 453
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
本帖最后由 天马座 于 2021-6-14 03:29 编辑
vbs写的 vb直接调用就行,手机打字费劲,参数自行修改全部ByVal,不该也不影响
- Function Bezier1(p0x,p0y,p1x,p1y,k)
- '1阶贝塞尔曲线
- Bezier1 = BezierN(Array(p0x,p0y,p1x,p1y),k)
- End Function
- Function Bezier2(p0x,p0y,p1x,p1y,p2x,p2y,k)
- '2阶贝塞尔曲线
- Bezier2 = BezierN(Array(p0x,p0y,p1x,p1y,p2x,p2y),k)
- End Function
- Function Bezier3(p0x,p0y,p1x,p1y,p2x,p2y,p3x,p3y,k)
- '3阶贝塞尔曲线
- Bezier3 = BezierN(Array(p0x,p0y,p1x,p1y,p2x,p2y,p3x,p3y),k)
- End Function
- Function BezierN(p,k)
- 'n阶贝塞尔曲线
- '参数p 起点 控制点 终点的集合,用数组表示
- '参数k 从起点到终点的曲线经过多少个点来链接
- '返回值 曲线点集合数组 数组的元素也是数组 (0)为x (1)为y
- 'k>=1
- Dim i,d,t,tstep
- Set d = CreateObject("Scripting.Dictionary")
- tstep = 1 / (k + 1)
- t = 0
- For i = 0 To k
- d.add d.count,b(p,t)
- t = t + tstep
- Next
- d.add d.count,b(p,1)
- BezierN = d.Items
- End Function
- Function b(p,t)
- Dim i,n,x,y,c
- n = (UBound(p) + 1) \ 2 - 1
- For i = 0 To n
- c = fac(n) / (fac(i) * fac(n - i))
- 'b = b + c * (1 - t) ^ (n - i) * t ^ i * p(i)
- x = x + c * (1 - t) ^ (n - i) * t ^ i * p(2 * i)
- y = y + c * (1 - t) ^ (n - i) * t ^ i * p(2 * i + 1)
- Next
- b = Array(Fix(x),Fix(y))
- End Function
- Function fac(n)
- Dim f,i
- f = 1
- For i = 2 To n
- f = f * i
- Next
- fac = f
- End Function
复制代码 |
|