ConeManim中专门用于创建和操控锥形几何对象的类。

Cone允许用户定义锥体的底面半径、高度、颜色、不透明度等属性,并提供了一系列方法来操控这个锥体,如移动、缩放、旋转等。

通过这些属性和方法,用户可以灵活地创建出符合自己需求的锥形对象,并将其融入到动画或演示中。

1. 主要参数

Cone的主要参数有:

参数名称 类型 说明
base_radius float 圆锥底部的半径
height float 圆锥的高度,也就是圆锥从底面中心到顶点的垂直距离
direction np.ndarray 圆锥的朝向
show_base bool 是否显示圆锥的底面
v_range list[float] 圆锥纵向扫描的范围,用于控制圆锥侧面的纵向形状
u_min float 圆锥横向扫描的最小角度,影响圆锥侧面的横向分布
checkerboard_colors bool 是否使用棋盘格颜色模式,有助于在视觉上区分圆锥的不同部分

这些参数允许用户灵活地创建和自定义圆锥体对象。

例如,

  • 通过调整base_radiusheight参数,可以改变圆锥的大小和形状;
  • 通过direction参数,可以控制圆锥的朝向;
  • show_basev_rangeu_mincheckerboard_colors参数则提供了对圆锥视觉表现的进一步定制。

2. 主要方法

Cone类有两个自己特有的改变方向的方法:

名称 说明
get_direction 用于获取圆锥体的方向向量。这个方向向量通常是一个三维向量,表示圆锥体在空间中的朝向。
set_direction 用于设置圆锥体的方向向量。通过传入一个新的三维向量,可以改变圆锥体在空间中的朝向。

3. 使用示例

下面的示例将展示如何创建圆锥体对象、设置其参数、以及调用其方法来改变圆锥体的属性或进行动画。

3.1. 基本的圆锥体

本示例展示了如何在Manim场景中创建一个基本的圆锥体。

圆锥体具有指定的底面半径和高度,并且默认方向朝上。

# 创建一个底面半径为1,高度为2的圆锥体,
# 方向朝上(默认方向)
cone = Cone(base_radius=1, height=2)

3.2. 自定义圆锥体

在此示例中,创建了一个圆锥体,并对其进行了自定义设置。

这包括设置圆锥体的填充颜色边框颜色边框宽度,以及将其移动到场景中的特定位置

这样,圆锥体不仅具有独特的外观,还位于用户指定的位置。

# 创建一个底面半径为1.5,高度为3的圆锥体,
# 设置填充颜色和边框颜色
cone = Cone(
base_radius=1.5,
height=3,
fill_color=RED,
stroke_color=YELLOW,
stroke_width=2,
)
# 将圆锥体移动到场景中的特定位置
cone.move_to(np.array([1, 1, 1]))

3.3. 旋转和缩放

这个示例演示了如何为圆锥体添加动画效果。

首先,创建了一个圆锥体,并随后应用了两种动画:旋转和缩放。

圆锥体先绕y轴旋转了一定角度,然后按比例放大。

# 创建一个底面半径为1,高度为2的圆锥体
cone = Cone(
base_radius=1,
height=2,
fill_color=BLUE,
)
# 将圆锥体添加到场景中
self.play(Create(cone))
# 创建旋转动画,绕y轴旋转90度
self.play(
Rotate(
cone,
axis=Y_AXIS,
angle=PI / 2,
),
)
# 创建缩放动画,将圆锥体放大1.5倍
self.play(cone.animate.scale(1.5))

3.4. 复制和排列

此示例展示了如何复制圆锥体并将其排列成一行。

首先,创建了一个圆锥体作为模板,然后使用循环创建了多个该圆锥体的副本,并将它们稍微移动位置以排列成一行。

# 创建一个底面半径为0.5,高度为1的圆锥体作为模板
cone_tpl = Cone(
base_radius=0.5,
height=1,
fill_color=GREEN,
)
# 创建一个圆锥体数组,
# 每个圆锥体都是模板的复制,并稍微移动位置
cones = VGroup(
*[cone_tpl.copy().move_to([i, 0, 0]) for i in range(5)]
)
# 将圆锥体数组添加到场景中
self.play(Create(cones))
# 整个圆锥体数组一起移动
self.play(cones.animate.shift(LEFT * 3))

4. 附件

文中的代码只是关键部分的截取,完整的代码共享在网盘中(cone.py),

下载地址: 完整代码 (访问密码: 6872)

manim边做边学--圆锥的更多相关文章

  1. 边做边学入门微信小程序之仿豆瓣评分

    微信小程序由于适用性强.逻辑简要.开发迅速的特性,叠加具有海量活跃用户的腾讯公司背景,逐渐成为了轻量级单一功能应用场景的较佳承载方式,诸如电影购票.外卖点餐.移动商城.生活服务等场景服务提供商迅速切入 ...

  2. Grails边做边学入门篇[1]--------大家一起来动手建立project和Domain

    近期工作比較忙,没空写博客了.我发现每周五的下午都是我最放松的时候,可能是迟延症的缘故吧...总是寄希望于周末,慢慢的.我的周末就被工作占领了. 希望大家不要有这种坏毛病.今日事,今日毕.当然我们程序 ...

  3. 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good

    作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...

  4. 【Leetcode 做题学算法周刊】第四期

    首发于微信公众号<前端成长记>,写于 2019.11.21 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 67 ...

  5. 做fzu oj 1045 做减法学到的sprintf()函数

    题目 做题一直输不出答案,于是就上网去百度了这题的解题,发现解答十分的简短,而且其中我看见了平时没见过的函数,sprintf(). 于是就百度sprintf()的使用. 如下: 函数功能:把格式化的数 ...

  6. 【Leetcode 做题学算法周刊】第一期

    首发于微信公众号<前端成长记>,写于 2019.10.28 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 1. ...

  7. 【Leetcode 做题学算法周刊】第二期

    首发于微信公众号<前端成长记>,写于 2019.11.05 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 20 ...

  8. 【Leetcode 做题学算法周刊】第三期

    首发于微信公众号<前端成长记>,写于 2019.11.13 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 35 ...

  9. 【Leetcode 做题学算法周刊】第六期

    首发于微信公众号<前端成长记>,写于 2019.12.15 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 11 ...

  10. 【Leetcode 做题学算法周刊】第七期

    首发于微信公众号<前端成长记>,写于 2020.01.15 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 12 ...

随机推荐

  1. 全网最适合入门的面向对象编程教程:41 Python 常用复合数据类型-队列(FIFO、LIFO、优先级队列、双端队列和环形队列)

    全网最适合入门的面向对象编程教程:41 Python 常用复合数据类型-队列(FIFO.LIFO.优先级队列.双端队列和环形队列) 摘要: 在 Python 中,队列(Queue)是一种常用的数据结构 ...

  2. Redis高可用方案:使用Keepalived实现主备双活

    注意:请确保已经安装Redis和keepalived,本文不在介绍如何安装. 1.使用版本说明 Redis版本:5.0.2 Keepalived版本:1.3.5 Linux 版本:Centos7.9 ...

  3. docker高级篇第二章-分布式存储之实战案例:主从容错切换迁移案例

    在上一篇,学会了3主3从的Redis集群搭建.那么接下来,我们就来学习Redis集群主从容错切换迁移案例 本次案例从模拟两个场景 1:数据读写存储 a:一个新key数据来了,是否会按照预设的进入槽中? ...

  4. Java并发之原子变量及CAS算法-上篇

    Java并发之原子变量及CAS算法-上篇   概述 本文主要讲在Java并发编程的时候,如果保证变量的原子性,在JDK提供的类中式怎么保证变量原子性的呢?.对应Java中的包是:java.util.c ...

  5. 【YashanDB知识库】YMP元数据阶段二报错YAS-04204

    [问题分类]YMP迁移 [关键字]YMP迁移,YAS-04204 [问题描述]数据库采用最小规格部署,机器配置2C8G,使用YMP进行数据和对象迁移,在元数据阶段二创建索引时报错:YAS-04204 ...

  6. Coursera, Big Data 5, Graph Analytics for Big Data, Week 5

    Computing Platforms for Graph Analytics programming models for Graphs Giraph and GraphX 其中讲 GraphX 的 ...

  7. 国内加速拉取docker镜像的几种方法

    参考首页 快捷命令,使用本站代理拉取镜像,并修改回原始镜像名,在删除代理镜像名. 参考以下 docker cli 和 docker-compose.yml 修改镜像名后,继续一直使用本站代理服务未启动 ...

  8. Go实现实时文件监控功能

    一.使用库介绍 fsnotify 是 Go 语言中的一个库,用于监听文件系统的变更事件.它允许程序注册对文件系统事件的兴趣,并在这些事件发生时接收通知.fsnotify 主要用来监控目录下的文件变化, ...

  9. AJAX——简介

    AJAX 同步与异步 AJAX 快速入门   

  10. 最小代价的 SSO 单点登录方案

    现在有多个 WebApp,想用最小的代价实现 SSO 单点登录.所谓最小代价,我的理解就是对原有 WebApp 的改动最小,因此 在旁路增加一个 SsoWebApp 用于管理 SSO 的账号,进行身份 ...