Python --- RhinoPython及GHpython中点、向量与表示点和向量的列表、元组

[复制链接]
跳转到指定楼层
30042 Jorin 发表于 2013-12-4 12:27:30 楼主
本帖最后由 Jorin 于 2013-12-4 12:35 编辑

我们知道,在RhinoPython和GhPhthon中,由三个数字构成的列表和元组,可以表示点,也可以表示向量,如:
  1. a_list=[1,2,3]
  2. b_tuple=(3,2,1)
复制代码
但既然他们都表示点或者向量,那我们为他们添加一个乘数看看。
  1. print a_list*3
  2. print b_tuple*3
复制代码
输出:
  1. [1, 2, 3, 1, 2, 3, 1, 2, 3]
  2. (3, 2, 1, 3, 2, 1, 3, 2, 1)
复制代码
结果不是我们想要的,python只是把这两个变量当作普通的列表和元组,并没有把他们当作是点或者向量来看待。
当然Rhinopython为我们内置了很多的进行点和向量计算的函数,可以供我们把列表和元组直接当成点或向量运算,比如我们可以用rs.VectorScale对向量进行缩放操作。但是我们也可以让python把表示点和向量的列表元组转化为点和向量来处理。
我们用rs.PointAdd和rs.VectorAdd来试试看,PointAdd和VectorAdd函数分别是用来将两个点和两个向量相加的,我们用它们与(0,0,0)相加。
  1. import rhinoscriptsyntax as rs
  2. a_list=[1,2,3]
  3. b_tuple=(3,2,1)
  4. a_pt=rs.PointAdd((0,0,0),a_list)
  5. b_vt=rs.VectorAdd((0,0,0),b_tuple)
  6. print a_list*3
  7. print b_tuple*3
  8. print 'a_pt*3=',a_pt*3
  9. print 'a_pt/2=',a_pt/2
  10. print 'b_vt*3=',b_vt*3
  11. print 'b_vt+b_vt=',b_vt+b_vt
  12. print 'b_vt*b_vt=',b_vt*b_vt
复制代码

复制代码
输出:
  1. [1, 2, 3, 1, 2, 3, 1, 2, 3]
  2. (3, 2, 1, 3, 2, 1, 3, 2, 1)
  3. a_pt*3= 3,6,9
  4. a_pt/2= 0.5,1,1.5
  5. b_vt*3= 9,6,3
  6. b_vt+b_vt= 6,4,2
  7. b_vt*b_vt= 14.0
复制代码
从输出中可以看到,经过PointAdd和VectorAdd函数运算过以后,完全就可以当作点和向量来使用了。
最后用type()检查a_pt和b_vt的类型。
  1. print type(a_list)
  2. print type(b_tuple)
  3. print type (a_pt)
  4. print type (b_vt)
复制代码
输出:
  1. <type 'list'>
  2. <type 'tuple'>
  3. <type 'Point3d'>
  4. <type 'Vector3d'>
复制代码
之所以要把这个简单的问题专门提出来,是因为在实际使用过程中如果不注意他们的区别,很容易出错。

评分

参与人数 1技术 +2 坛币 +2 收起 理由
深蓝Ansen + 2 + 2 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享分享
关于大陆地区Rhino原厂培训中心
完美主义 发表于 2013-12-5 09:37:23
3
多谢分享!
dsg911 发表于 2013-12-4 12:53:29
2
占沙发,学教程!
您需要登录后才可以回帖 登录 | 注册成为会员

本版积分规则