Frage

Ich habe gearbeitet in NetBeans einige meiner Verarbeitung Code über regelmäßig Java zu portieren. So weit, so gut, funktioniert fast alles groß, außer wenn ich gehe nicht-Graustufen-Farben zu verwenden.

Ich habe ein Skript, das ein Spiralmuster zieht, und soll die Farben in der Spirale auf der Grundlage einer Modulprüfung variieren. Das Skript scheint jedoch zu hängen, und ich kann nicht wirklich erklären, warum.

Wenn jemand etwas Erfahrung mit Verarbeitung hat und Java, und man konnte mir sagen, wo mein Fehler ist, würde ich wirklich gerne wissen.

Aus Gründen des Peer-Review, hier ist mein kleines Programm:

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++;
    }
}
War es hilfreich?

Lösung

Haben Sie darüber nachgedacht, Debugging-Anweisungen hinzugefügt (System.out.println) und Blick auf die Java-Konsole?

Es kann eine große Menge an Leistung und endgültiger Verlangsamung sein, aber man kann zumindest sehen, was passiert, wenn nichts zu geschehen scheint.

Was ich denke, tun, ist ein logischer Fehler ist die Füllung if-Anweisung; jeder iteratation Sie die Farbe dieser Iteration entscheiden und mit dieser Farbe zu füllen. Nur Iterationen mit i == 11, 13 oder 17 mit einer Farbe gefüllt werden. Und die nächste Iteration der Farbe wird durch grau überschrieben. Ich würde denken, es neigt möglicherweise flackern, um schnell zu sehen.

Wollen Sie nicht so etwas wie

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

        ...
}

Auf diese Weise Sie mit grauen beginnen, gehen Sie zu grün, blau, rosa, grün, blau, rosa usw. Wenn Sie wollen auch an einem gewissen Punkt grau sehen würden Sie so etwas wie

hinzufügen müssen
  else if ( i % 19 ) {
    currentColor = gray;
  }

Hope, das hilft.

Andere Tipps

Vielen Dank für all die Hilfe, aber ich denke, mein Endziel ist ein wenig falsch interpretiert wird.

Hier ist ein Bild, das ich die Verarbeitung PDE erzeugt werden:

  

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

Meine gewünschte Ausgabe neigt, die ähnlich aussehen, in den Farbgebungen und allgemeine Form der Spirale unterscheiden.

  

Wie die vorher bereits erwähnt. Sie eine nicht graue Farbe mit nur jeden 11., 13. und 17. Iteration

Danke für diesen Hinweis, aber ich weiß schon! Ich entwarf es tatsächlich so!

Reason stehend ist so, dass, wenn ich nicht einen grauen Standard habe der Ausgang wahnsinnig chaotisch sein würde suchen und sehr unangenehm für das Auge (mein Auge zumindest).

Wenn es eine Möglichkeit gäbe ich gerade diesen Kreis überspringen könnte Rendering ganz, ich möchte auf jeden Fall, dass mehr.

Um zu sehen, was passiert hier hinzufügen

stroke(255);

zu Beginn der Auslosung. Sie werden sehen, alle die gewünschten Kreise ziehen, aber ohne Farbe. Wie die vorher bereits erwähnt. Sie nur jedes 11. Eine nicht graue Farbe verwenden, 13. und 17. Iteration

Ich denke, dass Ihre Farbwerte hier das Hauptproblem sind. Wie aus der Referenzseite

Aus technischen Sicht, die Farben sind 32 Bits an Informationen als AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB bestellt, wo die a den Alpha-Wert enthält, sind die R der rot / Farbtonwert, G sind grün / Sättigung und B sind blau / Helligkeit.

Wenn Sie auf Ihren Wert aussehen werden Sie einen sehr niedrigen Alpha-Wert sehen, was vielleicht unmöglich ist, vom Hintergrund zu unterscheiden.

Nicht sicher, ob Sie immer noch ein Problem haben. Sie erwähnen hängen. Es ist ein Schuss im Dunkeln, aber ich erinnere mich braten, dass die Größe () -Aufruf Wiederholung muss die erste Anweisung in eingerichtet werden (). So bewegt vielleicht den Hintergrund nach unten () -Aufruf helfen könnte. Kann nicht ohnehin verletzt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top