分享 --- 多个物体运动追随。

[复制链接]
跳转到指定楼层
20925 猫熊 发表于 2016-3-14 15:15:22 楼主
  1. """
  2. 制作人:盖房子的猫熊
  3. 模拟运动。
  4. """
  5. import rhinoscriptsyntax as rs
  6. import random as r
  7. import math
  8. from  scriptcontext import sticky as st


  9. class Mover(object):
  10.     """定义一个Mover类,并初始化,
  11.        定义位置以及运动方向。
  12.     """
  13.     def __init__(self):
  14.         self.pos=[0,0,0]
  15.         self.vec=[0,0,0]
  16.         self.acc=[0,0,0]
  17.         self.c=[]
  18.     #更新物体的运动状态
  19.     def update(self):
  20.         self.vec=rs.VectorAdd(self.vec,self.acc)
  21.         self.pos=rs.VectorAdd(self.pos,self.vec)
  22.         self.c.append(self.pos)
  23.         
  24.     #定义一个恒定力
  25.     def force(self,force,mass):
  26.         scale=1/mass
  27.         self.acc=rs.VectorScale(force,scale)
  28.     #定义一个变化力
  29.     def wind(self):
  30.         a=r.randint(-5,5)
  31.         b=r.randint(-5,5)
  32.         c=r.randint(-5,5)
  33.         vec=rs.VectorCreate([0,0,0],[a/4,b/4,c/4])
  34.         self.vec=rs.VectorAdd(self.vec,vec)
  35.     def limited(self,vectorlength):
  36.         if rs.VectorLength(self.vec)>10:
  37.             self.vec=rs.VectorUnitize(self.vec)
  38.             self.vec=rs.VectorScale(self.vec,10)
  39.             self.acc=[0,0,0]
  40.     def display(self):
  41.         self.wind()
  42.         self.force(force,10)
  43.         self.limited(20)
  44.         self.update()
  45. class OtMover(Mover):
  46.     """
  47.     定义一个追随的类。
  48.     """
  49.     def __init__(self):
  50.         self.pos=[0,0,0]
  51.         self.vec=[0,0,0]
  52.         self.acc=[0,0,0]
  53.         self.c=[]
  54.         self.sacle=0
  55.     #吸引力
  56.     def attraction(self,sca,otpos):
  57.         distance=rs.Distance(self.pos,otpos)
  58.         self.sacle+=0.01
  59.         sacle=(math.sin(self.sacle)+1)*sca
  60.         vector=(rs.VectorCreate(otpos,self.pos))*sca
  61.         self.vec=rs.VectorAdd(self.vec,vector)
  62.         
  63.   
  64. class MiMover(Mover):
  65.     """
  66.      定义一个运动的类,在一定范围内运动
  67.     """
  68.     def __init__(self):
  69.         self.pos=[0,0,0]
  70.         self.vec=[0,0,0]
  71.         self.acc=[0,0,0]
  72.         self.c=[]
  73.     def checkEdges(self):
  74.         if self.pos[0]<0 or self.pos[0]>100:
  75.             self.vec[0]*=-1
  76.         if self.pos[1]<0 or self.pos[1]>100:
  77.             self.vec[1]*=-1
  78.         if self.pos[2]<0 or self.pos[2]>100:
  79.             self.vec[2]*=-1
  80.     def display(self):
  81.         self.wind()
  82.         self.force(force,10)
  83.         self.limited(20)
  84.         self.checkEdges()
  85.         self.update()
  86. c=[]
  87. d=[]

  88. if "move" not in st:
  89.     st["move"]=MiMover()
  90.     r.seed(seed)
  91. if Toogle:
  92.     st["move"].display()
  93.     point=st["move"].pos
  94.     vector=st["move"].vec
  95. else:
  96.     del st["move"]



  97. for item in range(number):
  98.     name='otmove%d'%item
  99.    
  100.     if name not in st:
  101.         st[name]=OtMover()
  102.         r.seed(seed)
  103.     if Toogle:
  104.         st[name].attraction(sca,st["move"].pos)
  105.         st[name].display()
  106.         a=st[name].pos
  107.         b=st[name].vec
  108.         c.append(a)
  109.         d.append(b)
  110.     else:
  111.         del st[name]
复制代码

QQ截图20160314151411.png (179.64 KB, 下载次数: 36)

QQ截图20160314151411.png

QQ截图20160314151342.png (161.91 KB, 下载次数: 30)

QQ截图20160314151342.png

评分

参与人数 2技术 +2 坛币 +6 收起 理由
筑梦NARUTO + 1 + 2 真是不错。学习了
Jorin + 1 + 4 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
关于大陆地区Rhino原厂培训中心
 楼主| 猫熊 发表于 2016-3-14 15:16:47
2
写的比较乱,没有好好整理。见谅着看吧。。

运动的物体.rar

16.11 KB, 下载次数: 93

wjjsoft 发表于 2016-3-15 08:48:21
3
不错  是学习PY的好资料
 楼主| 猫熊 发表于 2016-3-15 11:39:57
4
自己有改动了一下,感觉更好了。哈哈

QQ截图20160315112737.png (168.49 KB, 下载次数: 32)

QQ截图20160315112737.png

QQ截图20160315112617.png (146.1 KB, 下载次数: 37)

QQ截图20160315112617.png

QQ截图20160315112605.png (144.38 KB, 下载次数: 37)

QQ截图20160315112605.png

运动的物体3.15.rar

16.38 KB, 下载次数: 94

 楼主| 猫熊 发表于 2016-3-15 22:34:18
6

还需努力,大神光顾了。
您需要登录后才可以回帖 登录 | 注册成为会员

本版积分规则