【Manim】用manim描述二次曲面——上

二次曲面是可以化为一般形式的任意方程的图形

A{x^2} + B{y^2} + C{z^2} + Dxy + Exz + Fyz + Gx + Hy + Iz + J = 0 这里面A,...,J是常数。我们不可能把它们都列出来,但是有一些标准方程所以这里是一些更常见的二次曲面的列表。

1. 椭球体

这是椭球体的一般方程。\frac{x^2}{a^2} + \frac{y^2}{b^2} + \frac{z^2}{c^2} = 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_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yasen.M

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值