5分钟用Spline制作一个Figma图标

Spline是一个新出的轻量级3D软件,可以轻松创建和发布3D Web体验。快速构建和迭代,并可直接导出可开发的文件。
在这里插入图片描述

1. 新建Spline文件

打开spline软件,新建一个文件。这时默认会创建一个320✖️320px的白色背景,为了更好得显示,我们将背景放大至800✖️800,然后点左上角的锁定按钮,将白色背景固定住。
在这里插入图片描述

2. Figma图标的构成

Figma官网上可以看到,Figma图标包含红、浅红、紫、蓝、绿5种颜色,半圆角矩形、圆形、3个圆角一个直角的图形3种类型。如果转换为3D图形,则应该为半球圆柱体、球体和尖角球体的球体(有些复杂)。
在这里插入图片描述

3. 绘制半球圆柱体

a. 由于Spline目前没有布尔和单独控制一个角的工具,所以选用锥体工具Cone改变参数来实现半球圆柱和尖角球体的创建。
在这里插入图片描述

b. 先画一个160大小的椎体,如图
在这里插入图片描述

c. 调整Shape里的Corners的U值为原始大小的一半,即80。再调整Corner Sides 为最大使球体更光滑。这时就已经呈现出我们想要的效果了
在这里插入图片描述

d. 再调整上面的Rotation的Z为90,图形即可逆时针选择90度,再修改颜色和材质。另外,调整Corners的D值,可以使直角边更圆滑一些。这样,我们要的效果就出来了。
在这里插入图片描述

e. 接下来需要做其他两个类似的图形。按住cmd键拖动图形,即可复制出一个。将Rotation的Z改为-90,图形就能翻转过来。
在这里插入图片描述

4. 添加球体

球体就很好做了,我们直接使用上方的Sphere工具来绘制球体,调整颜色和材质。
在这里插入图片描述
在这里插入图片描述

5. 绘制尖角球体

a. 尖角球体我们还是选用锥体工具Cone来创建,调整Rotation Z为-90;Corners U为0,D设置为一个比它自身尺寸更大的数比如200,Corner Sides也设为最大;添加材质和颜色。这时我们看到它的尺寸变小了,并且尖角有些长。
在这里插入图片描述

b. 调整大小为X 400,Y 200,Z 400
在这里插入图片描述

c. 旋转设置为Z -45,调整位置,效果就出来了
在这里插入图片描述
在这里插入图片描述

6. 分享和导出

点击右下角的Publish&Share,Type选择Public URL,稍等几秒,就能生成一个链接。
复制上方链接到网页分享给别人,就能在线查看刚才做出来的效果。点击此处预览
在这里插入图片描述
在这里插入图片描述

下方代码可以直接嵌入网页中,在制作网页banner等效果时非常方便。

如果Type选择Web Content,点击导出,则会生成一个.zip的压缩包。
在这里插入图片描述

这个压缩包包含三个文件,开发时可以直接使用。
在这里插入图片描述

以下是一个使用C++实现matlab的spline函数的例程。 ```C++ #include <iostream> #include <vector> #include <map> using namespace std; struct SplineCoef { double a, b, c, d; }; vector<SplineCoef> spline(vector<double>& x, vector<double>& y) { int n = x.size(); vector<double> h(n - 1), alpha(n - 1), l(n), mu(n - 1), z(n); vector<SplineCoef> coef(n - 1); for (int i = 0; i < n - 1; i++) { h[i] = x[i + 1] - x[i]; alpha[i] = 3.0 / h[i] * (y[i + 1] - y[i]) - 3.0 / h[i - 1] * (y[i] - y[i - 1]); } l[0] = 1.0; mu[0] = 0.0; z[0] = 0.0; for (int i = 1; i < n - 1; i++) { l[i] = 2.0 * (x[i + 1] - x[i - 1]) - h[i - 1] * mu[i - 1]; mu[i] = h[i] / l[i]; z[i] = (alpha[i - 1] - h[i - 1] * z[i - 1]) / l[i]; } l[n - 1] = 1.0; z[n - 1] = 0.0; coef[n - 2].c = 0.0; for (int j = n - 3; j >= 0; j--) { coef[j].c = z[j] - mu[j] * coef[j + 1].c; coef[j].b = (y[j + 1] - y[j]) / h[j] - h[j] * (coef[j + 1].c + 2.0 * coef[j].c) / 3.0; coef[j].d = (coef[j + 1].c - coef[j].c) / (3.0 * h[j]); coef[j].a = y[j]; } return coef; } double spline_eval(vector<SplineCoef>& coef, double x) { int n = coef.size(); if (x <= coef[0].a) return coef[0].a; if (x >= coef[n - 1].a) return coef[n - 1].a; int i = 0, j = n - 1; while (i < j) { int k = (i + j) / 2; if (x <= coef[k].a) j = k; else i = k + 1; } double dx = x - coef[i].a; return coef[i].a + coef[i].b * dx + coef[i].c * dx * dx + coef[i].d * dx * dx * dx; } int main() { vector<double> x = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0}; vector<double> y = {0.0, 0.8, 0.9, 0.1, -0.8, -1.0}; vector<SplineCoef> coef = spline(x, y); // 输出样条插值系数 for (int i = 0; i < coef.size(); i++) { cout << "a = " << coef[i].a << ", b = " << coef[i].b << ", c = " << coef[i].c << ", d = " << coef[i].d << endl; } // 输出样条插值结果 for (double i = 0.0; i <= 5.0; i += 0.1) { cout << "x = " << i << ", y = " << spline_eval(coef, i) << endl; } return 0; } ``` 该例程先定义了样本点的x和y坐标,然后调用spline函数得到样条插值系数,最后使用spline_eval函数得到样条插值结果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值