找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 1671|回复: 4

【VB6】N阶贝塞尔曲线

[复制链接]

9

主题

10

回帖

451

积分

用户组: 中·技术宅

UID
5181
精华
3
威望
39 点
宅币
260 个
贡献
79 次
宅之契约
0 份
在线时间
42 小时
注册时间
2019-7-25
发表于 2021-6-14 00:57:04 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
本帖最后由 天马座 于 2021-6-14 03:29 编辑

vbs写的 vb直接调用就行,手机打字费劲,参数自行修改全部ByVal,不该也不影响

  1. Function Bezier1(p0x,p0y,p1x,p1y,k)
  2.     '1阶贝塞尔曲线
  3.     Bezier1 = BezierN(Array(p0x,p0y,p1x,p1y),k)
  4. End Function
  5. Function Bezier2(p0x,p0y,p1x,p1y,p2x,p2y,k)
  6.     '2阶贝塞尔曲线
  7.     Bezier2 = BezierN(Array(p0x,p0y,p1x,p1y,p2x,p2y),k)
  8. End Function
  9. Function Bezier3(p0x,p0y,p1x,p1y,p2x,p2y,p3x,p3y,k)
  10.     '3阶贝塞尔曲线
  11.     Bezier3 = BezierN(Array(p0x,p0y,p1x,p1y,p2x,p2y,p3x,p3y),k)
  12. End Function
  13. Function BezierN(p,k)
  14.     'n阶贝塞尔曲线
  15.     '参数p 起点 控制点 终点的集合,用数组表示
  16.     '参数k 从起点到终点的曲线经过多少个点来链接
  17.     '返回值 曲线点集合数组  数组的元素也是数组 (0)为x  (1)为y
  18.     'k>=1
  19.     Dim i,d,t,tstep
  20.     Set d = CreateObject("Scripting.Dictionary")
  21.     tstep = 1 / (k + 1)
  22.     t = 0
  23.     For i = 0 To k
  24.         d.add d.count,b(p,t)
  25.         t = t + tstep
  26.     Next
  27.     d.add d.count,b(p,1)
  28.     BezierN = d.Items
  29. End Function
  30. Function b(p,t)
  31.     Dim i,n,x,y,c
  32.     n = (UBound(p) + 1) \ 2 - 1
  33.     For i = 0 To n
  34.         c = fac(n) / (fac(i) * fac(n - i))
  35.         'b = b + c * (1 - t) ^ (n - i) * t ^ i * p(i)
  36.         x = x + c * (1 - t) ^ (n - i) * t ^ i * p(2 * i)
  37.         y = y + c * (1 - t) ^ (n - i) * t ^ i * p(2 * i + 1)
  38.     Next
  39.     b = Array(Fix(x),Fix(y))
  40. End Function
  41. Function fac(n)
  42.     Dim f,i
  43.     f = 1
  44.     For i = 2 To n
  45.         f = f * i
  46.     Next
  47.     fac = f
  48. End Function
复制代码
回复

使用道具 举报

1112

主题

1652

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
245
威望
744 点
宅币
24251 个
贡献
46222 次
宅之契约
0 份
在线时间
2298 小时
注册时间
2014-1-26
发表于 2021-6-14 16:58:32 | 显示全部楼层
搞个贝塞尔曲线竟然用到了字典!

如果不是手机打字的话,你大概还是会正经使用数组的吧。
回复 赞! 靠!

使用道具 举报

9

主题

10

回帖

451

积分

用户组: 中·技术宅

UID
5181
精华
3
威望
39 点
宅币
260 个
贡献
79 次
宅之契约
0 份
在线时间
42 小时
注册时间
2019-7-25
 楼主| 发表于 2021-6-14 20:39:59 | 显示全部楼层
0xAA55 发表于 2021-6-14 16:58
搞个贝塞尔曲线竟然用到了字典!

如果不是手机打字的话,你大概还是会正经使用数组的吧。 ...

写着玩用啥都一样,vbs用字典当动态数组可以减少全局变量正常写我会用全局数组,把组合数c 0.n提前求出来,减少函数调用
回复 赞! 靠!

使用道具 举报

0

主题

14

回帖

57

积分

用户组: 小·技术宅

UID
7247
精华
0
威望
2 点
宅币
39 个
贡献
0 次
宅之契约
0 份
在线时间
2 小时
注册时间
2021-6-21
发表于 2021-6-21 07:28:14 | 显示全部楼层
  谢谢分享
回复 赞! 靠!

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-4-25 23:22 , Processed in 0.036345 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表