将2D图形拉伸为3D图形的3个例子

部署运行你感兴趣的模型镜像

  十字架2D图形可以看作由两个完全相同的长方形组成,其属性width是长方形长边的长度,默认值为1,属性thickness不是创建空心框架,而是长方形短边的长度,默认值为0.2。如用十字架2D图形作为拉伸路径,即path=paths.cross(),其thickness属性大于等于1时,其结果无法预测。为验证属性width和thickness的值,执行如下程序。

>>> from vpython import *
>>> print(shapes.cross(width=4, thickness=2))
[[2.0, -1.0], [2.0, 1.0], [1.0, 1.0], [1.0, 2.0], [-1.0, 2.0], [-1.0, 1.0], [-2.0, 1.0], 
[-2.0, -1.0], [-1.0, -1.0], [-1.0, -2.0], [1.0, -2.0], [1.0, -1.0], [2.0, -1.0]]

  在2D坐标上画出各点,连接各点将看到一个十字架2D图形,可以看出其属性width=4, thickness=2。
  例1,将2D图形圆,用2D十字架外轮廓线作为拉伸路径,创建用圆管组成的3D十字架图形。请注意,2D图形圆,在xy平面,作为拉伸路径的十字架外轮廓线,在xz平面,可以用语句:print(paths.cross(width=4, thickness=0.99))显示拉伸路径的3D坐标,将看到显示的y坐标值都为0,说明该拉伸路径在xz平面。拉伸过程是:xy平面的圆,将xz平面的十字架外轮廓线作为拉伸路径,沿该拉伸路径,生成用圆管组成的3D十字架。为了能完整地看到生成的用圆管组成的3D十字架,3D十字架必须旋转90度,其旋转轴必须和坐标系x轴平行,并且穿过3D十字架自己中心点。旋转函数rotate()参数的意义,请参见本人的博文:“VPython程序设计入门”。

from vpython import *
c=extrusion(path=paths.cross(width=4, thickness=0.99),			#拉伸路径是十字架
  shape=shapes.circle(radius=0.2), color=color.green)			#被拉伸图形是圆
c.rotate(angle=radians(90), axis=vec(1,0,0))					#3D十字架旋转90度

  运行效果
在这里插入图片描述
  例2,类似例1,但是被拉伸的2D图形是六边形(hexagon),其属性length是一条边的长度。拉伸路径是矩形,矩形的长度=5,宽度=2。程序如下。

from vpython import *
h=extrusion(path=paths.rectangle(width=5, height=2), 
            shape=shapes.hexagon(length=0.3), color=color.red)
h.rotate(angle=radians(71), axis=vec(1,0,0))

  运行效果
在这里插入图片描述
  下例中用到5个2D图形,其中弧(arc)作为拉伸路径,三角形和五角星作为拉伸对象,圆和梯形用来定义孔洞形状。弧是圆的一部分,其属性radius是该弧所在圆的半径,默认为2;弧起点和圆心连线,该连线和x轴之间角度是属性angle1(起始角度),默认为0;弧终点和圆心连线,该连线和x轴之间的角度是属性angle2(结束角度),默认为pi/2(90度)。等边三角形(triangle)边长为2,将沿弧指定的拉伸路径,被拉伸为3D图形,有两个孔洞,孔洞的形状由2D图形圆(circle)和梯形(trapezoid)确定,参见我的博文:将2D图形圆拉伸为有三角形和梯形孔洞的圆柱。五角星也将沿弧指定的拉伸路径,被拉伸为3D图形,五角星除了参数pos,其余参数都为默认值。可以看出,两个2D图形,可以使用同一个拉伸路径。start_face_color是拉伸开始面的颜色,end_face_color是拉伸结束面的颜色。
  五角星有5个外角都小于90度,两个外角之间有一个内角,大于90度,共有5个内角。五角星常用属性有3个,默认n=5是5角星,如n=6是6角星;radius是5角星的外接圆的半径,默认为1;过5个内角顶点做圆,该圆半径为属性iradius,默认值为0.5*radius。
  例3,2D图形三角形和五角星,沿弧指定的拉伸路径,请注意,该路径在xz平面,拉伸出两个3D图形。这两个3D图形,将成为一个独立的组合3D图形,有共用的属性,例如,属性size和pos,修改这两个属性,将同时修改用2D三角形和五角星拉伸的3D图形。程序如下。

from vpython import *
a=extrusion(path=paths.arc(radius=1.7,angle2=pi),texture=textures.metal, 
    shape=[[shapes.triangle(length=2),shapes.circle(pos=[0,0.5],radius=0.2),
    shapes.trapezoid(pos=[0,-0.2],width=0.6, height=0.4)],[shapes.star(pos=[0,2.5])]],
    start_face_color=vec(1,0,0),end_face_color=vec(0,0,1))
a.size=vec(10,10,10)
a.pos=vec(0,-1.5,0)
a.rotate(angle=radians(30), axis=vec(0,1,0))

  运行效果
在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值