Un exercice dans Nature of Code de Shiffman me demande de créer Perlin Noise en utilisant la fonction noise() de Processing. Voici mon code que je fait pour créer Perlin NoisePourquoi cette image Perlin Noise est-elle plus lisse que les autres?
float xSpace = 0; // Signifies "space" between noise() values on the x coordinate.
float ySpace = 0; // Signifies "space" between noise() values on the y coordinate.
void setup(){
size(500,500);
background(0);
loadPixels();
for(int x = 0; x < width; x++) {
for(int y = 0; y < height; y++) {
float bright = map(noise(xSpace,ySpace),0,1,0,255);
pixels[(y * width) + x] = color(bright);
//Each pixel in the pixels[] array is a color element.
ySpace = ySpace + 0.01;
}
xSpace = xSpace + 0.01 ;
}
updatePixels();
}
Et quand je lance mon code, il crée une image comme celle
Je regardais la solution dans le manuel. La solution du manuel et ma solution sont presque identiques, sauf que le manuel réinitialise ySpace
à 0
à chaque itération de la boucle externe.
// Textbook's solution
for(int x = 0; x < width; x++) {
ySpace = 0;
for(int y = 0; y < height; y++) {
float bright = map(noise(xSpace,ySpace),0,1,0,255);
pixels[(y * width) + x] = color(bright);
ySpace = ySpace + 0.01;
}
xSpace = xSpace + 0.01 ;
}
Cependant, quand je lance le code du manuel, le code crée une image beaucoup plus lisse comme celui-ci
Pourquoi, quand ySpace
est réinitialisée dans la boucle extérieure, ne l'image sortir beaucoup plus lisse que quand ce n'est pas? En d'autres termes, pourquoi le code du manuel crée-t-il une image beaucoup plus lisse que mon code?
J'ai remarqué que le ySpace
dans mon code sera significativement plus grand que le ySpace
dans le code du manuel une fois que la boucle for est terminée. Mais je ne suis pas sûr si c'est la raison pour laquelle l'image de mon code n'est pas aussi lisse. D'après ce que je comprends, le bruit (x, y) crée 2d Perlin Noise. Lorsqu'il est appliqué à un pixel, le pixel doit avoir une couleur similaire aux pixels qui l'entourent, mais il ne semble pas que cela se passe dans mon code.
Vous ne savez pas quelle est la question ici. Vous avez modifié un paramètre de base de l'algorithme et vous êtes surpris lorsque les résultats ne correspondent pas à l'algorithme non modifié. Notez que le code du livre n'initialise pas "ySpace" dans la première boucle "- il *** re *** initialise la valeur à zéro sur itération de toute la boucle externe. –
Ok, j'ai édité mon post pour corriger mon erreur. La réinitialisation de 'ySpace' est-elle la raison pour laquelle l'image du manuel est beaucoup plus lisse que la mienne? –