Pergunta

Eu estive trabalhando em portar um pouco do meu código de processamento até Java regular no NetBeans. Até aí tudo bem, quase tudo funciona muito bem, exceto para quando eu vou usar cores não em escala de cinza.

Eu tenho um script que chama um padrão espiral, e deve variar as cores na espiral com base em uma verificação do módulo. O roteiro parece travar, no entanto, e eu realmente não posso explicar porquê.

Se alguém tem alguma experiência com Processing e Java, e você poderia me dizer onde meu erro é, eu realmente gostaria de saber.

Por uma questão de peer-review, aqui está o meu pequeno 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++;
    }
}
Foi útil?

Solução

Você já considerou a adição de declarações de depuração (System.out.println) e olhando para o Console Java?

Pode haver uma enorme quantidade de produção e desaceleração definitiva, mas pelo menos você pode ver o que acontece quando nada parece acontecer.

O que eu acho que é um erro de lógica é o preenchimento if; cada iteratation de decidir a cor do que iteração e preenchimento com essa cor. Somente iterações com i == 11, 13, ou 17 se preenchida com uma cor. E a próxima iteração que a cor é substituído pelo cinza. Eu acho que ele tende a cintilação, possivelmente para rápido para ver.

Você não quer 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);

        ...
}

Em que maneira você começar com cinza, ir para verde, azul, rosa, verde, azul, rosa, etc Se você Também quero ver cinza em algum ponto você tem que adicionar algo como

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

Espero que isso ajude.

Outras dicas

Obrigado por toda a ajuda, mas acho que meu objetivo final é ser um pouco mal interpretado.

Aqui está uma imagem que eu gerado usando o PDE de processamento:

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

A minha saída desejada tende a ser semelhante à que, diferindo nas colorações e forma geral da espiral.

Como o cartaz anterior mencionados:. Você estiver usando uma cor não cinza apenas a cada 11, 13 e iteração 17

Obrigado por apontar isto, mas eu já sei! Eu realmente concebido dessa maneira!

Razão posição é para que se eu não tinha um padrão cinza a saída seria insanamente caótica procurando e muito desagradável para os olhos (meus olhos pelo menos).

Se houvesse uma maneira que eu poderia simplesmente ignorar prestação desse círculo inteiramente, eu certamente gostaria que mais.

Para ver o que está acontecendo aqui adicionar

stroke(255);

no início do sorteio. Você verá todos os círculos queria desenhar, mas sem cor. Como o anterior com dossel mencionados:. Você estiver usando uma cor não cinza apenas a cada 11, 13 e iteração 17

Eu acho que os seus valores de cor são o principal problema aqui. A partir da página de referência

Do ponto de vista técnico, as cores são 32 bits de informação pedida como AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB onde os de A conter o valor alfa, os de R são o valor vermelho / matiz, de G são / saturação verde, e de B são azul brilho /.

Se você olhar para seus valores, você verá um valor muito baixo alfa, que é talvez impossível distinguir do fundo.

Não tenho certeza se você ainda tem um problema. Você menciona enforcamento. É um tiro no escuro, mas lembro-me fritar repetindo essa chamada size () deve ser a primeira instrução no setup (). Por isso, talvez se movendo para baixo o fundo () chamada pode ajudar. não poderia machucar de qualquer maneira.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top