1
我在寫一個使用遞歸顯示Hadamard模式的程序。Hadamard模式問題
1乘1 Hadamard圖案是單個黑色方塊。一般來說,2N乘2N的Hadamard圖案是通過將2×2網格形式的N×N圖案的4個副本對齊,然後反轉右下N箇中的所有方塊的顏色逐一拷貝。
我想產生相同圖片this one
我的代碼是:
import java.awt.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class Hadamard extends JPanel{
@SuppressWarnings("unused")
private void hadamard(Graphics g, int n, int x, int y, int width, int height){
if(n == 0){
g.fillRect(x/2, y/2, width, height);
return;
}
else{
hadamard(g, n-1, x, y, width/2, height/2);
hadamard(g, n-1, x + width, y, width/2, height/2);
hadamard(g, n-1, x, y + height, width/2, height/2);
g.setColor(Color.WHITE);
hadamard(g, n-1, x + width, y + height, width/2, height/2);
g.setColor(Color.BLACK);
}
}
protected void paintComponent(Graphics g){
super.paintComponent(g);
hadamard(g, 2, getWidth()/2, getHeight()/2, getWidth()/2, getHeight()/2);
}
public static void main(String[] args) {
Hadamard panel = new Hadamard();
JFrame app = new JFrame();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.add(panel);
app.setSize(516, 538);
app.setVisible(true);
}
}
我不改變的平方正確的顏色在右下角。在過去的幾個小時裏,我一直被困在這一步,希望有人會給我一個想法,因爲我不知道如何正確地做到這一點。
預先感謝您。 納特
謝謝你的回覆,Oli。 – Nath 2011-06-01 23:40:37
@Oli按照你的意見,我改變了我的代碼:'私人無效阿達瑪(圖形克,詮釋N,INT X,INT Y,INT寬度,高度INT,布爾B){ \t \t \t \t 如果(N == 0 ){ \t if(b == true) \t g.setColor(Color.BLACK); \t else \t g.setColor(Color.WHITE); g。 \t g。fillRect(x/2,y/2,width,height); \t return; \t} \t else { \t hadamard(g,n-1,x,y,width/2,height/2,true); \t \t \t \t hadamard(g,n-1,x + width,y,width/2,height/2,true); \t \t \t \t hadamard(g,n-1,x,y + height,width/2,height/2,true); \t \t \t \t hadamard(g,n-1,x + width,y + height,width/2,height/2,false); \t \t \t \t \t \t \t \t \t \t \t \t \t \t} \t}' – Nath 2011-06-01 23:43:35
@Nath:這仍然是行不通的。你在遞歸調用中硬編碼'b'的值! – 2011-06-01 23:46:30