以下の問題を解決するプログラムを作成しました。
シードがランダムに作成され、粒子がランダムに移動するトロイド平面に拡散制限凝集シミュレーションを実装します。パーティクルがシードまたはパーティクルの近くに着地しない場合、それらは移動します。ここで、ユーザーはシード (赤のピクセル)、粒子 (黒のピクセル)、ステップ (いいえまたは反復)、平面サイズを入力します。
私のコードは非常に遅いです。どうすれば速くなりますか?
x 座標と y 座標をランダムに作成し、赤のピクセル (シード) を描画してから、黒のピクセル (粒子) の x と y をランダムに作成しました。粒子がなくなるまで。ピクセルが x > border のように境界の外にある場合、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);
}