Pregunta

He estado trabajando para transferir parte de mi código de procesamiento a Java normal en NetBeans. Hasta ahora, bien, casi todo funciona bien, excepto cuando utilizo colores que no son de escala de grises.

Tengo un script que dibuja un patrón en espiral, y debería variar los colores en la espiral en base a una verificación de módulo. Sin embargo, el guión parece colgarse, y no puedo explicar por qué.

Si alguien tiene alguna experiencia con Processing y Java, y podría decirme dónde está mi error, me encantaría saberlo.

Por el bien de la revisión por pares, aquí está mi pequeño programa:

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++;
    }
}
¿Fue útil?

Solución

¿Ha considerado agregar instrucciones de depuración (System.out.println) y mirar la Consola Java?

Puede haber una cantidad masiva de producción y una desaceleración definitiva, pero al menos puedes ver lo que sucede cuando nada parece suceder.

Lo que sí creo es que un error lógico es la declaración de relleno if; En cada iteración, usted decide el color de esa iteración y rellena con ese color. Solo las iteraciones con i == 11, 13 o 17 se rellenan con un color. Y a la siguiente iteración ese color es sobrescrito por el gris. Creo que tiende a parpadear, posiblemente a ver rápidamente.

¿No querías algo como

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 esa manera, comienzas con gris, ve a verde, azul, rosa, verde, azul, rosa, etc. Si También quiero ver gris en algún momento, tendrías que agregar algo como

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

Espero que esto ayude.

Otros consejos

Gracias por toda la ayuda, pero creo que mi objetivo final es ser un poco mal interpretado.

Aquí hay una imagen que generé usando el PDE de procesamiento:

  

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

Mi salida deseada tiende a parecerse a eso, diferenciándose en las coloraciones y la forma general de la espiral.

  

Como mencionó el póster anterior: estás usando un color no gris solo cada 11, 13 y 17 iteraciones.

Gracias por señalar esto, pero ya lo sé! ¡Realmente lo diseñé de esa manera!

La razón es que, si no tuviera un valor predeterminado gris, la salida sería increíblemente caótica y muy desagradable para el ojo (al menos mi ojo).

Si hubiera una forma en la que pudiera simplemente omitir la representación de ese círculo por completo, ciertamente me gustaría más.

Para ver qué está pasando aquí, agregue

stroke(255);

al comienzo del sorteo. Verás dibujar todos los círculos deseados, pero sin color. Como mencionó el póster anterior: está usando un color que no sea gris solo cada 11, 13 y 17 iteraciones.

Creo que sus valores de color son el problema principal aquí. A partir de la página de referencia

Desde un punto de vista técnico, los colores son 32 bits de información ordenados como AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBBB, donde las A contienen el valor alfa, las R son el valor rojo / matiz, las g son verdes / saturadas y las B son azules / brillante.

Si observa sus valores, verá un valor alfa muy bajo, que tal vez sea imposible de distinguir del fondo.

No estoy seguro si todavía tienes un problema. Usted menciona colgar. Es un disparo en la oscuridad, pero recuerdo que freír repetir esa llamada de size () debe ser la primera instrucción en setup (). Así que tal vez mover hacia abajo en el fondo () la llamada podría ayudar No podría doler de todos modos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top