二次曲面是可以化为一般形式的任意方程的图形
这里面A,...,J是常数。我们不可能把它们都列出来,但是有一些标准方程所以这里是一些更常见的二次曲面的列表。
1. 椭球体
这是椭球体的一般方程。。
这是一个典型椭球体的草图。
接下来我们用Manim实现该椭球体的绘制。
示例代码:
from manim import * # 导入 Manim 的所有模块和类
class EllipsoidScene(ThreeDScene): # 定义一个名为 EllipsoidScene 的 3D 场景类
def construct(self): # 定义构造方法
self.camera.background_color = WHITE # 设置相机背景颜色为白色
# 设置椭球体的参数
a, b, c = 1.5, 3.5, 1 # a, b, c 分别是椭球体的半径参数
# 使用参数方程创建椭球体
ellipsoid = Surface(
lambda u, v: np.array([
a * np.cos(u) * np.sin(v), # x 坐标
b * np.sin(u) * np.sin(v), # y 坐标
c * np.cos(v) # z 坐标
]),
u_range=[0, TAU], # 参数 u 的范围为 0 到 2π
v_range=[0, 2*PI], # 参数 v 的范围为 0 到 2π
resolution=(24, 48), # 设置网格分辨率
)
# 设置椭球体的样式:填充颜色为红色,填充透明度为1,轮廓颜色为白色
ellipsoid.set_style(fill_color=(RED, RED_E), fill_opacity=1, stroke_color=WHITE)
# 在椭球体的表面上添加平行线
for v in np.linspace(-PI/2, PI/2, 5): # 在 v 的范围内均匀分布5个值
line = Line(
start=np.array([a * np.cos(0) * np.sin(v), b * np.sin(0) * np.sin(v), c * np.cos(v)]),
end=np.array([a * np.cos(TAU) * np.sin(v), b * np.sin(TAU) * np.sin(v), c * np.cos(v)])
)
line.set_color(WHITE) # 将线的颜色设置为白色
line.set_stroke(width=1.5) # 设置线的宽度
self.add(line) # 将线添加到场景中
# 将椭球体添加到场景中
self.add(ellipsoid)
# 添加坐标轴
axes = ThreeDAxes().set_color(BLACK) # 创建坐标轴,并设置颜色为黑色
self.add(axes) # 将坐标轴添加到场景中
# 为坐标轴添加标签
x_label = MathTex("X").next_to(axes.x_axis.get_end(), RIGHT).set_color(BLACK)
y_