···Google Translation···

控制一个或多个 VPython 画布
最初,有一个名为场景的 3D VPython 画布。 除非使用显示对象,否则它们不会在屏幕上创建窗口,因此如果您在程序早期立即创建自己的画布,则无需担心场景。 如果您只是开始创建诸如球体之类的对象,它们将进入场景。

canvas() 创建具有指定属性的画布,使其成为选定的画布,并返回它。 例如,下面创建另一个 VPython 画布 600 x 200,在画布上方的标题中带有“Examples of Tetrahedrons”,画布的中心为矢量(5,0,0),背景颜色为青色填充 窗户。

scene2 = canvas(title='Examples of Tetrahedrons',width=600, height=200,center=vector(5,0,0), background=color.cyan)

选择画布:默认情况下,您创建的任何对象都会进入最近创建的画布,例如场景。 如果您创建另一个画布 cvs,新对象将进入 cvs 画布。 您可以稍后执行 scene.select() 以使场景画布成为新对象进入的画布。 您可以找出选择了哪个画布: current = canvas.get_selected() 返回对当前正在创建对象的画布的引用。 您还可以在创建对象时指定使用哪个画布,如 box(canvas=cvs, .....)。

在 Web VPython 中,你可以说 canvas.selected = cvs,或 current = canvas.selected,但不幸的是,在 VPython 7 中似乎无法实现这种语法,因此为了 Web VPython 和 VPython 7 之间的兼容性,你可能希望使用 cvs Web VPython 程序中的 .select() 和 canvas.get_selected()。

下面是一个总结,它决定了一个对象(如盒子或球体)将放置在几个可能的 3D 画布中的哪一个中:

scene = canvas() # automatic; you don't need to say this 自动;你不用写这个
box(...)         # will appear in the canvas named "scene"# 将出现在名为“scene”的画布中
sphere(canvas=scene, ...) # will also appear in "scene"# 也会出现在“场景”中c2 = canvas(width=200, height=100, title='A second canvas')
box(...)         # will appear in the canvas named "c2"# 将出现在名为“c2”的画布中
sphere(canvas=c2, ...)  # will also appear in "c2"# 也会出现在“c2”中
cone(canvas=scene, ...) # will appear in "scene"# 将出现在“scene”中

关键是创建画布后,默认情况下 3D 对象将放置在最近创建的画布中,除非您为对象明确指定不同的画布。

通用选项

width, height 画布区域的宽度和高度,以像素为单位。默认值为 640 和 400。可以在创建画布时指定,如上例所示,或者稍后设置或更改。

align 设置为“left”(画布强制到窗口左侧)、“right”(画布强制到窗口右侧)或“none”(默认对齐方式)。如果您只有一个画布,将对齐设置为“左”会导致画布标题显示在画布的右侧。如果要将图形放置在画布的右侧,请将画布对齐属性设置为字符串“left”,将图形对齐属性设置为字符串“right”。如果窗口太窄,右侧的对象将显示在另一个对象的下方。如果要将图形放置在画布的右侧但将画布标题保留在画布下方,请首先创建图形并将对齐设置为“右”并通过在其中绘制某些内容来激活图形,然后创建画布而不指定其对齐的值。另一种选择是为所有画布和图形指定 align='left',在这种情况下,它们将相互邻接。

resizable 如果为 True(默认),用户可以调整画布的大小。如果 C 是可调整大小的画布,则 C.bind('resize', R) 将在用户调整该画布大小时执行函数 R。如果 R 的形式为 def R(ev):,则 ev.event 将是“resize”,而 ev.canvas 将是画布 C。

背景设置用于填充画布的颜色;默认为黑色。

非定向(“环境”)照明的环境颜色。 默认值为 color.gray(0.2)。

light 为此画布创建的灯光对象列表。 默认情况下,scene.lights 是这个列表:
    [distant_light(direction=vec(0.22, 0.44, 0.88), color=color.gray(0.8)),

distant_light(direction=vec(-0.88, -0.22, -0.44), color=color.gray(0.3))]

这些等效于为您自动创建的默认灯光。 有关如何创建自己的远处和局部灯光,请参阅照明。 只有在创建画布后才能更改灯光。 您可以通过设置 scene.lights = [] 来消除灯光,一个空列表,然后创建您自己的灯光。 要更改两个默认灯光中第一个的颜色,请执行以下操作,其中 0 表示两个灯光中的第一个:

scene.lights[0].color = color.red

objects 画布中所有可见对象的列表; 不可见的物体和灯光未列出(scene.lights 是现有灯光的列表)。 例如,以下将场景中的所有可见框变为红色:

for obj in scene2.objects:if isinstance(obj, box):obj.color = color.red

visible 设置scene.visible = False 表示不显示任何对象,直到scene.visible 再次设置为True。

delete() 删除此画布中的所有对象,然后删除画布本身

capture(filename) 将画布的 png 屏幕截图发送到您的下载文件夹。如果文件名是字符串“boxes”或“boxes.png”,文件将被命名为“boxes.png”。如果重复执行scene.capture("boxes"),附加文件将命名为“boxes(1).png”、“boxes(2).png”等。如果您不想捕获“标签”对象, 执行scene.capture(filename, False)

获取摄像机当前位置,scene.camera.pos详情见下文。

camera.follow 如果你说scene.camera.follow(ball),场景的中心会不断的重置到球对象的当前位置。要停止跟踪对象,请执行 scene.camera.follow(None)。

您可以提供自己的函数(在 VPython 7 中尚不可用),而不是指定要遵循的对象:

def f():return 2*ball.pos
scene.camera.follow(f)

以下是等待画布更新的画布选项:

scene.waitfor("redraw") 等待网络浏览器开始下一次更新画布

scene.waitfor("draw_complete") 等待网络浏览器下一次更新画布结束

显示文本

您可以使用标签对象在画布上显示文本。 创建画布时,您还可以在画布上方放置标题和/或在下方放置标题:

canvas(title='Some title', caption='A caption')

创建画布后,您可以使用 scene.title = "Hello" 更改标题或使用 scene.caption = "Hello" 更改标题:

scene.caption = "Hello"
sleep(3) # wait for 3 seconds
scene.caption = "Goodbye"

您可以在文本中放置行尾标记 ("\n") 以进行多行显示,或者使用 Python 三引号形式来创建段落:

scene.caption = '''这是一个
多行段落
换行符。'''

HTML:您可以包含以下 html 指令:<b>这是粗体。</b>

您可以将更多文本附加到标题或标题(您也可以最初使用此表单,因为标题和标题以零长度字符串开始):

scene.append_to_title("Now <b>click the box</b>.")
scene.append_to_caption("See the <i>effect?</i>")

在这些附加操作中,您还可以使用这样的形式,其中 V 是一些变量(有关详细信息,请参阅文本输出):

( "There are {:.1f} {}.".format(V, 'liters) )
( "There are", V, "liters" )

wtext 对象允许您将动态可修改的文本放置在画布标题或标题的中间。

scene.wrapper 是包含画布及其叠加层的网页组件(叠加层是 2D 画布,其上显示标签对象和由 scene.pause() 生成的提示)。例如,scene.align = 'left' 等价于scene.wrapper.css('float', 'left') 将canvas+overlay强制到网页的左侧。同样,如果你有一个名为 g 的图,scene.align = 'right' 等价于 g.wrapper.css('float', 'right')。

同样,scene.canvas 指的是 3D 画布,scene.elements 指的是 3D 画布和 2D 叠加层。

使用 jQuery

如果您使用 jQuery 来显示小部件(按钮、滑块、菜单),请参阅此文档以了解如何引用页面的标题、标题和打印区域。

控制视图

下图显示了下面讨论的影响场景如何呈现给观众的数量之间的关系:

中心 相机持续观察的位置,即使用户旋转相机的位置。如果您更改中心,相机会移动以继续朝着新中心的相同方向看,除非您也向前更改(请参阅下一个属性)。默认向量(0,0,0)。

forward 矢量指向与相机看起来相同的方向(即从当前相机位置,由 scene.camera.pos 给出,朝向 scene.center)。当通过程序或用户使用鼠标旋转相机位置更改前进时,相机位置会更改以继续查看中心。默认向量(0,0,-1)。它的大小并不显着。

fov 以弧度表示的摄像机视野。这被定义为水平和垂直视野的最大值。您可以将其视为大小范围内的对象的角度大小,也可以将其视为用户看到的窗口长轴的角度大小。默认 pi/3.0 弧度(60 度)。

range 感兴趣区域在中心左侧或右侧的范围。将 range 设置为 10 意味着 scene.center.x+scene.range 将位于方形窗口的右边缘。半径为 10 的球体将填充窗口。半宽为 10 的立方体盒子会溢出窗口,因为在 3D 中盒子的前面看起来比通过 scene.center 的 xy 平面要大,除非视野非常小。

up 表示世界空间向上的向量。该矢量将始终投影到屏幕上的一条垂直线上(将相机视为具有保持屏幕顶部朝上的“铅锤”)。当用户“水平”旋转时,相机也会围绕这个轴旋转。默认情况下,y 轴是向上向量。

向上和向前(相机指向的方向)之间存在相互作用。默认情况下,相机指向 -z 方向矢量(0,0,-1)。在这种情况下,您可以将 x 或 y 轴(或介于两者之间的任何轴)设为向上向量,但不能将 z 轴设为向上向量,因为这是设置 up 属性时相机旋转的轴.如果您希望 z 轴指向上方,请先向前设置到 -z 轴以外的其他位置,例如 vector(1,0,0)。

autoscale = False 不自动缩放(明确设置范围); autoscale = 真正的自动缩放(默认)。让 VPython 使用自动缩放创建初始画布通常很有用,然后关闭自动缩放以防止进一步的自动更改。

userzoom = False 用户不能放大和缩小场景

userzoom = 真正的用户可以缩放(默认)

userspin = False 用户无法旋转场景

userspin = True 用户可以旋转(默认)

userpan = False 用户无法平移场景

userpan = 真正的用户可以平移(默认)

使用 scene.camera 控制视图

上述用于控制视图的机制旨在确保无论用户如何旋转或缩放视图,对象都是可见的,因为相机方向总是自动调整为指向 scene.center,默认情况下为在原点,scene.range 会自动调整以对应用户缩放。

但是,如果您想“飞”过场景,scene.center 必然变化但缩放保持不变,直接移动和指向相机会更方便。警告:当您直接控制摄像头时,由于无意中将摄像头指向远离物体或将摄像头远离物体移动,会增加什么都看不见的风险。

直接控制相机的一个例子是Stonehenge程序中的fly-through,其中改变scene.camera.pos(相机的位置)和scene.camera.axis(相机指向的方向)是一种方便的方法在场景中移动。使用这些语句意味着您正在控制视图,因此关闭了自动缩放(scene.autoscale 设置为 False)。

scene.camera.pos 摄像机的当前位置,无论是由于您自己的设置、自动缩放还是用户定位,都是 scene.camera.pos。例如,mag(scene.center - scene.camera.pos) 是摄像机当前位置到场景中心的距离。矢量 scene.camera.pos 和 scene.mouse.ray 一起定义了鼠标光标下的所有 3D 点。

您可以通过执行 scene.camera.pos = vector(x,y,z) 将相机放置在您想要的位置。当您以这种方式设置相机位置时,scene.center 将重置为位置 scene.camera.pos + scene.camera.axis。效果是相机继续指向与以前相同的方向,但来自一个新位置。

scene.camera.axis 相机当前指向的方向,无论是由于您自己的设置、自动缩放还是用户定位,都是scene.camera.axis,它等于scene.center - scene.camera.pos ;它从相机指向scene.center。

更改scene.camera.axis时,scene.camera.pos不受影响,但scene.center重置为位置scene.camera.pos+scene.camera.axis,scene.forward重置为norm(scene.camera 。轴)。

scene.up 更改 scene.up 会围绕 z 轴旋转显示,例如,如果您想象相机连接到一架飞机,该飞机围绕其自己的轴在转弯或桶形滚动中旋转。

scene.camera.rotate(angle=..., axis=..., origin=...) 与其他 VPython 对象一样,您可以围绕指定的轴(默认为scene.camera.axis),相对于指定的原点(默认情况下是 scene.camera.pos)。

原文https://blog.csdn.net/html_finder/article/details/124595926?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22124595926%22%2C%22source%22%3A%22html_finder%22%7D&ctrtid=GfTHZ

vPython窗口-原文完整翻译相关推荐

  1. Bootstrap Table API 中文版(完整翻译文档)

    /* * *$('#table').bootstrapTable({}); *看网上有中文版的,但有些就是字面直接译过来了,而且有的就没有翻译,那就打算自己再翻译一遍,每一条会尽 *最大可能结合尽可能 ...

  2. 【工具-NMAP】主机渗透神器:NMAP (功能介绍,安装,使用,参数完整翻译)-转载

    1 nmap 介绍 Nmap  (网络映射器)是由 Gordon Lyon设计,用来探测计算机网络上的主机和服务的一种 安全扫描器.为了绘制网络拓扑图,Nmap的发送特制的数据包到目标主机,然后对返回 ...

  3. 【Spring Boot官方文档原文理解翻译-持续更新中】

    [Spring Boot官方文档原文理解翻译-持续更新中] 文章目录 [Spring Boot官方文档原文理解翻译-持续更新中] Chapter 4. Getting Started 4.1. Int ...

  4. 解决几乎任何机器学习问题(完整翻译)

    解决几乎任何机器学习问题(完整翻译) 英文原文:Approaching (Almost) Any Machine Learning Problem Kaggle团队| 07.21.2016 Kaggl ...

  5. Bootstrap Table API 中文版(完整翻译文档)~!

    /* * *$('#table').bootstrapTable({}); *看网上有中文版的,但有些就是字面直接译过来了,而且有的就没有翻译,那就打算自己再翻译一遍,每一条会尽 *最大可能结合尽可能 ...

  6. 绵阳python培训_《绵》原文及翻译海绵翻译

    <绵>原文及翻译海绵翻译 查字典语文网小编给各位考 生筛选整理了 : 诗经中<绵>原文,<绵>原文翻译,诗经的来源, 希望对大家有所帮助,更多的资讯请持续关注查字典 ...

  7. 怪哉翻译软件测试,[东方朔传翻译]东方朔传·怪哉原文与翻译

    东方朔传·怪哉原文与翻译 原文: <太平广记>卷四七三引<东方朔传> 汉武帝幸⑦甘泉,驰道中有虫,赤色,头牙齿耳鼻尽具,观者莫识①.帝乃使东方朔视之,还对②曰:"此虫 ...

  8. 如何将英文文献完整翻译?公式都可以快速完整插入,比淘宝上的机翻要强一百倍!

    在毕设或者研究生时,我们常常需要将一篇英文文献完整翻译,当然我们可以自己翻译,但是如果时间不够同时发现有很多的的公式以及特殊的字符,可以参考以下步骤,尤其是公式是可以快速插入的哈. 在知网或者IEEE ...

  9. 2021年 美国大学生数学建模竞赛 赛题发布!【英文原文 中文翻译】

    原文链接[微信公众号:校苑数模   ]:2021年美国大学生数学建模竞赛赛题发布! 原文链接[微信公众号:校苑服务号]:[中文翻译]2021年美国大学生数学建模竞赛赛题! [2021美赛赛题(英文原文 ...

最新文章

  1. spring boot2 修改默认json解析器Jackson为fastjson
  2. 数据结构 i_love(我喜欢)
  3. 500分求助,delphi里用standred来配置dbf文件
  4. 使用networkx来生成网络科学里面三种常见的网络
  5. 写在弥勒宝贝两周年之际
  6. 雷军变身IPO收割机:坐拥4家上市公司,今年至少收获8个IPO!
  7. python编程例子-Python面向对象编程 - 类和实例
  8. redis新数据类型-Geospatial
  9. 视频编码中的PAFF和MBAFF的区别 转自:http://blog.csdn.net/kerryhung/article/details/4433256
  10. github创建代码仓库并上传代码
  11. Android手动创建活动并注册AndroidManifest.xml
  12. android前台服务也被杀,android如何让后台服务service不被杀死(设置前台服务)
  13. 小码哥java一期 百度云_小码哥IOS 十一期
  14. RFID技术对危化品实行安全化
  15. 尼尔机器人技能快捷键_尼尔机械纪元出招表及招式使用技巧 尼尔机械纪元技能怎么用...
  16. PCL 点云的旋转与平移
  17. 10/9 看的何向南老师团队关于bias和debias最新综述;还可以吧
  18. 物联网环境下的隐私保,需要从哪几方面考虑
  19. FPGA(三)触发器与锁存器
  20. Linux设备树是什么?

热门文章

  1. 『NLP经典项目集』06: 使用预训练模型ERNIE-GEN自动写诗
  2. 国内手机厂商:挑骡子不干了,买都不买,还能愉快地玩耍吗?
  3. python算法工程师的一天_算法工程师的一天!说的是你
  4. 小故事:如果你真的能保持一份真爱
  5. vue+element-ui 自定义行事历,周日历.支持滑动.
  6. echarts使用总结(使用echarts画工字型标记线;无数据时设置纵坐标刻度0-1;tooltip数据展示;工具栏 toolBox 图标配置)
  7. Matlab如何绘制带箭头图形
  8. OpenCV 4.2.0 + opencv_contrib安装 (ubuntu16.04)
  9. 给你的UIView添加个炫彩边框
  10. 大数据Hive学习案例(1)——基于搜狗sogou_500w的日志数据分析