Skip to content

1-PT-AxH-RV-0/PolytopeViewer

Repository files navigation

PolytopeViewer - 多胞形预览器

PolytopeViewer 是一个基于 Three.js 的交互式三维和四维多胞形预览工具。它支持多种自定义参数调整和投影方式切换,为用户提供直观的多胞形可视化体验。

功能特性

  1. 多胞形参数调整:支持调整缩放比例、面不透明度、边(使用球体显示)和顶点(使用圆柱体显示)的尺寸。
  2. 投影设置:支持施莱格尔投影(四维)和透视投影(三维)的切换。施莱格尔投影公式为 p' = (p.x * s, p.y * s, p.z *s),其中 s = d / (d - p.w),d 为投影距离。
  3. 旋转:支持对多胞形进行旋转操作(基于欧拉角)。
  4. 显示控制:可独立切换顶点、边、面、坐标轴(包括第 4 个 w 轴)的显示状态。
  5. 信息展示:在 canvas 左上角实时显示当前多面体的顶点、边、面和胞(四维情况下)的数量。
  6. 文件支持:支持用户上传 OFF 格式文件(仅支持文件头为 OFF 的普通三维 OFF 文件和 4OFF 的四维 OFF 文件)。
  7. 可高亮胞:支持从 高亮配置文件 高亮特定的胞。
  8. 可导出视频:支持通过 YAML 配置文件导出视频,配置文件格式请见 ConfigFormat.md

文件结构

  • src/:项目源代码目录。
    • index.js: 入口 js.
    • offProcessor.js:解析 OFF 的工具。
    • offProcessor4D.js:解析 4OFF 的工具。
    • processMeshData.worker.js:用 WebWorker 处理网格数据。
    • axesCreater.js:创建坐标轴。
    • infFamilies.js:无限家族的网格数据生成函数。
    • helperFunc.js:一些辅助函数。
    • GLSLs.js:在 GLSL 中的辅助函数。
    • shaderCompCallback.js:为 Three.js 的内置材质注入四维或其他功能。
    • type.js:类型定义。
    • viewer.js:主要功能。
    • style.css:样式。
    • index.html:主页。
  • assets/:静态资源目录。
    • fonts/: 字体目录。
      • Sarasa_Mono_SC_Bold.typeface.json:等距更纱黑体,用于绘制坐标轴标签,故仅有 X、Y、Z、W 四个字符的字形。
    • models/:立体模型目录。
  • dist/:编译结果目录。
    • index.html:主页。
    • js/:js 代码目录。
    • assets/:静态资源目录。

使用说明

  1. 打开主页时默认加载一个小星形十二面体(Small Stellated Dodecahedron)。
  2. 通过界面控件调整各项参数,观察多胞形变化。
  3. 可上传 OFF 格式文件进行预览(仅支持三维和四维 OFF 文件)。

内置多胞形

本工具内置以下多胞形:

  • 多面体
    • 柏拉图多面体
    • 开普勒–普安索多面体
    • 阿基米德多面体
    • 卡塔兰多面体
    • 约翰逊多面体
    • 无限家族
      • 正角柱
      • 正反角柱
      • 偏方面体
      • 冠状多面体
  • 多胞体
    • 凸正多胞体
    • 施莱夫利–赫斯多胞体
    • 以及上面两类经过以下操作的结果:
      • 截角
      • 截半
      • 过截角
      • 小斜方截半
      • 大斜方截半
      • 扩充
      • 扩充截角
      • 全截
    • 无限家族
      • 正双角柱(不支持复合双角柱)

之后会添加更多。

注意事项

  1. 目前仅支持三维和四维 OFF 文件,二维、五维及更高维度文件不受支持,未来也不会考虑支持。
  2. 导出视频(录制)为测试功能,后续会完善。
  3. 所有配置文件均为 YAML 格式。

About

一个基于 Three.js 的多面体/多胞形预览器。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published