manim-3d 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- manim_3d-0.1.0/LICENSE +21 -0
- manim_3d-0.1.0/PKG-INFO +197 -0
- manim_3d-0.1.0/README.md +171 -0
- manim_3d-0.1.0/manim_3d/__init__.py +22 -0
- manim_3d-0.1.0/manim_3d/core.py +830 -0
- manim_3d-0.1.0/manim_3d.egg-info/PKG-INFO +197 -0
- manim_3d-0.1.0/manim_3d.egg-info/SOURCES.txt +10 -0
- manim_3d-0.1.0/manim_3d.egg-info/dependency_links.txt +1 -0
- manim_3d-0.1.0/manim_3d.egg-info/requires.txt +2 -0
- manim_3d-0.1.0/manim_3d.egg-info/top_level.txt +1 -0
- manim_3d-0.1.0/pyproject.toml +36 -0
- manim_3d-0.1.0/setup.cfg +4 -0
manim_3d-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 FTZ-OPUS
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
manim_3d-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: manim-3d
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Manim 三维几何与动画 —— 几行代码出 3D 曲面数学动画 / 3D geometry & animation presets for Manim CE
|
|
5
|
+
Author: FTZ-OPUS
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/FTZ-OPUS/manim-3d
|
|
8
|
+
Project-URL: Repository, https://github.com/FTZ-OPUS/manim-3d
|
|
9
|
+
Keywords: manim,math,animation,3d,surface,geometry,education
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Intended Audience :: Education
|
|
12
|
+
Classifier: Intended Audience :: Science/Research
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Topic :: Multimedia :: Video
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: Mathematics
|
|
20
|
+
Requires-Python: >=3.10
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE
|
|
23
|
+
Requires-Dist: manim>=0.21
|
|
24
|
+
Requires-Dist: numpy>=1.24
|
|
25
|
+
Dynamic: license-file
|
|
26
|
+
|
|
27
|
+
# manim-3d 🧊 Manim 三维几何与动画
|
|
28
|
+
|
|
29
|
+
**manim-3d** 是 [Manim](https://www.manim.community/) Community Edition 的立体几何补充库。
|
|
30
|
+
高斯曲面、马鞍面、抛物面、椭球面、圆环面、单叶双曲面——这些经典三维曲面的整套演示动画
|
|
31
|
+
(成型 → 等高线 → 360° 环绕 → 翻面 → 特征点标注),被封装成**一个工厂函数 + 几个参数**。
|
|
32
|
+
|
|
33
|
+
*One-liner 3D surface animation presets for Manim CE: rainbow-shaded surfaces, orbit & flip camera work, paced timelines from 10s to 45s — in a class definition.*
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 为什么需要它
|
|
38
|
+
|
|
39
|
+
不用库,手写一支"平面隆起成彩虹高斯曲面 → 底面等高线 → 360° 环绕 → 翻面 → 峰顶标注"的 3D 视频,
|
|
40
|
+
你要面对的是:ThreeDScene 相机调度、`set_fill_by_value` 高度色带、HUD 固定帧字幕(还得躲开
|
|
41
|
+
"字幕被 3D 透视拉斜"的暗坑)、等高线解析与 z-fighting、深度遮挡、逐拍时长编排……
|
|
42
|
+
**130+ 行起步,坑还都不在文档里。**
|
|
43
|
+
|
|
44
|
+
用 manim-3d:
|
|
45
|
+
|
|
46
|
+
```python
|
|
47
|
+
from manim_3d import gaussian_surface_scene
|
|
48
|
+
|
|
49
|
+
class GaussianSurface(gaussian_surface_scene()): pass
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
6 行,渲染命令照旧:`manim -qh demo.py GaussianSurface`。
|
|
53
|
+
配色、运镜、字幕、节拍、时长——全部预设到审美在线的状态;想不一样,每个环节都有参数。
|
|
54
|
+
|
|
55
|
+
| 高斯曲面 | 马鞍面 | 抛物面 |
|
|
56
|
+
|---|---|---|
|
|
57
|
+
|  |  |  |
|
|
58
|
+
| **椭球面** | **圆环面** | **单叶双曲面** |
|
|
59
|
+
|  |  | 📷 见 examples |
|
|
60
|
+
|
|
61
|
+
以上全部由本库直接渲染输出,无后期。
|
|
62
|
+
|
|
63
|
+
## 特性
|
|
64
|
+
|
|
65
|
+
- 🎬 **几行代码出片** —— 类定义即视频;六个曲面开箱即用,覆盖图曲面与闭曲面两种形态
|
|
66
|
+
- ⏱️ **权重配速** —— 同一套动画,45s 完整版与 10s 混剪版只是一个参数:每拍按权重伸缩、
|
|
67
|
+
夹住"难看下限",压不下自动按优先级砍可选拍并在日志告诉你砍了啥,主线一个不少
|
|
68
|
+
- 🌈 **预设即美观** —— 七段彩虹高度色带(海洋/熔岩可换)、金色大字幕、环绕恒转满一整圈、
|
|
69
|
+
标注自动防遮挡(3D 天线 / 屏幕 HUD 两种方案按几何自动选择)
|
|
70
|
+
- 🔧 **全参数可调** —— 换函数、换半轴、换配色主题、五个节拍开关、字幕槽位对位,
|
|
71
|
+
每一处预设都留了改口
|
|
72
|
+
- 🤫 **字幕默认关** —— 片子干干净净;要讲课时把字幕列表传进去,自动按节拍挂载
|
|
73
|
+
- 🧭 **替你踩平的坑** —— fixed-in-frame 注册、Transform 字形错配、partial 缓存失效、
|
|
74
|
+
深度遮挡……全部在库内处理,使用者无需知晓
|
|
75
|
+
|
|
76
|
+
## 安装
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
pip install manim-3d
|
|
80
|
+
# 或从源码
|
|
81
|
+
git clone https://github.com/FTZ-OPUS/manim-3d && pip install -e ./manim-3d
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
依赖:Python ≥ 3.10、[Manim CE](https://docs.manim.community/) ≥ 0.21(含其自身依赖与 LaTeX)。
|
|
85
|
+
|
|
86
|
+
## 快速开始
|
|
87
|
+
|
|
88
|
+
六个曲面,同一套 API——
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
from manim_3d import (gaussian_surface_scene, saddle_surface_scene,
|
|
92
|
+
paraboloid_surface_scene, ellipsoid_surface_scene,
|
|
93
|
+
torus_surface_scene, hyperboloid_one_sheet_scene)
|
|
94
|
+
|
|
95
|
+
class GaussianSurface(gaussian_surface_scene()): pass
|
|
96
|
+
class SaddleSurface(saddle_surface_scene()): pass
|
|
97
|
+
class ParaboloidSurface(paraboloid_surface_scene()): pass
|
|
98
|
+
class EllipsoidSurface(ellipsoid_surface_scene()): pass
|
|
99
|
+
class TorusSurface(torus_surface_scene()): pass
|
|
100
|
+
class Hyperboloid(hyperboloid_one_sheet_scene()): pass
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
> 完整可运行示例见 [`examples/`](examples/)(每个曲面一个文件,含字幕版与 16 秒速览版)。
|
|
104
|
+
|
|
105
|
+
### 加字幕
|
|
106
|
+
|
|
107
|
+
字幕默认关闭。要讲课时传入字幕列表,自动按节拍挂载(整行淡出淡入,绝不形变糊字):
|
|
108
|
+
|
|
109
|
+
```python
|
|
110
|
+
class SaddleSurface(saddle_surface_scene(
|
|
111
|
+
captions=("马鞍面", "建立三维坐标系", "平面扭曲成马鞍面",
|
|
112
|
+
"等高线:双曲线族与渐近线", "360° 环绕展示",
|
|
113
|
+
"绕轴翻转 · 展示底面", "manim 立体几何 · 第二画"),
|
|
114
|
+
)): pass
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 控时长(混剪友好)
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
class SaddleFast(saddle_surface_scene(pace="fast", name="SaddleFast")): # 10 秒
|
|
121
|
+
class SaddleTeaser(saddle_surface_scene(duration=16, name="SaddleTeaser")): # 16 秒
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
`duration=16` 时放不下全部节拍?库会按 **等高线 → 平面 → 标注 → 环绕 → 翻面** 的优先级
|
|
125
|
+
自动砍拍并打印,保住"成型 → 环绕 → 翻面"主线——混剪快切时每一拍依然完整。
|
|
126
|
+
|
|
127
|
+
### 换函数 / 换配色 / 换形状
|
|
128
|
+
|
|
129
|
+
```python
|
|
130
|
+
import numpy as np
|
|
131
|
+
from manim_3d import gaussian_surface_scene
|
|
132
|
+
|
|
133
|
+
# 高斯曲面接受任意 z=f(x,y),峰值自动归一化,不用调坐标轴
|
|
134
|
+
class MySurface(gaussian_surface_scene(
|
|
135
|
+
func=lambda x, y: np.exp(-((x - 1) ** 2 + y * y)),
|
|
136
|
+
colors="ocean", # rainbow / ocean / magma 或自定义色带
|
|
137
|
+
)): pass
|
|
138
|
+
|
|
139
|
+
# 椭球三轴随意改,公式自动跟着变
|
|
140
|
+
class MyEgg(ellipsoid_surface_scene(semi_axes=(2.6, 1.4, 1.8))): pass
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## 参数一览
|
|
144
|
+
|
|
145
|
+
| 参数 | 默认 | 说明 |
|
|
146
|
+
|---|---|---|
|
|
147
|
+
| `func` / `func_tex`(高斯) | 内置高斯 | 任意 `z=f(x,y)`;公式 LaTeX 自动/手填 |
|
|
148
|
+
| `semi_axes`(椭球) | (2.4, 1.6, 1.2) | 半轴 (a, b, c),坐标轴等比缩放防畸变 |
|
|
149
|
+
| `major_radius` / `minor_radius`(圆环面) | 2.0 / 0.5 | 环半径 / 管半径 |
|
|
150
|
+
| `waist_radius` / `z_extent`(单叶双曲面) | 1.0 / 1.5 | 腰圆半径 / 上下截断高度 |
|
|
151
|
+
| `domain` | ±2.2~2.6 | 图曲面 x/y 定义域 |
|
|
152
|
+
| `colors` | "rainbow" | `rainbow / ocean / magma` 或 `[(hex, 0~1)...]` |
|
|
153
|
+
| `height` | 1.0~1.2 | 峰值自动归一化目标高度 |
|
|
154
|
+
| `axes / rings / orbit / flip / annotate` | True | 五个节拍开关 |
|
|
155
|
+
| `captions` | None | 字幕按节拍槽位对位,不传 = 无字幕 |
|
|
156
|
+
| `duration` / `pace` | "full" | 内容预算秒数;`fast`=10s / `normal`=24s / `full`=45s |
|
|
157
|
+
|
|
158
|
+
### 字幕槽位
|
|
159
|
+
|
|
160
|
+
按曲面节拍序列位置对位:高斯 6 槽(片头/坐标轴/隆起/环绕/翻面/片尾),
|
|
161
|
+
其余 7 槽(多一个"等高线"槽)。传少于槽数的条目时自动截取。
|
|
162
|
+
|
|
163
|
+
### 配速规则
|
|
164
|
+
|
|
165
|
+
每拍带三个数:**参考时长**(完整版节奏)、**下限**(低于就难看的压缩底线)、
|
|
166
|
+
**上限倍率**(拉伸顶格)。`duration` 先等比分摊,夹进上下限迭代收敛;
|
|
167
|
+
全体顶到下限仍放不下才砍拍。环绕拍永远**恰好转满一整圈**(角速度随时长自适应)。
|
|
168
|
+
|
|
169
|
+
## 六曲面差异一览
|
|
170
|
+
|
|
171
|
+
| 曲面 | 方程 | 成型 | 等高线 | 标注 |
|
|
172
|
+
|---|---|---|---|---|
|
|
173
|
+
| 高斯曲面 | z = e^(−x²−y²) | 平面隆起 | 地板投影圆 | 峰顶 3D 标签 |
|
|
174
|
+
| 马鞍面 | z = x² − y² | 平面扭曲 | 双曲线族 + 渐近线 | 鞍点 HUD 标签 |
|
|
175
|
+
| 抛物面 | z = x² + y² | 平面卷起 | 贴面同心圆 | 顶点 HUD 标签 |
|
|
176
|
+
| 椭球面 | x²/a²+y²/b²+z²/c²=1 | 充气成型 | 贴面水平椭圆环 | 上顶点 3D 标签 |
|
|
177
|
+
| 圆环面 | (√(x²+y²)−R)²+z²=r² | 充气成型 | 贴面水平成对圆环 | 最高点 3D 标签 |
|
|
178
|
+
| 单叶双曲面 | x²+y²−z²=a² | 充气成型 | 水平圆族(含腰圆) | 腰点 HUD 标签 |
|
|
179
|
+
|
|
180
|
+
标注方案按几何自动选择:特征点外露用 3D 标签(天线虚线),被曲面环抱则用
|
|
181
|
+
**相机定格投影 + 固定帧** 的屏幕 HUD 标签,永不被深度遮挡。
|
|
182
|
+
|
|
183
|
+
## 设计边界(诚实声明)
|
|
184
|
+
|
|
185
|
+
- 高斯等高线为径向近似,仅旋转对称函数精确;一般函数建议 `rings=False`
|
|
186
|
+
- 马鞍/抛物面/圆环面/单叶双曲面为固定几何预设(解析等高线依赖具体方程),
|
|
187
|
+
任意函数请走高斯入口
|
|
188
|
+
- 双叶双曲面等参数曲面在路线图上
|
|
189
|
+
|
|
190
|
+
## 用它做过的片子
|
|
191
|
+
|
|
192
|
+
《立体几何 N 画》系列(B站):高斯曲面 · 第一画 / 马鞍面 · 第二画 / 抛物面 · 第三画 /
|
|
193
|
+
椭球面 · 第四画 / 圆环面 · 第五画 / 单叶双曲面 · 第六画 —— 全部由本库(或其前身脚本)直接渲染。
|
|
194
|
+
|
|
195
|
+
## License
|
|
196
|
+
|
|
197
|
+
[MIT](LICENSE) © FTZ-OPUS
|
manim_3d-0.1.0/README.md
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# manim-3d 🧊 Manim 三维几何与动画
|
|
2
|
+
|
|
3
|
+
**manim-3d** 是 [Manim](https://www.manim.community/) Community Edition 的立体几何补充库。
|
|
4
|
+
高斯曲面、马鞍面、抛物面、椭球面、圆环面、单叶双曲面——这些经典三维曲面的整套演示动画
|
|
5
|
+
(成型 → 等高线 → 360° 环绕 → 翻面 → 特征点标注),被封装成**一个工厂函数 + 几个参数**。
|
|
6
|
+
|
|
7
|
+
*One-liner 3D surface animation presets for Manim CE: rainbow-shaded surfaces, orbit & flip camera work, paced timelines from 10s to 45s — in a class definition.*
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 为什么需要它
|
|
12
|
+
|
|
13
|
+
不用库,手写一支"平面隆起成彩虹高斯曲面 → 底面等高线 → 360° 环绕 → 翻面 → 峰顶标注"的 3D 视频,
|
|
14
|
+
你要面对的是:ThreeDScene 相机调度、`set_fill_by_value` 高度色带、HUD 固定帧字幕(还得躲开
|
|
15
|
+
"字幕被 3D 透视拉斜"的暗坑)、等高线解析与 z-fighting、深度遮挡、逐拍时长编排……
|
|
16
|
+
**130+ 行起步,坑还都不在文档里。**
|
|
17
|
+
|
|
18
|
+
用 manim-3d:
|
|
19
|
+
|
|
20
|
+
```python
|
|
21
|
+
from manim_3d import gaussian_surface_scene
|
|
22
|
+
|
|
23
|
+
class GaussianSurface(gaussian_surface_scene()): pass
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
6 行,渲染命令照旧:`manim -qh demo.py GaussianSurface`。
|
|
27
|
+
配色、运镜、字幕、节拍、时长——全部预设到审美在线的状态;想不一样,每个环节都有参数。
|
|
28
|
+
|
|
29
|
+
| 高斯曲面 | 马鞍面 | 抛物面 |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
|  |  |  |
|
|
32
|
+
| **椭球面** | **圆环面** | **单叶双曲面** |
|
|
33
|
+
|  |  | 📷 见 examples |
|
|
34
|
+
|
|
35
|
+
以上全部由本库直接渲染输出,无后期。
|
|
36
|
+
|
|
37
|
+
## 特性
|
|
38
|
+
|
|
39
|
+
- 🎬 **几行代码出片** —— 类定义即视频;六个曲面开箱即用,覆盖图曲面与闭曲面两种形态
|
|
40
|
+
- ⏱️ **权重配速** —— 同一套动画,45s 完整版与 10s 混剪版只是一个参数:每拍按权重伸缩、
|
|
41
|
+
夹住"难看下限",压不下自动按优先级砍可选拍并在日志告诉你砍了啥,主线一个不少
|
|
42
|
+
- 🌈 **预设即美观** —— 七段彩虹高度色带(海洋/熔岩可换)、金色大字幕、环绕恒转满一整圈、
|
|
43
|
+
标注自动防遮挡(3D 天线 / 屏幕 HUD 两种方案按几何自动选择)
|
|
44
|
+
- 🔧 **全参数可调** —— 换函数、换半轴、换配色主题、五个节拍开关、字幕槽位对位,
|
|
45
|
+
每一处预设都留了改口
|
|
46
|
+
- 🤫 **字幕默认关** —— 片子干干净净;要讲课时把字幕列表传进去,自动按节拍挂载
|
|
47
|
+
- 🧭 **替你踩平的坑** —— fixed-in-frame 注册、Transform 字形错配、partial 缓存失效、
|
|
48
|
+
深度遮挡……全部在库内处理,使用者无需知晓
|
|
49
|
+
|
|
50
|
+
## 安装
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
pip install manim-3d
|
|
54
|
+
# 或从源码
|
|
55
|
+
git clone https://github.com/FTZ-OPUS/manim-3d && pip install -e ./manim-3d
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
依赖:Python ≥ 3.10、[Manim CE](https://docs.manim.community/) ≥ 0.21(含其自身依赖与 LaTeX)。
|
|
59
|
+
|
|
60
|
+
## 快速开始
|
|
61
|
+
|
|
62
|
+
六个曲面,同一套 API——
|
|
63
|
+
|
|
64
|
+
```python
|
|
65
|
+
from manim_3d import (gaussian_surface_scene, saddle_surface_scene,
|
|
66
|
+
paraboloid_surface_scene, ellipsoid_surface_scene,
|
|
67
|
+
torus_surface_scene, hyperboloid_one_sheet_scene)
|
|
68
|
+
|
|
69
|
+
class GaussianSurface(gaussian_surface_scene()): pass
|
|
70
|
+
class SaddleSurface(saddle_surface_scene()): pass
|
|
71
|
+
class ParaboloidSurface(paraboloid_surface_scene()): pass
|
|
72
|
+
class EllipsoidSurface(ellipsoid_surface_scene()): pass
|
|
73
|
+
class TorusSurface(torus_surface_scene()): pass
|
|
74
|
+
class Hyperboloid(hyperboloid_one_sheet_scene()): pass
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
> 完整可运行示例见 [`examples/`](examples/)(每个曲面一个文件,含字幕版与 16 秒速览版)。
|
|
78
|
+
|
|
79
|
+
### 加字幕
|
|
80
|
+
|
|
81
|
+
字幕默认关闭。要讲课时传入字幕列表,自动按节拍挂载(整行淡出淡入,绝不形变糊字):
|
|
82
|
+
|
|
83
|
+
```python
|
|
84
|
+
class SaddleSurface(saddle_surface_scene(
|
|
85
|
+
captions=("马鞍面", "建立三维坐标系", "平面扭曲成马鞍面",
|
|
86
|
+
"等高线:双曲线族与渐近线", "360° 环绕展示",
|
|
87
|
+
"绕轴翻转 · 展示底面", "manim 立体几何 · 第二画"),
|
|
88
|
+
)): pass
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### 控时长(混剪友好)
|
|
92
|
+
|
|
93
|
+
```python
|
|
94
|
+
class SaddleFast(saddle_surface_scene(pace="fast", name="SaddleFast")): # 10 秒
|
|
95
|
+
class SaddleTeaser(saddle_surface_scene(duration=16, name="SaddleTeaser")): # 16 秒
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
`duration=16` 时放不下全部节拍?库会按 **等高线 → 平面 → 标注 → 环绕 → 翻面** 的优先级
|
|
99
|
+
自动砍拍并打印,保住"成型 → 环绕 → 翻面"主线——混剪快切时每一拍依然完整。
|
|
100
|
+
|
|
101
|
+
### 换函数 / 换配色 / 换形状
|
|
102
|
+
|
|
103
|
+
```python
|
|
104
|
+
import numpy as np
|
|
105
|
+
from manim_3d import gaussian_surface_scene
|
|
106
|
+
|
|
107
|
+
# 高斯曲面接受任意 z=f(x,y),峰值自动归一化,不用调坐标轴
|
|
108
|
+
class MySurface(gaussian_surface_scene(
|
|
109
|
+
func=lambda x, y: np.exp(-((x - 1) ** 2 + y * y)),
|
|
110
|
+
colors="ocean", # rainbow / ocean / magma 或自定义色带
|
|
111
|
+
)): pass
|
|
112
|
+
|
|
113
|
+
# 椭球三轴随意改,公式自动跟着变
|
|
114
|
+
class MyEgg(ellipsoid_surface_scene(semi_axes=(2.6, 1.4, 1.8))): pass
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## 参数一览
|
|
118
|
+
|
|
119
|
+
| 参数 | 默认 | 说明 |
|
|
120
|
+
|---|---|---|
|
|
121
|
+
| `func` / `func_tex`(高斯) | 内置高斯 | 任意 `z=f(x,y)`;公式 LaTeX 自动/手填 |
|
|
122
|
+
| `semi_axes`(椭球) | (2.4, 1.6, 1.2) | 半轴 (a, b, c),坐标轴等比缩放防畸变 |
|
|
123
|
+
| `major_radius` / `minor_radius`(圆环面) | 2.0 / 0.5 | 环半径 / 管半径 |
|
|
124
|
+
| `waist_radius` / `z_extent`(单叶双曲面) | 1.0 / 1.5 | 腰圆半径 / 上下截断高度 |
|
|
125
|
+
| `domain` | ±2.2~2.6 | 图曲面 x/y 定义域 |
|
|
126
|
+
| `colors` | "rainbow" | `rainbow / ocean / magma` 或 `[(hex, 0~1)...]` |
|
|
127
|
+
| `height` | 1.0~1.2 | 峰值自动归一化目标高度 |
|
|
128
|
+
| `axes / rings / orbit / flip / annotate` | True | 五个节拍开关 |
|
|
129
|
+
| `captions` | None | 字幕按节拍槽位对位,不传 = 无字幕 |
|
|
130
|
+
| `duration` / `pace` | "full" | 内容预算秒数;`fast`=10s / `normal`=24s / `full`=45s |
|
|
131
|
+
|
|
132
|
+
### 字幕槽位
|
|
133
|
+
|
|
134
|
+
按曲面节拍序列位置对位:高斯 6 槽(片头/坐标轴/隆起/环绕/翻面/片尾),
|
|
135
|
+
其余 7 槽(多一个"等高线"槽)。传少于槽数的条目时自动截取。
|
|
136
|
+
|
|
137
|
+
### 配速规则
|
|
138
|
+
|
|
139
|
+
每拍带三个数:**参考时长**(完整版节奏)、**下限**(低于就难看的压缩底线)、
|
|
140
|
+
**上限倍率**(拉伸顶格)。`duration` 先等比分摊,夹进上下限迭代收敛;
|
|
141
|
+
全体顶到下限仍放不下才砍拍。环绕拍永远**恰好转满一整圈**(角速度随时长自适应)。
|
|
142
|
+
|
|
143
|
+
## 六曲面差异一览
|
|
144
|
+
|
|
145
|
+
| 曲面 | 方程 | 成型 | 等高线 | 标注 |
|
|
146
|
+
|---|---|---|---|---|
|
|
147
|
+
| 高斯曲面 | z = e^(−x²−y²) | 平面隆起 | 地板投影圆 | 峰顶 3D 标签 |
|
|
148
|
+
| 马鞍面 | z = x² − y² | 平面扭曲 | 双曲线族 + 渐近线 | 鞍点 HUD 标签 |
|
|
149
|
+
| 抛物面 | z = x² + y² | 平面卷起 | 贴面同心圆 | 顶点 HUD 标签 |
|
|
150
|
+
| 椭球面 | x²/a²+y²/b²+z²/c²=1 | 充气成型 | 贴面水平椭圆环 | 上顶点 3D 标签 |
|
|
151
|
+
| 圆环面 | (√(x²+y²)−R)²+z²=r² | 充气成型 | 贴面水平成对圆环 | 最高点 3D 标签 |
|
|
152
|
+
| 单叶双曲面 | x²+y²−z²=a² | 充气成型 | 水平圆族(含腰圆) | 腰点 HUD 标签 |
|
|
153
|
+
|
|
154
|
+
标注方案按几何自动选择:特征点外露用 3D 标签(天线虚线),被曲面环抱则用
|
|
155
|
+
**相机定格投影 + 固定帧** 的屏幕 HUD 标签,永不被深度遮挡。
|
|
156
|
+
|
|
157
|
+
## 设计边界(诚实声明)
|
|
158
|
+
|
|
159
|
+
- 高斯等高线为径向近似,仅旋转对称函数精确;一般函数建议 `rings=False`
|
|
160
|
+
- 马鞍/抛物面/圆环面/单叶双曲面为固定几何预设(解析等高线依赖具体方程),
|
|
161
|
+
任意函数请走高斯入口
|
|
162
|
+
- 双叶双曲面等参数曲面在路线图上
|
|
163
|
+
|
|
164
|
+
## 用它做过的片子
|
|
165
|
+
|
|
166
|
+
《立体几何 N 画》系列(B站):高斯曲面 · 第一画 / 马鞍面 · 第二画 / 抛物面 · 第三画 /
|
|
167
|
+
椭球面 · 第四画 / 圆环面 · 第五画 / 单叶双曲面 · 第六画 —— 全部由本库(或其前身脚本)直接渲染。
|
|
168
|
+
|
|
169
|
+
## License
|
|
170
|
+
|
|
171
|
+
[MIT](LICENSE) © FTZ-OPUS
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""manim-3d —— Manim 三维几何与动画。闭式管面与图曲面预设,几行代码出片。"""
|
|
3
|
+
from .core import (
|
|
4
|
+
GaussianSurface, SaddleSurface, ParaboloidSurface, EllipsoidSurface,
|
|
5
|
+
TorusSurface, HyperboloidOneSheet,
|
|
6
|
+
gaussian_surface_scene, saddle_surface_scene, paraboloid_surface_scene,
|
|
7
|
+
ellipsoid_surface_scene, torus_surface_scene, hyperboloid_one_sheet_scene,
|
|
8
|
+
GaussianSurfaceScene, SaddleSurfaceScene, ParaboloidSurfaceScene,
|
|
9
|
+
EllipsoidSurfaceScene, TorusSurfaceScene, HyperboloidOneSheetScene,
|
|
10
|
+
plan_timeline, RAMPS, PACE,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
__version__ = "0.1.0"
|
|
14
|
+
__all__ = [
|
|
15
|
+
"GaussianSurface", "SaddleSurface", "ParaboloidSurface", "EllipsoidSurface",
|
|
16
|
+
"TorusSurface", "HyperboloidOneSheet",
|
|
17
|
+
"gaussian_surface_scene", "saddle_surface_scene", "paraboloid_surface_scene",
|
|
18
|
+
"ellipsoid_surface_scene", "torus_surface_scene", "hyperboloid_one_sheet_scene",
|
|
19
|
+
"GaussianSurfaceScene", "SaddleSurfaceScene", "ParaboloidSurfaceScene",
|
|
20
|
+
"EllipsoidSurfaceScene", "TorusSurfaceScene", "HyperboloidOneSheetScene",
|
|
21
|
+
"plan_timeline", "RAMPS", "PACE", "__version__",
|
|
22
|
+
]
|