首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用vpython库描述球形物体上的小电荷?

如何使用vpython库描述球形物体上的小电荷?
EN

Stack Overflow用户
提问于 2022-11-07 23:45:15
回答 1查看 39关注 0票数 2

我正在做一个与球上电荷分配有关的项目,我决定用vpython和Coulomb定律来模拟这个问题。当我创建一个球体时,我遇到了一个问题,因为我试图在球体上平均放置1000个点(电荷),但我似乎无法成功,我尝试了几种方法,但似乎无法使点在球体上。

我定义了一个任意值SOYDNR作为一个数字,将球的直径分成较小的段。这将允许我创建一个较小的电荷环,并用电荷填充spahre的表面。然后,我用4个值组成一个列表,表示半径的不同部分,在表面上创建电荷环。然后我遇到了一个问题,我不知道如何处理它。我试着在这些特定的高度计算半径,但是我无法实现。这是它的外观:.(https://i.stack.imgur.com/3N4x6.png) ),如果有人有任何建议,我会很好,谢谢!

代码语言:javascript
运行
复制
 SOYDNR = 10 #can be changed
  SOYD = 2*radi/SOYDNR # strips of Y direction; initial height + SOYD until = 2*radi
  theta = 0
  dtheta1 = 2*pi/NCOS
  y_list = np.arange(height - radi + SOYD, height, SOYD).tolist()
  print(y_list)
  for i in y_list:
   while Nr<NCOS and theta<2*pi:
    position = radi*vector(cos(theta),i*height/radi,sin(theta))
    points_on_sphere = points_on_sphere + [sphere(pos=position, radius=radi/50, color=vector(1, 0, 0))]
    Nr = Nr + 1
    theta = theta + dtheta1
   Nr = 0
   theta = 0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-09 14:32:45

我找到了一个很好的方法,它在这个区域创建了一堆球体,这是一个if语句描述的,这是我用来模拟的代码,用来创建带有点的球体。

代码语言:javascript
运行
复制
def SOSE (radi, number_of_charges, height):
  Charged_Sphere = sphere(pos=vector(0,height,0), radius=radi, color=vector(3.5, 3.5, 3.5), opacity=(0.2))
  points_on_sphere = []
  NCOS = number_of_charges
  theta = 0
  dtheta = 2*pi/NCOS
  dr = radi/60
  direcVector = vector(0, height, 0)
  while theta<2*pi:
    posvec1 = radi*vector(1-radi*random(),1-radi*random()/radi,1-radi*random())
    posvec2 = radi*vector(1-radi*random(),-1+radi*random()/radi,1-radi*random())
    if mag(posvec1)<radi and mag(posvec1)>(radi-dr):
        posvec1 = posvec1+direcVector
        points_on_sphere=points_on_sphere+[sphere(pos=posvec1,radius=radi/60,color=vector(1, 0, 0))] 
        theta=theta + dtheta
    if mag(posvec2)<radi and mag(posvec2)>(radi-dr):
        posvec2 = posvec2+direcVector
        points_on_sphere=points_on_sphere+[sphere(pos=posvec2,radius=radi/60,color=vector(1, 0, 0))]
        theta=theta + dtheta

这段代码可以被编辑以添加更多的点,我有两个if语句,因为我想改变球体的高度,如果我只有一条语句,我只看到了球体的一半。:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74354233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档