1
私は、OpenCLを使ってグラフィックを使ってMandelbrotを表現し、私のシーケンシャルコードを最初に処理する必要がある問題に取り組んでいます。しかし、それが作り出しているイメージはあまり良くありません。私はどこかで何かを見逃してしまったのか、これが単なる解決の欠如(話すこと)の問題であるのか分かりません。私はそれが何を生産するのスクリーンショットと一緒に下のコードを掲載しました - これは私が期待していたか、私はこれをどこかに混乱させるべきですか?MandelbrotとJuliaをJavaでグラフィカルに表現する
public class SequentialMandelbrot {
private static int[] colorMap;
private static int xSize = 200, ySize = 200;
private static float yMin = -2f, yMax = 2f;
private static float xMin = -2f, xMax = 2f;
private static float xStep = (xMax - xMin)/(float)xSize;
private static float yStep = (yMax - yMin)/(float)ySize;
private static final int maxIter = 250;
private static BufferedImage image;
private static JComponent imageComponent;
public static void main(String[] args) {
// Create the image and the component that will paint the image
initColorMap(32, Color.RED, Color.GREEN, Color.BLUE);
image = new BufferedImage(xSize, ySize, BufferedImage.TYPE_INT_RGB);
imageComponent = new JPanel()
{
private static final long serialVersionUID = 1L;
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(image, 0,0,this);
}
};
for (int j = 0; j < xSize; j++) {
for (int k = 0; k < ySize; k++) {
int iter = mandelbrot(j, k);
if (iter == maxIter) {
image.setRGB(j, k, 0);
} else {
int local_rgb = colorMap[iter%64];
image.setRGB(j, k, local_rgb);
}
}
}
JFrame frame = new JFrame("JOCL Simple Mandelbrot");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
imageComponent.setPreferredSize(new Dimension(xSize, ySize));
frame.add(imageComponent, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
private static int mandelbrot(float j, float k) {
int t = 0;
float norm = 0;
float x = 0;
float y = 0;
float r = xMin + (j * xStep);
float i = yMin + (k * yStep);
while (t < maxIter && norm < 4) {
x = (x*x) - (y*y) + r;
y = (2*x*y) + i;
norm = (x*x) + (y*y);
t++;
}
return t;
}
私はまた、(数0.45 + 0.1428iから)を設定し、それが均等に疑問何か作り出すジュリアのコードを変更した:これはあなたの反復ループである
2番目の目に感謝します。ああ、私はその馬鹿馬鹿しさを逃していたとは信じられない。また、ええ、私はそれをきれいにしようとしているので効率のためのスペースがあることを知っています。目的はそれを同時に実行させることですが、作業中のコードを実行したいと思っています:) – Syzorr
チェックしたいと思っていました。それは素晴らしいです:) – Syzorr