我写了一个程序来解决以下问题:
在随机创建种子且粒子随机移动的环形平面上实施扩散受限聚合模拟。如果它们的粒子没有降落在种子或粒子附近,它们就会移动。用户输入种子(红色像素)、粒子(黑色像素)、步骤(无或迭代)、平面大小。
我的代码很慢。我怎样才能让它更快?
我随机创建 x 和 y 坐标并绘制红色像素(种子),然后为黑色像素(粒子)随机创建 x 和 y,如果黑色像素落在可以停留的红色或黑色像素的位置,否则它会再次随机移动直到没有更多的粒子。如果像素落在 x > 边框等边界之外,则 x=0; 如果 x <1 则 x= 边界。y 也是一样。
这只是意味着如果它落在边界上,我会将它移动到相反的边界。然后再次检查相邻像素。我有一个用于创建种子的外循环,以及用于创建粒子的内循环。在内部循环中,我检查 x,y 位置:
//Place, move, and "stick" the particles; stop if either steps or particles = 0
for (int p = 0; p < particles; p++) {
for (int s = 0; s < steps; s++) {
if (xPos > image.getWidth() ) {
do something
}
else if (xPos < 1) {
do something
}
if (yPos > image.getHeight() - 2) {
do something
}
else if (yPos < 1) {
do something
}
else if (xPos > image.getWidth() && yPos > image.getHeight()) {
do something
}
else if (xPos < 1 && yPos < 1) {
do something
}
//If the surrounding pixels' color is not white, make that particle stick.
if (moveValid()) {
image.setRGB(xPos, yPos, 0xFF000000);
}
//Otherwise, move in a random direction
else {
if(xPos == 1 && image.getRGB(size - 2, yPos) != 0xFFFFFFFF){
draw(xPos,yPos);
}
else if(xPos == size - 2 && image.getRGB(1,yPos) != 0xFFFFFFFF){
draw(xPos,yPos);
}
if(yPos == 1 && image.getRGB(xPos, size - 2) != 0xFFFFFFFF){
draw(xPos,yPos);
}
else if(yPos == size - 2 && image.getRGB(xPos,1) != 0xFFFFFFFF){
draw(xPos,yPos);
}
else {
move();
}
}
}
//Regenerate random x and y positions for the next particle
xPos = random.nextInt(size);
yPos = random.nextInt(size);
}