Superellipse超椭圆?直接顺手开发一个好看又简单的生成工具(一)

前言

第一次意识到超椭圆 Superellipse 的时候,就是小米的价值 200 万 Logo 。其圆角给人感觉很圆润,作为一名前端er,自然想能否用 CSS - border-radius 实现。后来尝试不行,才主动简单了解了一下超椭圆。

原研哉采用的就是 n = 3 的超椭圆。

而后再去观察日常生活的最常见的超椭圆可能就是各个手机系统的图标了,很多都是应用的超椭圆,只是 n 的值可能不太一样。

超椭圆的定义可以参考下面这个:

是在笛卡儿坐标系下满足以下方程式的点的集合: 其中nab 为正数。这里设置 a b 的值都为 1 ,简化为 |x|^n + |y|^n = 1

实现功能

  • √\] 设置曲率 N 值

  • √\] 设置 stroke width

  • √\] SVG code

  • √\] 彩带效果

  • √\] 预设超椭圆 Demo

核心代码

ts 复制代码
async function getSuperellipsePath(
  a = 50, // X 轴半径
  b = 50, // Y 轴半径
  nX = 4, // X 轴幂指数
  nY = 4, // Y 轴幂指数
  steps = 360, // 点的个数
) {
  // 计算超椭圆的路径点
  const nX2 = 2 / nX
  const nY2 = 2 / nY
  const points = await Array.from({ length: steps }, (_, i) => {
    const t = (i * 2 * Math.PI) / steps
    const cosT = Math.cos(t)
    const sinT = Math.sin(t)
    const x = Math.abs(cosT) ** nX2 * a * Math.sign(cosT)
    const y = Math.abs(sinT) ** nY2 * b * Math.sign(sinT)
    return { x, y }
  })
  return `${points.map((p, i) => `${i === 0 ? 'M' : 'L'} ${p.x} ${p.y}`).join(' ')} Z`
}

在线预览

superellipse.mmeme.me/

代码仓库

github.com/pinky-pig/s...

如果觉得还不错,求求大家点个 star 🌟 ,在这里磕头了🙇🙇🙇。

相关推荐
Qrun1 小时前
Windows11安装nvm管理node多版本
前端·vscode·react.js·ajax·npm·html5
中国lanwp1 小时前
全局 npm config 与多环境配置
前端·npm·node.js
JELEE.2 小时前
Django登录注册完整代码(图片、邮箱验证、加密)
前端·javascript·后端·python·django·bootstrap·jquery
TeleostNaCl4 小时前
解决 Chrome 无法访问网页但无痕模式下可以访问该网页 的问题
前端·网络·chrome·windows·经验分享
前端大卫5 小时前
为什么 React 中的 key 不能用索引?
前端
你的人类朋友5 小时前
【Node】手动归还主线程控制权:解决 Node.js 阻塞的一个思路
前端·后端·node.js
小李小李不讲道理7 小时前
「Ant Design 组件库探索」五:Tabs组件
前端·react.js·ant design
毕设十刻7 小时前
基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
mapbar_front8 小时前
在职场生存中如何做个不好惹的人
前端
牧杉-惊蛰8 小时前
纯flex布局来写瀑布流
前端·javascript·css