2008-10-03 112 views
4

我一直在努力將一些處理代碼移植到NetBeans中的常規Java。到目前爲止,大多數情況都很好,除了當我使用非灰度色彩時。處理中變化的顏色

我有一個腳本,繪製螺旋模式,並應根據模數檢查改變螺旋的顏色。腳本似乎掛起,但是,我不能解釋爲什麼。

如果任何人有處理和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++; 
    } 
} 

回答

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

希望這會有所幫助。

0

要看到最新發生在這裏添加

stroke(255); 

在抽籤開始。你會看到所有想要畫的圈子,但沒有顏色。正如前面的海報所提到的那樣:您只在每次11,13和17次迭代時使用非灰色。

我認爲你的顏色值是這裏的主要問題。如從參考頁

從技術角度來看,顏色的排序爲AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB其中A的含有α值32位信息,將R的是紅色/色調值,G的是綠色/飽和度,和B的是藍/亮度。

如果你看看你的值,你會看到一個非常低的alpha值,這可能無法區分背景。

1

感謝所有的幫助,但我認爲我的最終目標有點被誤解。

這是我生成使用上述處理PDE圖像:

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

我的期望輸出趨於看起來相似,在着色和螺旋的總體形狀不同。

正如前面提到的海報:你只使用非灰色,每11,13和17次迭代。

感謝您指出這一點,但我已經知道了!我其實是這樣設計的!

原因是,如果我沒有灰色的默認值,輸出將會瘋狂地看起來非常混亂,而且對眼睛來說非常不愉快(至少我的眼睛)。

如果有一種方法可以完全跳過渲染那個圓,我一定會更喜歡這個。

0

不知道你是否還有問題。你提到懸掛。這是在黑暗中拍攝的,但我記得重複這個size()調用必須是setup()中的第一條指令。所以也許順着background()調用可能會有所幫助。無論如何不能傷害。