Question

Je travaille sur le portage d'une partie de mon code de traitement vers Java dans NetBeans. Jusqu'à présent, tout fonctionne très bien, sauf lorsque j'utilise des couleurs sans niveaux de gris.

J'ai un script qui dessine un motif en spirale et qui devrait faire varier les couleurs de la spirale en fonction du contrôle du module. Le script semble en suspens, cependant, et je ne peux pas vraiment expliquer pourquoi.

Si quelqu'un a une expérience du traitement et de Java et que vous pouvez me dire où est mon erreur, j'aimerais vraiment le savoir.

Par souci d'examen par les pairs, voici mon petit programme:

package spirals;
import processing.core.*;

public class Main extends PApplet
{
    float x, y;
    int i = 1, dia = 1;

    float angle = 0.0f, orbit = 0f;
    float speed = 0.05f;

    //color palette
    int gray = 0x0444444;
    int blue = 0x07cb5f7;
    int pink = 0x0f77cb5;
    int green = 0x0b5f77c;

    public Main(){}

    public static void main( String[] args )
    {
        PApplet.main( new String[] { "spirals.Main" } );
    }

    public void setup()
    {
        background( gray );
        size( 400, 400 );
        noStroke();
        smooth();
    }

    public void draw()
    {
        if( i % 11 == 0 )
            fill( green );
        else if( i % 13 == 0 )
            fill( blue );
        else if( i % 17 == 0 )
            fill( pink );
        else
            fill( gray );

        orbit += 0.1f; //ever so slightly increase the orbit
        angle += speed % ( width * height );

        float sinval = sin( angle );
        float cosval = cos( angle );

        //calculate the (x, y) to produce an orbit
        x = ( width / 2 ) + ( cosval * orbit );
        y = ( height / 2 ) + ( sinval * orbit );

        dia %= 11; //keep the diameter within bounds.
        ellipse( x, y, dia, dia );
        dia++;
        i++;
    }
}
Était-ce utile?

La solution

Avez-vous envisagé d'ajouter des instructions de débogage (System.out.println) et de consulter la console Java?

Il peut y avoir une quantité massive de sortie et un ralentissement définitif, mais vous pouvez au moins voir ce qui se passe quand rien ne semble se produire.

Ce que je pense, c’est une erreur de logique, c’est la déclaration de remplissage de if à chaque itération, vous décidez de la couleur de cette itération et vous la remplissez de cette couleur. Seules les itérations avec i == 11, 13 ou 17 sont remplies d'une couleur. Et à la prochaine itération, cette couleur est remplacée par le gris. Je pense que cela a tendance à scintiller, voire à jeûner pour voir.

Vous ne voulez pas quelque chose comme

public class Main extends PApplet
{
  ...

  int currentColor = gray;

  public Main(){}

  ...

  public void draw()
    {
        if( i % 11 == 0 )
           currentColor = green;
        else if( i % 13 == 0 )
           currentColor = blue;
        else if( i % 17 == 0 )
           currentColor = pink;
        else {
           // Use current color
        } 

        fill(currentColor);

        ...
}

De cette façon, vous commencez par le gris, passez au vert, au bleu, au rose, au vert, au bleu, au rose, etc. veulent également voir gris à un moment donné, vous auriez à ajouter quelque chose comme

  else if ( i % 19 ) {
    currentColor = gray;
  }

J'espère que cela vous aidera.

Autres conseils

Merci pour toute votre aide, mais je pense que mon objectif final est un peu mal interprété.

Voici une image que j'ai générée à l'aide de l'EDP en cours de traitement:

  

http://www.deviantart.com/download/97026288/spiral_render_5_by_ishkur88.png

Ma sortie souhaitée a tendance à ressembler à celle-ci, en ce qui concerne les colorations et la forme générale de la spirale.

  

Comme l'a mentionné l'affiche précédente: vous utilisez une couleur non grise uniquement aux 11ème, 13ème et 17ème itérations.

Merci de l'avoir signalé, mais je le sais déjà! Je l’ai conçu de cette façon!

La raison en est que, si je n’avais pas de valeur grise par défaut, la sortie serait incroyablement chaotique et très désagréable pour les yeux (au moins pour moi).

S'il existait un moyen de ne pas faire le rendu de ce cercle entièrement, j'aimerais beaucoup plus.

Pour voir ce qui se passe ici, ajoutez

stroke(255);

au début du tirage au sort. Vous verrez tous les cercles recherchés dessiner, mais sans couleur. Comme l'a mentionné l'affiche précédente: vous utilisez une couleur non grise uniquement aux 11ème, 13ème et 17ème itérations.

Je pense que vos valeurs de couleur sont le principal problème ici. A partir de la page de référence

D'un point de vue technique, les couleurs sont 32 bits d'informations ordonnées sous AAAAAAAARRRRRRRRGGGGGGGBGBBBBBBBB où les A contiennent la valeur alpha, les R sont les valeurs rouge / teinte, les G les vertes / saturation et les B les vertes / saturées et les B les vertes.

Si vous regardez vos valeurs, vous verrez une très faible valeur alpha, impossible à distinguer de l'arrière-plan.

Je ne sais pas si vous avez toujours un problème. Vous parlez de la pendaison. C'est un coup dans le noir, mais je me souviens que fry répète que l'appel de size () doit être la première instruction de setup (). Donc, peut-être que le fait de descendre de l'arrière-plan () pourrait aider Je ne pouvais pas faire mal de toute façon.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top