- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
import pygame
import random
import numpy as np
import matplotlib.pyplot as plt
import math
number_of_particles = 70
my_particles = []
background_colour = (255,255,255)
width, height = 500, 500
sigma = 1
e = 1
dt = 0.1
v = 0
a = 0
r = 1
def r(p1,p2):
dx = p1.x - p2.x
dy = p1.y - p2.y
angle = 0.5 * math.pi - math.atan2(dy, dx)
dist = np.hypot(dx, dy)
return dist
def collide(p1, p2):
dx = p1.x - p2.x
dy = p1.y - p2.y
dist = np.hypot(dx, dy)
if dist < (p1.size + p2.size):
tangent = math.atan2(dy, dx)
angle = 0.5 * np.pi + tangent
angle1 = 2*tangent - p1.angle
angle2 = 2*tangent - p2.angle
speed1 = p2.speed
speed2 = p1.speed
(p1.angle, p1.speed) = (angle1, speed1)
(p2.angle, p2.speed) = (angle2, speed2)
overlap = 0.5*(p1.size + p2.size - dist+1)
p1.x += np.sin(angle) * overlap
p1.y -= np.cos(angle) * overlap
p2.x -= np.sin(angle) * overlap
p2.y += np.cos(angle) * overlap
def LJ(r):
return -24*e*((2/r*(sigma/r)**12)-1/r*(sigma/r)**6)
def verlet():
a1 = -LJ(r(p1,p2))
r = r + dt*v+0.5*dt**2*a1
a2 = -LJ(r(p1,p2))
v = v + 0.5*dt*(a1+a2)
return r, v
class Particle():
def __init__(self, (x, y), size):
self.x = x
self.y = y
self.size = size
self.colour = (0, 0, 255)
self.thickness = 1
self.speed = 0
self.angle = 0
def display(self):
pygame.draw.circle(screen, self.colour, (int(self.x), int(self.y)), self.size, self.thickness)
def move(self):
self.x += np.sin(self.angle)
self.y -= np.cos(self.angle)
def bounce(self):
if self.x > width - self.size:
self.x = 2*(width - self.size) - self.x
self.angle = - self.angle
elif self.x < self.size:
self.x = 2*self.size - self.x
self.angle = - self.angle
if self.y > height - self.size:
self.y = 2*(height - self.size) - self.y
self.angle = np.pi - self.angle
elif self.y < self.size:
self.y = 2*self.size - self.y
self.angle = np.pi - self.angle
screen = pygame.display.set_mode((width, height))
for n in range(number_of_particles):
x = random.randint(15, width-15)
y = random.randint(15, height-15)
particle = Particle((x, y), 15)
particle.speed = random.random()
particle.angle = random.uniform(0, np.pi*2)
my_particles.append(particle)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill(background_colour)
for i, particle in enumerate(my_particles):
particle.move()
particle.bounce()
for particle2 in my_particles[i+1:]:
collide(particle, particle2)
particle.display()
pygame.display.flip()
pygame.quit()
我想通过伦纳德-琼斯势来模拟粒子。我对这段代码的问题是我不知道如何使用 Verlet 算法。
move
方法中使用 Verlet 算法中的速度?最佳答案
您可以将动态变量、位置和速度保留在类实例内,但是每个类都需要一个加速度向量来累积力贡献。 Verlet 积分器具有 Controller 的作用,它从外部作用于所有粒子的集合。将角度排除在计算之外,不需要用三角函数及其反函数来回计算。使位置、速度和加速度都是二维向量。
实现速度 Verlet 变体的一种方法是(参见 https://stackoverflow.com/tags/verlet-integration/info)
verlet_step:
v += a*0.5*dt;
x += v*dt; t += dt;
do_collisions(t,x,v,dt);
a = eval_a(x);
v += a*0.5*dt;
do_statistics(t,x,v);
它假设一个矢量化变体。在您的框架中,将包含一些对粒子集合的迭代,
verlet_step:
for p in particles:
p.v += p.a*0.5*dt; p.x += p.v*dt;
t += dt;
for i, p1 in enumerate(particles):
for p2 in particles[i+1:]:
collide(p1,p2);
for i, p1 in enumerate(particles):
for p2 in particles[i+1:]:
apply_LJ_forces(p1,p2);
for p in particles:
p.v += p.a*0.5*dt;
do_statistics(t,x,v);
不,您不可能没有做错任何事,因为您实际上没有调用 Verlet 函数来更新位置和速度。不,严格的矢量化是没有必要的,见上文。通过粒子数组进行隐式矢量化就足够了。如果您想与使用相同模型提供 ODE 函数的标准积分器(例如 scipy.integrate 中的积分器)的结果进行比较,则只需要完全矢量化。
import pygame
import random
import numpy as np
import matplotlib.pyplot as plt
import math
background_colour = (255,255,255)
width, height = 500, 500
aafac = 2 # anti-aliasing factor screen to off-screen image
number_of_particles = 50
my_particles = []
sigma = 10
sigma2 = sigma*sigma
e = 5
dt = 0.1 # simulation time interval between frames
timesteps = 10 # intermediate invisible steps of length dt/timesteps
def LJ_force(p1,p2):
rx = p1.x - p2.x
ry = p1.y - p2.y
r2 = rx*rx+ry*ry
r2s = r2/sigma2+1
r6s = r2s*r2s*r2s
f = 24*e*( 2/(r6s*r6s) - 1/(r6s) )
p1.ax += f*(rx/r2)
p1.ay += f*(ry/r2)
p2.ax -= f*(rx/r2)
p2.ay -= f*(ry/r2)
def Verlet_step(particles, h):
for p in particles:
p.verlet1_update_vx(h);
p.bounce()
#t += h;
for i, p1 in enumerate(particles):
for p2 in particles[i+1:]:
LJ_force(p1,p2);
for p in particles:
p.verlet2_update_v(h);
class Particle():
def __init__(self, (x, y), (vx,vy), size):
self.x = x
self.y = y
self.vx = vx
self.vy = vy
self.size = size
self.colour = (0, 0, 255)
self.thickness = 2
self.ax = 0
self.ay = 0
def verlet1_update_vx(self,h):
self.vx += self.ax*h/2
self.vy += self.ay*h/2
self.x += self.vx*h
self.y += self.vy*h
self.ax = 0
self.ay = 0
def verlet2_update_v(self,h):
self.vx += self.ax*h/2
self.vy += self.ay*h/2
def display(self,screen, aa):
pygame.draw.circle(screen, self.colour, (int(aa*self.x+0.5), int(aa*self.y+0.5)), aa*self.size, aa*self.thickness)
def bounce(self):
if self.x > width - self.size:
self.x = 2*(width - self.size) - self.x
self.vx = - self.vx
elif self.x < self.size:
self.x = 2*self.size - self.x
self.vx = - self.vx
if self.y > height - self.size:
self.y = 2*(height - self.size) - self.y
self.vy = - self.vy
elif self.y < self.size:
self.y = 2*self.size - self.y
self.vy = - self.vy
#------------ end class particle ------------
#------------ start main program ------------
for n in range(number_of_particles):
x = 1.0*random.randint(15, width-15)
y = 1.0*random.randint(15, height-15)
vx, vy = 0., 0.
for k in range(6):
vx += random.randint(-10, 10)/2.
vy += random.randint(-10, 10)/2.
particle = Particle((x, y),(vx,vy), 10)
my_particles.append(particle)
#--------- pygame event loop ----------
screen = pygame.display.set_mode((width, height))
offscreen = pygame.Surface((aafac*width, aafac*height))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
offscreen.fill(background_colour)
for k in range(timesteps):
Verlet_step(my_particles, dt/timesteps)
for particle in my_particles:
particle.display(offscreen, aafac)
pygame.transform.smoothscale(offscreen, (width,height), screen)
pygame.display.flip()
pygame.quit()
关于python - Lennard-Jones 势模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29374247/
如何在mysql中获取“Jone Deo”或“Deo Jone”的结果?示例。 表名学生 ID------姓名 1--------琼·迪奥 2--------比尔·盖茨 现在,如果有人输入Deo Jo
我在Python中有一个算法Viola-Jones。我正在使用haarcascade xml,该文件是从openCV根文件加载的。但是openCV中没有关于口鼻的xml文件,因此我从EmguCV下载了
我刚刚开始研究 Viola-Jones 人脸检测算法来设计人脸识别系统。根据我所了解的所有内容,我对“像素总和”这个短语感到困惑。是指给定像素点的颜色总和还是给定像素点的距离总和? 最佳答案 通常,如
import pygame import random import numpy as np import matplotlib.pyplot as plt import math number_of
请用几句话向我解释一下 Viola-Jones 人脸检测方法的工作原理。 最佳答案 Viola-Jones 检测器是一个强大的二元分类器构建了几个弱探测器 Each weak detector is
我正在实现 Viola-Jones 人脸检测器来检测静止图像中的人脸,它对于与我的训练尺寸相同的图像非常有效。但是我不知道人脸检测器如何处理多种尺寸的人脸? 如果我的图像的训练大小是 24*24 并且
我正在尝试在 OpenCV 中使用 Viola–Jones 人脸检测算法。我使用 detectMultiScale() 来定位图像中的多个面孔。我想知道如何从源代码返回或计算所计算面部的置信度。似乎默
我在理解 Viola Jones algorithm 的训练阶段时遇到问题. 据我所知,我用伪代码给出了算法: # learning phase of Viola Jones foreach feat
据说“4916 个正面训练示例经过手工挑选对齐、归一化并缩放到 24x24 的基本分辨率。通过从 9500 张不包含人脸的图像中随机挑选子窗口来选择 10,000 个负面示例。”在论文“Paul Vi
我尝试从面部数据库中提取面部特征,但我发现 Viola-Jones 算法在两种情况下效果不佳*: 当我尝试单独检测眼睛时, 当我尝试检测嘴巴时。 *效果不佳:将图像的不同部分检测为眼睛或嘴巴。或者有时
事实上,它是 Lennard Jones 势的导数。原因是我正在编写一个分子动力学程序,至少 80% 的时间花在以下函数上,即使使用最激进的编译器选项 (gcc ** -O3)。 double ljd
给定一组 GPS 坐标,我需要使用谷歌地图绘制它们并从每个坐标画到下一个坐标。如果我可以显示方向性将是最佳的,但只要我可以指示起点,这并不是绝对必要的。 将有两个以上的点——请求的点数会有所不同,所以
我正在尝试将第 i 个粒子上的力绘制为与 Lennard-Jones 系统中第 j 个粒子(即 xi-xj)的距离的函数。力由下式给出: 其中 sigma 和 epsilon 是两个参数,Xi 是已知
我正在努力理解 Viola Jones 方法,而且我基本上已经掌握了它。 它使用简单的类似 Haar 的特征提升到强大的分类器中并组织成层/级联以实现更好的性能(不用理会明显的“非对象”区域)。 我想
我看过很多关于 Viola-Jones 算法真正工作原理的文章和问题的答案。我一直在寻找答案,说某个区域的“像素总和”减去相邻区域的“像素总和”。我对“像素总和”的含义感到困惑。值(value)依据是
我已经阅读了 2004 年的 viola 论文。在 3.1 中,他们解释了阈值计算。但我非常困惑。它读作 For each feature, the examples are sorted based
我一直在实现 Viola-Jones' face detection algorithm 的改编版.该技术依赖于在图像中放置一个 24x24 像素的子帧,然后在其中的每个位置以各种可能的尺寸放置矩形特
我正在寻找一种将字符串的首字母大写的方法,包括名称由连字符连接的地方,例如 adam smith-jones 需要是 Adam Smith-Jones。 ucwords()(或 ucfirst(),如
我读了很多关于 Viola Jones 方法的文章,但我仍然不明白矩形特征中的“弱分类器”、“强分类器”、“子窗口”,它们的定义是什么。那么“阈值”呢?我如何知道阈值?谁能帮我?谢谢之前 最佳答案 A
我正在尝试使用 OpenCV 中的 Haar 级联检测图像中的特定对象。 假设我对检测风景图像中的 parking 标志感兴趣。在为我的训练集定义正图像样本时,哪种图像是最好的图像:(a) 包含我的对
我是一名优秀的程序员,十分优秀!