本帖最后由 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'>
复制代码 之所以要把这个简单的问题专门提出来,是因为在实际使用过程中如果不注意他们的区别,很容易出错。
|