ASCII 甜甜圈数学动画 — 30 天网页挑战第 2 天

发布日期:2026-05-12 10:36:40   浏览量 :0
发布日期:2026-05-12 10:36:40  
0

2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家 

30days.abduarrahman.com 在线体验 — 源代码位于 吉特哈布

起源

每位程序员都见过 donut.c — 这段传奇的 C 语言代码使用 ASCII 字符渲染出一个旋转的三维环面。这是一种入门仪式。

在“30天网页挑战”的第2天,我想将这个经典作品带到浏览器中 — 不仅仅作为静态渲染,而是作为一个带有故障效果和声音的交互元素。这个甜甜圈位于登录页面上,作为“30天”中的“0”,点击它会揭示隐藏的彩蛋。

我构建的内容

一个实时 ASCII 环面渲染器,具备以下功能:

  • 数学环面渲染 — 经典的正弦/余弦投影,结合 Z 缓冲深度排序和亮度映射
  • 平滑旋转 — 两个旋转角度(A 和 B)在每一帧递增,实现连续旋转
  • 故障模式 — 点击甜甜圈会添加随机旋转偏移和亮度扰乱
  • 霓虹发光样式 — 青色文本配合 textShadow,营造复古终端的感觉
  • 交互式彩蛋 — 在登录页面上点击甜甜圈5次,触发带有粒子的爆炸效果

工作原理

环面渲染算法

核心是经典的甜甜圈数学 — 使用两个旋转角度将三维环面投影到二维字符网格上:

const render = () => {
  const b = new Int8Array(width * height).fill(-1); // 输出缓冲区
  const z = new Float32Array(width * height);         // Z 缓冲区

  const sA = Math.sin(A), cA = Math.cos(A);
  const sB = Math.sin(B), cB = Math.cos(B);

  for (let j = 0;

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
支持 反馈 订阅 数据
回到顶部