鱼C论坛

 找回密码
 立即注册
查看: 1018|回复: 0

[技术交流] VPython 0 3 | 3D Objects #1: cylinder 圆柱体

[复制链接]
发表于 2023-7-2 16:09:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 歌者文明清理员 于 2023-7-5 00:11 编辑

上一期里的 VPython 基础代码里创建了一个 vpython.box 类的实例。

在 VPython 中,与 box 类类似的还有 sphere、arrow、cylinder 等,它们都是 VPython 的 3D 对象。这些可以在 VPython 官方文档上看见:传送门

通过左侧的 9.png 来查看指定的文档。

本文对应的官方文档:传送门




只需要学会 VPython 圆柱体的属性,就可以学会其他 VPython 3D 对象的属性。其他 VPython 3D 对象的属性可能更多。




以下代码用于实现创建 cylinder 对象并且起名 “rod” 的功能:
from vpython import *
rod = cylinder(pos=vector(0, 2, 1), axis=vector(5, 0, 0), radius=1)
while True:
    rate(100)

为什么要有 while True 循环?你去掉试试

上述代码中,pos 用于指定圆柱体的位置,axis 用于指定圆柱体的轴,radius 用于指定半径。这里的半径是没有单位的,或者说是 “1 个 VPython 长度”

可以通过 rod.pos,rod.axis,rod.radius 来访问或更改 cylinder 对象的属性值。
rod.pos.x = 5
rod.axis.y = 2.5
rod.radius = 0.5

注:VPython 中必须使用 vector。vector 对象有 x、y、z 属性,x 代表 vector 的第一项,y、z 分别是第二、第三项。

注:VPython 允许你 “偷看” VPython 3D对象的内部,也就是说圆柱体的里面还可以再放圆柱体,可以套娃,像这样:

10.png

也可以更改整个 rod.pos,即创建一个新的 vector 并覆盖原来的 vector,而不是修改原来的 vector。
rod.pos = vector(1, 2, 3)

如果你没有给 VPython 3D 对象赋值,那么你就再也找不到它了,没有方法来修改它的属性。或者你赋值了,但是后来这个变量被 “销毁” 了,你也没办法去修改它的属性。




当我们没有为 VPython 3D 对象指定颜色的时候,VPython 会默认使用当前的前景色(请戳 -> 控制画布颜色)。

颜色的属性名为 color,你可以通过 rod.color 来访问或修改它。同样,color 也需要是 vector,r、g、b 分别通过 color.x、color.y、color.z 访问。

注意,color 的值区间应该是 [0, 1]。所以,你可以直接将 [0, 255] 的 rgb 除 255,比如:
rod.color = vector(0, 0, 255) / 255

上面代码会将 rod 的颜色设置为 (0, 0, 255)。

另外,设置 color 的另一种方法是单独使用 rod.red,rod.green,rod.blue,值同样是 [0, 1] 之间。




cylinder 对象的属性列表如下,这些属性也可作用于其他 VPython 3D 对象:

pos 和 axis 的图:


                               
登录/注册后可看大图


radius 的图:

1.png

  • pos:cylinder 的坐标,位于 cylinder 一面(圆形)的中心点。默认为 vector(0, 0, 0)
  • axis:cylinder 的轴,是 cylinder.pos 到 cylinder 另一面的轴点,改动它会同时改动 up 属性,使 up 属性和 axis 永远垂直。默认为 vector(1, 0, 0)
  • up:见 axis。默认为 vector(0, 1, 0)
  • length:cylinder 的长,也可通过 size.x 访问。默认为 1
  • radius:cylinder 的半径。默认为 1
  • size:cylinder 的大小(vector(length, width, height),length = 长,width = 宽,height = 高)。这可以使圆柱体的一面不再是圆形,而是椭圆形。size.x:同 length。
  • color:cylinder 的颜色(vector(red, green, blue))。默认值为 vector(1, 1, 1),即 color.white
  • red, green, blue:同 color
  • opacity:cylinder 的透明度,区间 [0, 1]。默认值为 1,即不透明
  • shininess:cylinder 的亮度,区间 [0, 1],数字越大 cylinder 越亮。默认值为 0.6
  • emissive:cylinder 是否发光,True 为发光,False 为不发光
  • texture:cylinder 的材质,见材质。(在标准 VPython 中没有 “materials” 的说法,“texture” 很接近 “meterials”)
  • canvas:cylinder 所在的画布,见画布

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 09:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表