python动画:三维空间中创建各种形状和场景【中】

6.三维线条(Line3D)

Line3D 是用来在三维空间中绘制一条线的一个函数(通常出现在绘图库如 Matplotlib 中)。

python 复制代码
Line3D(start=array([-1., 0., 0.]), end=array([1., 0., 0.]), thickness=0.02,
 color=None, **kwargs)

具体解释如下:

函数名

  • Line3D:表示创建一个三维线段的对象。

参数

  1. start:

    • 类型:array
    • 描述:线段的起点坐标,通常是一个包含三个元素的数组,分别代表 x、y、z 坐标。
    • 示例:array([-1., 0., 0.]) 表示起点在三维坐标系中的位置为 (-1, 0, 0)。
  2. end:

    • 类型:array
    • 描述:线段的终点坐标,同样是一个包含三个元素的数组。
    • 示例:array([1., 0., 0.]) 表示终点在三维坐标系中的位置为 (1, 0, 0)。
  3. thickness:

    • 类型:float
    • 描述:线段的厚度,数值越大,线段看起来越粗。
    • 示例:0.02 表示线段的厚度为 0.02 单位。
  4. color:

    • 类型:可选,通常是字符串或数组
    • 描述:线段的颜色。如果为 None,则会使用默认颜色。
    • 示例:可以指定为颜色名称(如 'red')、十六进制字符串(如 '#FF0000'),或 RGB 值(如 array([1, 0, 0]))。
  5. kwargs:

    • 用于传递其他额外参数,这些参数可能是其他的样式设置,比如透明度、线型等,取决于具体的库实现。

示例1:

python 复制代码
from manim import *

class ExampleLine3D(ThreeDScene):
    def construct(self):
        axes = ThreeDAxes()
        line = Line3D(start=np.array([0, 0, 0]), end=np.array([2, 2, 2]),color=RED)
        self.set_camera_orientation(phi=75 * DEGREES, theta=30 * DEGREES)
        self.add(axes, line)

三维线条的子函数:

1平行线段
python 复制代码
parallel_to(line, point=array([0., 0., 0.]), length=5, **kwargs)
函数说明
  • 该函数用于创建一条与给定线 line 平行的线段。
参数
  • line: 需要平行的线段,一般是一个线段对象。
  • point :
    • 类型:array
    • 描述:平行线段的起始点,默认为原点 (0, 0, 0)
  • length :
    • 类型:float
    • 描述:新线段的长度,默认为 5 单位。
  • kwargs :
    • 描述:其他额外参数,比如颜色、线型等,这些将被传递给创建的线段。
示例:
python 复制代码
from manim import *

class ParallelLineExample(ThreeDScene):
    def construct(self):
        self.set_camera_orientation(PI / 3, -PI / 4)
        ax = ThreeDAxes((-5, 5), (-5, 5), (-5, 5), 10, 10, 10)
        line1 = Line3D(RIGHT * 2, UP + OUT, color=RED)
        line2 = Line3D.parallel_to(line1, color=YELLOW)
        self.add(ax, line1, line2)
2.垂直的线段
python 复制代码
perpendicular_to(line, point=array([0., 0., 0.]), length=5, **kwargs)
函数说明
  • 该函数用于创建一条与给定线 line 垂直的线段。
参数
  • line: 需要垂直的线段,一般是一个线段对象。
  • point :
    • 类型:array
    • 描述:垂线的起始点,默认为原点 (0, 0, 0)
  • length :
    • 类型:float
    • 描述:新线段的长度,默认为 5 单位。
  • kwargs :
    • 描述:其他额外参数,用于进一步定制新生成的线段。
示例:
python 复制代码
from manim import *

class PerpLineExample(ThreeDScene):
    def construct(self):
        self.set_camera_orientation(PI / 3, -PI / 4)
        ax = ThreeDAxes((-5, 5), (-5, 5), (-5, 5), 10, 10, 10)
        line1 = Line3D(RIGHT * 2, UP + OUT, color=RED)
        line2 = Line3D.perpendicular_to(line1, color=BLUE)
        self.add(ax, line1, line2)
3.线条转换为一个点
python 复制代码
pointify(mob_or_point, direction=None)
函数说明
  • 该函数的目的是将一个对象(可能是移动对象或单一的点)转换为一个点。如果提供了方向,可能还会结合该方向进行处理。
参数
  • mob_or_point :
    • 描述:可以是一个点或者一个可移动对象(mob),函数会将其转化为点的形式。
  • direction :
    • 可选参数,描述一个方向向量,可能用于确定转换的方式或最终结果的位置。
4.线段设置起始点和终点的属性
python 复制代码
set_start_and_end_attrs(start, end, **kwargs)
函数说明
  • 该函数用于为线段设置起始点和终点的属性。
参数
  • start :
    • 类型:array
    • 描述:线段的起始点坐标,通常是一个三维坐标数组。
  • end :
    • 类型:array
    • 描述:线段的终点坐标,同样是一个三维坐标数组。
  • kwargs :
    • 描述:其他可选参数,可以用来设置起点或终点的额外属性,比如颜色、厚度等。这些属性将应用于线段的视觉效果。

7.创建一个棱柱(Prism)

Prism(dimensions=[3, 2, 1], **kwargs) 表示一个函数或构造函数,用于创建一个棱柱(Prism)对象。以下是对该函数及其参数的详细解释:

python 复制代码
Prism(dimensions=[3, 2, 1], **kwargs)

函数说明

Prism 通常用于在几何或图形处理上下文中表示一个三维的棱柱体。在这个例子中,构造一个具有特定维度的棱柱体。

参数

  1. dimensions:

    • 类型:list or array
    • 描述:这是一个包含多个维度的列表。在此示例中,[3, 2, 1] 表示棱柱的每个维度的长度。具体来说:
      • 3 表示在 x 轴方向的长度。
      • 2 表示在 y 轴方向的长度。
      • 1 表示在 z 轴方向的长度。
    • 这意味着该棱柱体在三维空间中的尺寸为 3(x 轴)、2(y 轴)和 1(z 轴)。
  2. kwargs:

    • 类型:dict
    • 描述:这是一个可选参数,允许您传递额外的关键字参数,用于配置创建的棱柱的属性。这些属性可能包括但不限于:
      • 颜色:定义棱柱的颜色。
      • 透明度:定义棱柱的透明度值。
      • 边界参数:例如线条的粗细、轮廓颜色等。
    • kwargs 提供了灵活性,可以根据需要自定义棱柱的外观和行为。

示例:

python 复制代码
from manim import *

class ExamplePrism(ThreeDScene):
    def construct(self):
        self.set_camera_orientation(phi=60 * DEGREES, theta=150 * DEGREES)
        prismSmall = Prism(dimensions=[1, 2, 3]).rotate(PI / 2).set_color(RED)
        prismLarge = Prism(dimensions=[1.5, 3, 4.5]).move_to([2, 0, 0])
        self.add(prismSmall, prismLarge)

8.创建一个球体(Sphere)

python 复制代码
Sphere(center=array([0., 0., 0.]), radius=1, resolution=None, u_range=(0, 
6.283185307179586), v_range=(0, 3.141592653589793), **kwargs)

是一个用于创建球体对象的函数或构造函数。以下是对该函数及其参数的详细解释:

函数说明

Sphere 用于在三维空间中创建一个球体。它通常用于计算机图形学、游戏开发或物理模拟中,以表示球形对象。

参数

  1. center:

    • 类型:array
    • 描述:这是一个表示球体中心位置的数组。在此示例中,array([0., 0., 0.])表示球体的中心位于原点(0, 0, 0)。
  2. radius:

    • 类型:float
    • 描述:表示球体的半径。在此示例中,radius=1 表示球体的半径为 1 个单位。
  3. resolution:

    • 类型:int or None
    • 描述:可选参数,表示球体的分辨率。分辨率通常决定了球面网格的细分程度(多少个面来近似球体)。如果设置为 None,通常使用默认值,具体取决于实现。
  4. u_range:

    • 类型:tuple
    • 描述:一个元组,表示球体的 u 参数的范围。u 参数通常用于定义球体的一个特定方向的角度范围。在此示例中,u_range=(0, 6.283185307179586) 代表一整圈(0 到 2π)。
  5. v_range:

    • 类型:tuple
    • 描述:一个元组,表示球体的 v 参数的范围。v 参数通常用于定义球体的另一个方向的角度范围。在此示例中,v_range=(0, 3.141592653589793) 代表从0到π(半球),即从赤道到北极(或南极)。
  6. kwargs:

    • 类型:dict
    • 描述:可选参数,允许您传递额外的关键字参数,用于配置创建的球体的属性。这些属性可能包括球体的颜色、纹理、光照等。

示例 :

python 复制代码
class ExampleSphere(ThreeDScene):
    def construct(self):
        self.set_camera_orientation(phi=PI / 6, theta=PI / 6)
        sphere1 = Sphere(
            center=(3, 0, 0),
            radius=1,
            resolution=(20, 20),
            u_range=[0.001, PI - 0.001],
            v_range=[0, TAU]
        )
        ax= axes = ThreeDAxes().set_color(YELLOW)
        self.add(ax)
        sphere1.set_color(RED)
        self.add(sphere1)
        sphere2 = Sphere(center=(-1, -3, 0), radius=2, resolution=(18, 18))
        sphere2.set_color(GREEN)
        self.add(sphere2)
        sphere3 = Sphere(center=(-1, 2, 0), radius=2, resolution=(16, 16))
        sphere3.set_color(BLUE)
        self.add(sphere3)
相关推荐
丕羽1 小时前
【Pytorch】基本语法
人工智能·pytorch·python
bryant_meng1 小时前
【python】Distribution
开发语言·python·分布函数·常用分布
m0_594526302 小时前
Python批量合并多个PDF
java·python·pdf
工业互联网专业3 小时前
Python毕业设计选题:基于Hadoop的租房数据分析系统的设计与实现
vue.js·hadoop·python·flask·毕业设计·源码·课程设计
钱钱钱端3 小时前
【压力测试】如何确定系统最大并发用户数?
自动化测试·软件测试·python·职场和发展·压力测试·postman
慕卿扬3 小时前
基于python的机器学习(二)—— 使用Scikit-learn库
笔记·python·学习·机器学习·scikit-learn
Json____3 小时前
python的安装环境Miniconda(Conda 命令管理依赖配置)
开发语言·python·conda·miniconda
小袁在上班3 小时前
Python 单元测试中的 Mocking 与 Stubbing:提高测试效率的关键技术
python·单元测试·log4j
白狐欧莱雅3 小时前
使用python中的pygame简单实现飞机大战游戏
经验分享·python·游戏·pygame
阿_旭3 小时前
基于YOLO11/v10/v8/v5深度学习的维修工具检测识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】
人工智能·python·深度学习·qt·ai