【问题标题】:Determining if a particle is in a box designated by four nodes of a mesh grid确定一个粒子是否在一个由网格的四个节点指定的盒子中
【发布时间】:2021-07-07 19:17:53
【问题描述】:

Python

在我的设置中,我有一个带有关联网格点的网格。我称这个变量为 r_grid。然后我生成了粒子、源点等。我想做的是将粒子沉积到网格的特定部分的四个周围节点上,粒子根据其与节点的距离发现自己所在的网格。请注意,这些源点的生成使得它们中的大多数最终位于中间(高斯分布)。到目前为止,我已经编写了代码来生成网格、源点以及指定构成整个网格一部分的四个网格点的起点。我的想法是我可以遍历每个网格部分,确定源点是否在其中,然后从那里做一些数学运算,将粒子的电荷分布为 r 的函数,它与四个周围的每一个的距离节点。我将在这里发布我的代码:

import numpy as np
import matplotlib.pyplot as plt

#creating grid
index = 3
x = np.linspace(-1, 1, index)
y = np.linspace(-1, 1, index)

x_1, y_1 = np.meshgrid(x, y)

r_grid =  np.vstack((x_1.flatten(), y_1.flatten())).transpose()
r_grid.shape

print(r_grid)

# generating source points
# starting with a small number to start with
S = 1
r_s = np.random.randn(S, 2)/3.0
r_s.shape

# plots the four different nodes for the purposes of visualization
for i in range(len(r_grid)):
j = 0
if (i + 1) == (j + index):
    j = j + 1
    i = i + 1
else:
    plt.plot(x_1, y_1, 'bo')
    plt.plot(r_s[:, 0], r_s[:, 1], 'ro', linestyle='None', marker='.', ms=4)
    plt.plot(r_grid[i, 0], r_grid[i, 1], 'ro')
    plt.plot(r_grid[i + 1, 0], r_grid[i + 1, 1], 'bo')
    plt.plot(r_grid[i + index, 0], r_grid[i + index, 1],  'go')  
    plt.plot(r_grid[i + (index + 1), 0], r_grid[i + (index + 1), 1], 'mo')
    plt.show() 

这是我目前所拥有的!我知道 r_grid 中的点对应于什么,以便以后可以在我按顺序遍历每个部分以确定粒子是否在所述部分和索引 i 中时使用该信息循环。如果我能确定一个点是否在指定的框中,我认为这会给我一个好的开始。我在这里碰壁了,所以我想我会把它贴在这里!那么,问题来了:如何有效地遍历由四个节点表示的每个正方形,然后确定一个粒子(已随机生成)是否在该框中?谢谢!

【问题讨论】:

    标签: python physics particles


    【解决方案1】:

    在你的情况下,如果你想这样做,你需要标记方块然后循环它们(这可能不是那么有效)。有一些库可以让您标记区域,我认为 scipyskimage 以及其他库具有这些功能。

    我不知道这是否可能在您的问题中,但也许它会更有效地获取随机生成的粒子的位置,然后获取它所属的正方形的边缘点。

    这是一个速写

    particle_position = np.random.randn(S, 2)
    
    particle_x_pos = particle_position[0,0]
    particle_y_pos = particle_position[0,1]
    
    
    #first x edge
    
    first_x_edge = int(particle_x_pos)
    
    #second x edge 
    
    second_x_edge = int(particle_x_pos) + 1
    
    #first y edge
    
    first_y_edge = int(particle_y_pos)
    
    #second y edge 
    
    second_y_edge = int(particle_y_pos) + 1
    
    
    #Now you have the edge points of the square where the particle belongs 
    
    square_points = [[first_x_edge,second_x_edge],[first_y_edge,second_y_edge]]
    
    print(particle_position)
    print(square_points)
    

    请注意,此示例仅适用于正值,但可以直接修改为也包含负输入值。

    【讨论】:

      猜你喜欢
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-17
      • 1970-01-01
      相关资源
      最近更新 更多