VPython 0 3 | 3D Objects #1: cylinder 圆柱体
本帖最后由 歌者文明清理员 于 2023-7-5 00:11 编辑上一期里的 VPython 基础代码里创建了一个 vpython.box 类的实例。
在 VPython 中,与 box 类类似的还有 sphere、arrow、cylinder 等,它们都是 VPython 的 3D 对象。这些可以在 VPython 官方文档上看见:传送门
通过左侧的来查看指定的文档。
本文对应的官方文档:传送门
只需要学会 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对象的内部,也就是说圆柱体的里面还可以再放圆柱体,可以套娃,像这样:
也可以更改整个 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 的值区间应该是 。所以,你可以直接将 的 rgb 除 255,比如:
rod.color = vector(0, 0, 255) / 255
上面代码会将 rod 的颜色设置为 (0, 0, 255)。
另外,设置 color 的另一种方法是单独使用 rod.red,rod.green,rod.blue,值同样是 之间。
cylinder 对象的属性列表如下,这些属性也可作用于其他 VPython 3D 对象:
pos 和 axis 的图:
https://www.glowscript.org/docs/VPythonDocs/VisualRef-1.gif
radius 的图:
[*]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 的透明度,区间 。默认值为 1,即不透明
[*]shininess:cylinder 的亮度,区间 ,数字越大 cylinder 越亮。默认值为 0.6
[*]emissive:cylinder 是否发光,True 为发光,False 为不发光
[*]texture:cylinder 的材质,见材质。(在标准 VPython 中没有 “materials” 的说法,“texture” 很接近 “meterials”)
[*]canvas:cylinder 所在的画布,见画布。
页:
[1]