【Blender Python】7.一些运算、三角函数以及随机

news2024/10/9 22:19:56

概述

要用Blender进行程序生成,数学计算是少不了的,Python支持一些常规的表达式计算,而另外一些相关的数学函数则在math模块中。

一些基础的运算

取余、除法、整除

>>> 21 % 4
1

>>> 21 / 4
5.25

>>> 21 // 4
5
  • %是取余,/是除法,//是整除,不保留小数

乘法

>>> 3 * 3
9

>>> 3 * 3.0
9.0

>>> 3 * "="
'==='

>>> 3 * "._"
'._._._'

>>> 3 * C.active_object
Traceback (most recent call last):
  File "<blender_console>", line 1, in <module>
TypeError: unsupported operand type(s) for *: 'int' and 'Object'
  • 整数与整数相乘,结果还是一个整数
  • 整数与浮点数相乘,结果是一个浮点数
  • 字符或字符串乘以一个整数,结果返回其重复多次组成的字符串
  • 数字类型乘以对象或其他不能相乘的类型,会返回类型错误
>>> 2 * 5
10

>>> 2 ** 5
32

>>> 2 ** 5 ** 6
Traceback (most recent call last):
  File "<blender_console>", line 1, in <module>
ValueError: Exceeds the limit (4300 digits) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit

>>> (2 ** 5 ) ** 6
1073741824

*代表乘法,**代表幂运算,例如:2 ** 5代表$ 2^5 。 ‘ ( 2 ∗ ∗ 5 ) ∗ ∗ 6 ‘ 代表 。`(2 ** 5 ) ** 6`代表 (25)6‘代表 (25)6 。要表示 。要表示 。要表示 2{56} $则需要表示为2 ** (5 ** 6 )

math模块

具体可以参考:Python math 模块 | 菜鸟教程 (runoob.com)。这里只专注于最常用的三角函数部分。

两个常量

首先是两个三角函数相关的常量:

import bpy
import math

print(math.pi)  # 代表π = 3.141592653589793
print(math.tau) # 代表2π = 6.283185307179586

在脚本文件中的print()并不会在脚本界面的Python控制台中输出内容。而是要打开Blender的系统控制台。

打开后可以看到输出的信息:

角度和弧度转换

<font style="color:rgb(0, 0, 0);">degrees()</font><font style="color:rgb(0, 0, 0);">radians()</font>用于角度和弧度的转换

import bpy
import math

print(math.degrees(math.pi))   # 180.0
print(math.degrees(math.tau))  # 360.0
print(math.radians(90))        # 1.5707963267948966
print(math.radians(180))       # 3.141592653589793

利用三角函数实现环形阵列

import bpy
import math

# 环形阵列
def circle_array(r,steps):
    ang = math.tau/steps
    for i in range(steps):
        i_ang = ang * i
        pos = (r * math.cos(i_ang),r * math.sin(i_ang),0)
        bpy.ops.mesh.primitive_cube_add(location=pos)


circle_array(10,6)

执行后的效果:

可以看到在XY平面上,环形阵列了6个立方体。

circle_array(10,12)

让立方体跟随旋转

上面的环形阵列,立方体并没有跟随阵列进行旋转。

import bpy
import math

# 环形阵列
def circle_array(r,steps):
    ang = math.tau/steps
    for i in range(steps):
        i_ang = ang * i
        pos = (r * math.cos(i_ang),r * math.sin(i_ang),0)
        bpy.ops.mesh.primitive_cube_add(location=pos)
        bpy.context.object.rotation_euler.z = i_ang

circle_array(10,12)

改进后,可以看到立方体跟随阵列进行了旋转。

可以看到三角函数还是很重要的,尤其是在从方到圆,以及旋转上的应用。

随机

除了三角函数,随机在程序生成中也是很重要的,Python中的随机数生成由<font style="color:rgb(17, 17, 17);">random</font>模块掌管,具体可参考Python 随机数生成 | 菜鸟教程 (runoob.com)。

这里结合环形阵列,添加一个随机范围的高度。

import bpy
import math
import random

# 环形阵列 + 随机高度
def circle_array(r,steps,min_z,max_z):
    ang = math.tau/steps
    for i in range(steps):
        i_ang = ang * i
        pos = (r * math.cos(i_ang),r * math.sin(i_ang),random.randint(min_z, max_z))
        bpy.ops.mesh.primitive_cube_add(location=pos)
        bpy.context.object.rotation_euler.z = i_ang

circle_array(10,12,-5,5)

circle_array(10,12,-1,1)

一点小改进

之前编写的代码,执行前都需要手动全选和删除场景中原来的对象。很是麻烦。所以这节我们改进一下。首先是添加清除当前场景中的所有物体的指令,然后是编写主函数,执行操作。

import bpy
import math
import random

# 环形阵列 + 随机高度
def circle_array(r,steps,min_z,max_z):
    ang = math.tau/steps
    for i in range(steps):
        i_ang = ang * i
        pos = (r * math.cos(i_ang),r * math.sin(i_ang),random.randint(min_z, max_z))
        bpy.ops.mesh.primitive_cube_add(location=pos)
        bpy.context.object.rotation_euler.z = i_ang


# 主函数
if __name__ == '__main__':
    # 清除当前场景中的所有物体
    bpy.ops.object.select_all(action='SELECT')
    bpy.ops.object.delete()
    # 执行环形阵列
    circle_array(10,12,-1,1)

我们通过if __name__ == '__main__':设定主函数,并在其中执行清除当前场景中的所有物体以及调用环形阵列函数的代码。

则点击运行按钮时,每次都会执行主函数内容,而不再需要手动全选和删除。

总结

本节内容,介绍了一些基础运算的细节,以及引入程序生成必备的三角函数和随机。不详之处后改后补。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2195687.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视频画面提取保存为图片:简易方法与实用工具

如果需要在视频里随机截取某一帧作为照片来保存或分享&#xff0c;如何快速剪辑多个视频&#xff1f;幸运的是&#xff0c;如今有多种简易的方法和实用的工具可以帮助我们轻松实现这一目标。 1打开“媒体梦工厂”用到“视频封面”功能&#xff0c; 2在此功能里切换到“抽帧/提取…

通过实时可视性转变云安全

Upwind首席执行官 Amiram Shachar 讨论了混合和多云环境中云安全的复杂性。 他概述了深入了解配置和实时洞察的必要性&#xff0c;以实现敏捷性和安全性之间的平衡。 还分享了解决错误配置和确保合规性的策略&#xff0c;建议在云部署中采取主动的风险管理方法。 随着混合云…

毕设 大数据电影数据分析与可视化系统(源码+论文)

文章目录 0 前言1 项目运行效果2 设计概要3 最后 0 前言 &#x1f525;这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师…

Bluetooth Channel Sounding中关于CS Event Subevent的详细介绍

BLE CS Event & Subevent定义&#xff1a; BLE CS Event事件定义为&#xff1a;CS 事件被定义为从同一个 LE piconet 物理通道连接事件锚点具有相同偏移Offset的所有 CS Subevent子事件组&#xff0c;如图 1所示&#xff0c;具体参考Vol 1, Part A 3.3.2.5.2 Characteristi…

自动驾驶系统研发系列—如何选择适合自动驾驶的激光雷达?从基础到高端全解读

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

CSS圆角

在制作网页的过程中&#xff0c;有时我们可能需要实现圆角的效果&#xff0c;以前的做法是通过切图&#xff08;将设计稿切成便于制作成页面的图片&#xff09;&#xff0c;使用多个背景图像来实现圆角。在 CSS3 出现之后就不需要这么麻烦了&#xff0c;CSS3 中提供了一系列属性…

阿里云APP创建

首先进入阿里云生活物联网平台 阿里云生活物联网平台 创建新项目 然后创建新产品 完成后进入功能定义区 已经定义号插座电源开关&#xff0c;直接下一步 注意保留三元组信息 进入设备调试 没有模组&#xff0c;直接下一步 人机交互界面 最后测试 激活码&…

十大时间序列预测模型

目录 1. 自回归模型 原理 核心公式 推导过程: 完整案例 2. 移动平均模型 原理 核心公式 推导过程: 完整案例 3. 自回归移动平均模型 原理 核心公式 推导过程: 完整案例 4. 自回归积分移动平均模型 原理 核心公式 推导过程 完整案例 5. 季节性自回归积分…

Axios 快速入门

什么是Ajax Ajax 是一种通过 JavaScript 发送异步请求的技术&#xff0c;它的核心是使用 XMLHttpRequest 对象来与服务器交换数据。这种方式较为繁琐&#xff0c;因为需要手动处理请求状态和响应&#xff0c;并且编写的代码往往比较冗长。 相较之下&#xff0c;Axios 是一个基于…

其他:Python语言绘图合集

文章目录 介绍注意导入数据函数模块画图 介绍 python语言的科研绘图合集 注意 This dataset includes the following (All files are preceded by "Marle_et_al_Nature_AirborneFraction_"):- "Datasheet.xlsx": Excel dataset containing all annual a…

感知机学习算法

感知机 一、感知机简介二、感知机模型2.1 感知机的基本组成2.2 求和函数2.2.1 时间总合2.2.2 空间总合 2.3 激活函数2.4 学习算法2.4.1 赫布学习规则2.4.2 Delta学习规则 三、 结论参考文献 一、感知机简介 M-P神经元模型因其对生物神经元激发过程的极大简化而成为神经网络研究…

qt_c++_xml简单示范demo

迅雷链接 链接&#xff1a;https://pan.xunlei.com/s/VO8bJODxPfPHE0x3nfUa2KZ1A1?pwdtuxq# 复制这段内容后打开手机迅雷App&#xff0c;查看更方便 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QTextCodec>#include <QFile&g…

PGMP-01概述2

目录 1.what is program management? 项目集管理 2.relationships among portfolio,program,and project management and roles in OPM 4.relationships among portfolio,program,and project management 5.组织战略、项目集管理和运营管理之间的关系 6.business vlaue…

sqli-labs靶场less-9和less-10

sqli-labs靶场less-9 本文只展示如何利用dnslog注入通过本关&#xff0c;注入原理可以参考我另外一篇文章 DSNlog注入原理 1、确定闭合方式 http://192.168.140.130/sq/Less-9/?id1 发现id的值不论为任何值&#xff0c;页面回显都是一致的You are in… 判断不存在布尔注入…

初谈构造函数和析构函数

加油学习的一天~~>_<~~ 文章目录 目录 文章目录 前言 一、什么是构造函数&#xff1f; 二、析构函数 &#xff08;1&#xff09;概念&#xff1a; 总结 前言 构造函数是特殊的成员函数&#xff0c;需要注意的是&#xff0c;构造函数虽然名称叫构造&#xff0c;但是构造…

【Flutter】- 核心语法

文章目录 知识回顾前言源码分析1. 有状态组件2. 无状态组件3. 组件生命周期4. 常用组件Container组件Text组件Image组件布局组件row colum stack expandedElevntButton按钮拓展知识总结知识回顾 【Flutter】- 基础语法 前言 Flutter是以组件化的思想构建客户端页面的,类似于…

Linux中的网络指令:ping、netstat、watch、pidof、xargs

目录 Ping指令 netstat指令 watch指令 pidof指令 xargs指令 Ping指令 功能&#xff1a;检测两台主机间的网络连通性 语法&#xff1a;ping [选项] 目标主机的IP地址 &#xff08;192.168.1.1&#xff09;或域名&#xff08;google.com&#xff09; 常见选项&#xff1a…

用户登录与信息管理:实现小程序登录与用户信息存储

用户登录与信息管理&#xff1a;实现小程序登录与用户信息存储 在现代的移动应用中&#xff0c;用户登录与信息管理是构建个性化用户体验的基础。小程序作为轻量级的应用形式&#xff0c;在简化开发流程的同时&#xff0c;也需要我们妥善管理用户的登录状态与用户信息。本文将…

动态规划10:174. 地下城游戏

动态规划解题步骤&#xff1a; 1.确定状态表示&#xff1a;dp[i]是什么 2.确定状态转移方程&#xff1a;dp[i]等于什么 3.初始化&#xff1a;确保状态转移方程不越界 4.确定填表顺序&#xff1a;根据状态转移方程即可确定填表顺序 5.确定返回值 题目链接&#xff1a;174.…

【学习笔记】kruskal重构树

前言 最近一场div2没开出C2&#xff0c;猛掉104分。 赛后补E&#xff0c;发现自己连E1都没思路&#xff0c;一问才知道是kruskal重构树。 好吧&#xff0c;OI时期欠下的债该还了。 kruskal重构树是什么 它是一棵 2 n − 1 2n-1 2n−1 个点的二叉树。点有点权&#xff0c;下…