質問

処理コードの一部を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++;
    }
}
役に立ちましたか?

解決

デバッグステートメント(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;
  }

これがお役に立てば幸いです。

他のヒント

すべての助けに感謝しますが、私の最終目標は少し誤解されていると思います。

Processing PDEを使用して生成した画像は次のとおりです。

  

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

希望する出力は、スパイラルの色と一般的な形状が異なることに似ている傾向があります。

  

前のポスターで述べたように、11、13、17回ごとにグレー以外の色を使用しています。

これを指摘してくれてありがとう、しかし私はすでに知っている!実際にそのように設計しました!

理由は、グレーのデフォルトがなかった場合、出力がめちゃくちゃに混chaとし、目には非常に不快になるようにするためです(少なくとも私の目には)。

その円のレンダリングを完全にスキップする方法があれば、きっともっと欲しいです。

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

を追加します
stroke(255);

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

ここであなたの色の値が主な問題だと思います。リファレンスページから

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top