Rhino(犀牛)中国技术支持与推广中心
标题:
RhinoPython及GHpython中点、向量与表示点和向量的列表、元组
[打印本页]
作者:
Jorin
时间:
2013-12-4 12:27
标题:
RhinoPython及GHpython中点、向量与表示点和向量的列表、元组
本帖最后由 Jorin 于 2013-12-4 12:35 编辑
我们知道,在RhinoPython和GhPhthon中,由三个数字构成的列表和元组,可以表示点,也可以表示向量,如:
a_list=[1,2,3]
b_tuple=(3,2,1)
复制代码
但既然他们都表示点或者向量,那我们为他们添加一个乘数看看。
print a_list*3
print b_tuple*3
复制代码
输出:
[1, 2, 3, 1, 2, 3, 1, 2, 3]
(3, 2, 1, 3, 2, 1, 3, 2, 1)
复制代码
结果不是我们想要的,python只是把这两个变量当作普通的列表和元组,并没有把他们当作是点或者向量来看待。
当然Rhinopython为我们内置了很多的进行点和向量计算的函数,可以供我们把列表和元组直接当成点或向量运算,比如我们可以用rs.VectorScale对向量进行缩放操作。但是我们也可以让python把表示点和向量的列表元组转化为点和向量来处理。
我们用rs.PointAdd和rs.VectorAdd来试试看,PointAdd和VectorAdd函数分别是用来将两个点和两个向量相加的,我们用它们与(0,0,0)相加。
import rhinoscriptsyntax as rs
a_list=[1,2,3]
b_tuple=(3,2,1)
a_pt=rs.PointAdd((0,0,0),a_list)
b_vt=rs.VectorAdd((0,0,0),b_tuple)
print a_list*3
print b_tuple*3
print 'a_pt*3=',a_pt*3
print 'a_pt/2=',a_pt/2
print 'b_vt*3=',b_vt*3
print 'b_vt+b_vt=',b_vt+b_vt
print 'b_vt*b_vt=',b_vt*b_vt
复制代码
复制代码
输出:
[1, 2, 3, 1, 2, 3, 1, 2, 3]
(3, 2, 1, 3, 2, 1, 3, 2, 1)
a_pt*3= 3,6,9
a_pt/2= 0.5,1,1.5
b_vt*3= 9,6,3
b_vt+b_vt= 6,4,2
b_vt*b_vt= 14.0
复制代码
从输出中可以看到,经过PointAdd和VectorAdd函数运算过以后,完全就可以当作点和向量来使用了。
最后用type()检查a_pt和b_vt的类型。
print type(a_list)
print type(b_tuple)
print type (a_pt)
print type (b_vt)
复制代码
输出:
<type 'list'>
<type 'tuple'>
<type 'Point3d'>
<type 'Vector3d'>
复制代码
之所以要把这个简单的问题专门提出来,是因为在实际使用过程中如果不注意他们的区别,很容易出错。
作者:
dsg911
时间:
2013-12-4 12:53
占沙发,学教程!
作者:
完美主义
时间:
2013-12-5 09:37
多谢分享!
欢迎光临 Rhino(犀牛)中国技术支持与推广中心 (http://bbs.rhino3d.asia/)
Powered by Discuz! X3.2