Domanda

Ho lavorato sul porting di parte del mio codice di elaborazione su Java normale in NetBeans. Finora tutto bene, quasi tutto funziona alla grande, tranne quando uso i colori non in scala di grigi.

Ho una sceneggiatura che disegna un motivo a spirale e dovrebbe variare i colori nella spirale in base a un controllo del modulo. La sceneggiatura sembra bloccarsi, tuttavia, e non riesco davvero a spiegare perché.

Se qualcuno ha qualche esperienza con Processing e Java e potresti dirmi dov'è il mio errore, mi piacerebbe davvero saperlo.

Per motivi di peer-review, ecco il mio piccolo programma:

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++;
    }
}
È stato utile?

Soluzione

Hai pensato di aggiungere istruzioni di debug (System.out.println) e guardare la console Java?

Potrebbe esserci un'enorme quantità di output e un rallentamento definitivo, ma puoi almeno vedere cosa succede quando non sembra accadere nulla.

Quello che penso sia un errore logico è il riempimento dell'istruzione if; ogni iterazione decidi il colore di quell'iterazione e riempi con quel colore. Solo le iterazioni con i == 11, 13 o 17 vengono riempite con un colore. E la prossima iterazione che il colore viene sovrascritto dal grigio. Penso che tende a sfarfallare, forse a digiunare per vedere.

Non volevi qualcosa del genere

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);

        ...
}

In questo modo inizi con il grigio, vai a verde, blu, rosa, verde, blu, rosa ecc. Se vuoi anche vedere il grigio ad un certo punto dovresti aggiungere qualcosa come

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

Spero che questo aiuti.

Altri suggerimenti

Grazie per tutto l'aiuto, ma penso che il mio obiettivo finale sia stato un po 'male interpretato.

Ecco un'immagine che ho generato usando il PDE di elaborazione:

  

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

L'output desiderato tende ad apparire simile a quello, differendo nelle colorazioni e nella forma generale della spirale.

  

Come menzionato nel poster precedente: stai usando un colore non grigio solo ogni 11, 13 e 17 iterazione.

Grazie per averlo sottolineato, ma lo so già! In realtà l'ho progettato in questo modo!

Il motivo della ragione è che se non avessi un default grigio l'output sarebbe follemente caotico e molto spiacevole alla vista (almeno ai miei occhi).

Se ci fosse un modo in cui potrei saltare completamente il rendering di quel cerchio, sicuramente mi piacerebbe di più.

Per vedere cosa sta succedendo qui aggiungi

stroke(255);

all'inizio del sorteggio. Vedrai tutti i cerchi desiderati disegnati, ma senza colore. Come menzionato nel poster precedente: stai usando un colore non grigio solo ogni 11, 13 e 17 iterazione.

Penso che i tuoi valori di colore siano il problema principale qui. A partire dalla pagina di riferimento

Dal punto di vista tecnico, i colori sono 32 bit di informazioni ordinate come AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB dove le A contengono il valore alfa, le R sono il valore rosso / tonalità, le G sono verdi / saturazione e le B sono blu / luminosità.

Se guardi i tuoi valori vedrai un valore alfa molto basso, che è forse impossibile distinguere dallo sfondo.

Non sono sicuro di avere ancora un problema. Hai citato l'impiccagione. È uno scatto al buio, ma ricordo che ho ripetuto che la chiamata size () deve essere la prima istruzione in setup (). Quindi forse spostarsi verso il basso () può essere d'aiuto. Non potrebbe far male comunque.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top