4

私は、処理コードの一部を NetBeans の通常の Java に移植する作業を行ってきました。これまでのところ、グレースケール以外の色を使用する場合を除いて、ほとんどすべてがうまく機能しています。

スパイラル パターンを描画するスクリプトがあり、モジュラス チェックに基づいてスパイラルの色を変える必要があります。ただし、スクリプトがハングしているように見えますが、その理由を説明することはできません。

Processing と Java の経験があり、私の間違いがどこにあるのか教えていただければ、ぜひ教えていただきたいです。

査読のために、ここに私の小さなプログラムを示します。

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++;
    }
}
4

3 に答える 3

2

デバッグ ステートメント (System.out.println) を追加し、Java コンソールを確認することを検討しましたか?

大量の出力と決定的なスローダウンが発生する可能性がありますが、少なくとも何も起こらないときに何が起こるかを確認できます。

私が論理エラーだと思うのは、if ステートメントの入力です。反復ごとにその反復の色を決定し、その色で塗りつぶします。i == 11、13、または 17 の反復のみが色で塗りつぶされます。そして、その色が灰色で上書きされる次の反復。ちらつきがちで、おそらく見るのが速いと思います。

次のようなものが欲しくありませんでしたか

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

        ...
}

そのようにして、灰色から始めて、緑、青、ピンク、緑、青、ピンクなどに進みます。ある時点で灰色も見たい場合は、次のようなものを追加する必要があります

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

お役に立てれば。

于 2008-10-04T09:55:53.180 に答える
0

ここで何が起こっているかを確認するには、追加します

stroke(255);

抽選開始時。必要なすべての円が描画されますが、色はありません。前のポスターが述べたように、11 回目、13 回目、17 回目の反復ごとにのみグレー以外の色を使用しています。

ここでは、色の値が主な問題だと思います。参考ページより

技術的な観点からは、色は AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB の順序で並べられた 32 ビットの情報であり、A にはアルファ値が含まれ、R は赤/色相の値、G は緑/彩度、B は青/明るさです。

値を見ると、アルファ値が非常に低く、背景と区別できないことがわかります。

于 2008-10-21T08:44:01.900 に答える
0

まだ問題があるかどうかわかりません。あなたはぶら下がっていると言いました。これは暗闇でのショットですが、フライが size() 呼び出しが setup() の最初の命令でなければならないことを繰り返したのを覚えています。したがって、おそらく background() 呼び出しを下に移動すると役立つ場合があります。とにかく傷つけることはできませんでした。

于 2008-10-30T10:54:07.977 に答える