Hello SSVM: 利用 SSVM + wasm 实现万花尺图案的绘制

最近看到 写 Rust 函数,免费树莓派 的活动,便了解了一下 SSVM, 对我来说 ssvmup 与 wasm-pack 相比最方便的一点是:

除了在 Rust 和 JavaScript 之间传递字符串值外,ssvmup 工具还支持以下数据类型。

  • Rust 调用的参数可以是 i32String&strVec<u8> 和&[u8] 的任意组合
  • 返回值可以是 i32 或 String 或 Vec<u8>
  • 对于像结构这样的复杂数据类型,可以使用 JSON 字符串传递数据

对 Vec<u8> 的支持可以不用再 通过 buffer + pointer 的方式共享数据,使用起来非常方便。

万花尺

万花尺原理:

万花尺轨迹性质研究  万花尺轨迹性质研究_万花尺算法_Jcldcdmf的博客-CSDN博客

利用三角函数绘制万花尺图案属于计算较多的场景了,这里实现的 Rust 函数为:绘制万花尺图案并编码为 PNG 格式。

其实这个场景更适合在 web 端完成,绘制好的图案不用编码直接作为 canvas 数据展示,更加高效。

这里为了体验 SSVM ,把 Rust 函数编译为 wasm 后供 nodejs 调用,在服务端生成图片返给 web 端。

最终效果

功能实现

万花尺图案绘制相关的参数有:大圆半径、小圆半径、绘制点到小圆圆心的距离、当前小圆顺大圆转动的角度 alpha、小圆自转的角度 beta 、以及画笔颜色。

此处将小圆运动相关上下文抽象为结构体 Pannel, 为其实现 2 个方法:

  1. 移动:小圆顺着大圆滚动指定的角度 delta,更新 alpha 和 beta。不断以较小值的 delta 移动小圆,便是对其运动的模拟
  2. 计算当前画笔位置:随着小圆的运动&#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值