首页 / 资讯中心 / 文章详情

Ranim图形对象实战:Polygon、Arc与SvgItem使用完整指南

Ranim图形对象实战:Polygon、Arc与SvgItem使用完整指南 ★ FEATURED ARTICLE
【免费下载链接】ranimAn animation engine implemented in rust, inspired by manim and JAnim项目地址https://gitcode.com/gh_mirrors/ra/ranim点击查看免费下载Ranim 是一个用 Rust 编写的开源动画引擎受 Manim 启发本文带你快速上手它最核心的三类图形对象多边形 Polygon、圆弧 Arc 以及可加载矢量图的 SvgItem并附上示例代码路径与运行方法帮助你从零做出第一个数学动画。环境准备安装与运行示例Ranim 尚未发布到 crates.io可以直接通过 git 地址引入在项目的Cargo.toml中添加[dependencies] ranim { git https://github.com/azurice/ranim }运行时需要两个外部依赖typst用于字体与数学公式渲染ffmpegRanim 会调用 ffmpeg 进程编码输出视频仓库内自带的示例是学习图形对象的最佳入口例如运行基础示例cargo run --example basic加--release可以显著加快渲染速度。所有示例都位于 examples/ 目录每个场景只需实现TimelineConstructortrait就能把多个图形对象编排成一条动画时间轴。认识图形对象的统一入口 RabjectRanim 中所有可渲染的图形都叫RabjectRenderable Object它是图形数据 唯一 ID 的包装器。图形本身通过蓝图Blueprint模式构建先用结构体描述形状再调用.build()得到可动画的对象。let mut polygon Polygon(vec![/* 顶点列表 */]).build();常用样式方法都可以链式调用set_color、set_fill_opacity、set_stroke_color、set_stroke_width、set_fill_color配合shift/scale/rotate等变换方法即可完成布局。实战一Polygon 多边形与派生形状Polygon接受一个顶点向量VecVec3按顺时针排列内部会自动闭合路径并生成圆滑的锚点let mut polygon Polygon(vec![ vec3(0.0, 0.0, 0.0), vec3(-100.0, -300.0, 0.0), vec3(0.0, 700.0, 0.0), vec3(200.0, 300.0, 0.0), vec3(500.0, 0.0, 0.0), ]).build(); polygon.set_color(Srgba::hex(FF8080FF).unwrap()) .set_fill_opacity(0.5) .rotate(std::f32::consts::FRAC_PI_2, Vec3::Z);这段代码来自 examples/basic/main.rs效果是一个半透明红色五边形旋转 90 度后淡入。Polygon还是很多形状的地基在 src/items/vitem.rs 中你可以看到这些派生蓝图蓝图用途参数Rectangle矩形宽、高Square正方形边长Circle圆半径Ellipse椭圆宽、高Dot小圆点Small/NormalRectangle的实现本质就是四个顶点的PolygonCircle则是角度为 2π 的Arc——掌握Polygon就掌握了整条形状家族。实战二Arc 圆弧与 ArcBetweenPoints 双端点圆弧上图由 10×10 个圆弧组成列方向逐渐增大Arc的angle行方向对颜色做 lerp 插值同时用set_stroke_width(10.0 * j as f32)让线宽从左到右递增最终得到一个从红到蓝的平滑渐变网格。完整代码见 examples/arc/main.rs。Arc只需两个参数let mut arc Arc { angle: f32::consts::PI / 3.0, // 张角弧度 radius: 100.0, // 半径 }.build();在basic示例中这个圆弧承接了前面多边形动画的接力通过interpolate(polygon, arc)让五边形平滑变形为圆弧——这就是 Ranim 插值动画的魅力只要两个对象的数据结构可以对齐Alignable变形动画只需一行代码。如果你只想指定起点和终点画弧ArcBetweenPoints会自动根据两端距离和角度反推半径let mut arc ArcBetweenPoints { start: vec3(0.0, 0.0, 0.0), end: (center vec).extend(0.0), angle, // 张角弧度越大弧度越缓 }.build(); arc.set_color(color) .set_fill_opacity(0.0) .set_stroke_width(width);示例 examples/arc_between_points/main.rs 用双层循环绘制了半径、角度、线宽同步变化的同心弧线配合逐段fade_in淡入呈现出图中旋转的螺旋网格。实战三SvgItem 加载 SVG 与 Typst 文本上面这张调色板图正是palettes示例渲染的结果用Rectangle色块拼出 Manim 风格的完整配色表颜色常量全部来自 src/color/palettes.rs 的manim模块例如manim::BLUE_C、RED_B每个色系都有 AE 五档深浅可选。SvgItem是 Ranim 处理复杂矢量图形的利器它能把 SVG 路径解析为内部VItem集合并保留 fill/stroke 颜色与线宽源码位于 src/items/svg_item.rs。提供三种创建方式SvgItem::from_file(path)直接读取.svg文件SvgItem::from_svg(svg_string)解析 SVG 字符串typst_svg!宏用 Typst 语法直接写文本与公式自动转 SVGbasic示例同时演示了后两种方式// Typst 文本 let mut text Rabject::new(SvgItem::from_svg(typst_svg!( r# #align(center)[ #text(60pt)[Ranim] #text(20pt)[Hello 你好] ] # ))); // 外部 SVG 文件内嵌字符串 let mut svg Rabject::new(SvgItem::from_svg(SVG)); svg.scale(Vec3::splat(2.0)).shift(vec3(0.0, 200.0, 0.0));其中SVG常量通过include_str!内嵌了 assets/Ghostscript_Tiger.svg——经典的 Ghostscript 老虎图案是检验 SVG 渲染质量的标准图。文本部分还可以用write/unwrite动画实现逐笔书写效果配合interpolate放大见 examples/basic/main.rs。三个对象如何组合成完整动画回顾basic示例的时间轴编排这是最简洁的图形对象实战模板timeline.forward(0.2); // 等待 0.2 秒 timeline.play(fade_in(svg)); // 老虎淡入 timeline.play(write(text).with_duration(3.0)); // 逐笔书写文本 timeline.play(interpolate(polygon, arc)); // 多边形变形为圆弧 timeline.play(uncreate(arc)); // 圆弧销毁消失几个关键 APItimeline.play(...)播放动画返回可变引用可继续修改属性timeline.forward(secs)插入等待fade_in/fade_out淡入淡出interpolate(src, dst)任意两个可对齐对象间的形变create/uncreate/write/unwrite创建、销毁与书写动画动画函数分别位于 src/animation/entity/ 下的fading.rs、interpolate.rs、creation.rs等文件。快速上手建议从 examples/basic/main.rs 抄起模板理解TimelineConstructorRabject的组合套路先用Polygon/Rectangle画静态布局再用Arc系列做曲线效果文字与公式一律走typst_svg!SvgItem避免手写字形配色统一使用manim调色板常量视觉风格更接近 Manim 原版开发期用cargo run --example basic发布期加--release提速掌握Polygon、Arc、SvgItem这三类图形对象后你就能覆盖数学动画中绝大多数画面需求其余只需交给interpolate做变形衔接即可。赞分享【免费下载链接】ranimAn animation engine implemented in rust, inspired by manim and JAnim项目地址https://gitcode.com/gh_mirrors/ra/ranim点击查看免费下载相关推荐Phaser 4 图形与形状绘制完全指南Graphics 游戏对象与 Shape 形状对象实战Phaser 4 图形与形状绘制完全指南Graphics 游戏对象与 Shape 形状对象实战 本文是 Phaser 4 图形绘制主题的实战指南系统讲解无纹游戏开发图形学前端Open Generative AI免费自托管的 600 模型 AI 图像与视频生成工作室3 步跑起来Open Generative AI免费自托管的 600 模型 AI 图像与视频生成工作室3 步跑起来 Open Generative AI 是一个免费开AI 应用人工智能媒体生成前端AI Agent本地部署终极Fyne图形绘制指南Canvas对象的完整使用教程终极Fyne图形绘制指南Canvas对象的完整使用教程 Fyne是一个用Go语言编写的现代化GUI库专门用于创建原生体验的跨平台应用。在Fyne框架中CaUI组件跨平台桌面应用移动开发上一篇用 Anthropic 驱动 PRP 解析与任务 CRUD在 Context-Engineering-Intro 中构建 Taskmaster 式 MCP 服务器下一篇Thunderbird for Android 白标架构White-Label Architecture解析K-9 Mail 与 Thunderbird 双应用的模块化实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站