|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 歌者文明清理员 于 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 的值区间应该是 [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 的图:
- 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 所在的画布,见画布。
|
|