好的,這是一個奇怪的,我遇到問題(用gcc btw編譯)低分辨率Mandelbrot分形不...足夠高的分辨率?
下面是命令提示符的Mandelbrot分形生成器的源代碼。我之前完成了這個工作,我想快速測試自己,看看在命令提示符下實際生成Mandelbrot分形所需的代碼生成速度。每隔一段時間,我都會這樣做,以便自我檢驗自己的樂趣
無論如何,我遇到了一個新問題,我無法弄清楚問題是什麼。當分形呈現無論多少次迭代或我設置的escapeValue時,它總是會呈現爲橢圓形!它不應該這樣做。
對於你所有的mandelbrot/cpp極客,你能幫助我確定爲什麼我沒有獲得更多的'mandelbrot'形狀嗎?
#include <stdio.h>
#include <math.h>
#define DOSWidth 80
#define DOSHeight 25
int iterations = 1024;
float escapeValue = 3.0f;
struct ivar {
ivar(float _x, float _i) {
x = _x;
i = _i;
}
void log() {printf("(%g%c%gi)", x, (i<0)?'-':'+', fabs(i));}
float magnitude() {return sqrtf(x*x+i*i);}
ivar square() {return ivar(x, i)*ivar(x, i);}
ivar operator + (ivar v) {return ivar(x+v.x, i+v.i);};
ivar operator - (ivar v) {return ivar(x-v.x, i-v.i);};
ivar operator * (ivar v) {return ivar(x*v.x-(i*v.i), x*v.i+i*v.x);};
float x, i;
};
struct rect {
rect(float _x, float _y, float _width, float _height) {
x = _x;y = _y;width = _width;height = _height;
}
void setCenter(float cx, float cy) {
x = cx-width/2.0f;
y = cy-width/2.0f;
}
void log() {printf("(%f, %f, %f, %f)", x, y, width, height);}
float x, y;
float width, height;
};
int main() {
rect region = rect(0, 0, 2.5f, 2.0f);
region.setCenter(0, 0);
float xSize = region.width/(float)DOSWidth;
float ySize = region.height/(float)DOSHeight;
for(int y=0;y<DOSHeight;y++) {
for(int x=0;x<DOSWidth;x++) {
ivar pos = ivar(x*xSize+region.x, y*ySize+region.y);
bool escapes = false;
for(int i=0;i<iterations;i++) {
if(pos.magnitude() > escapeValue) {
escapes = true;
break;
}
pos = pos.square();
}
if(escapes)printf(" ");
else printf("X");
}
}
}
謝謝如果你有這麼多,感謝你的幫助!
啊,你絕對正確!我想知道爲什麼發生這樣一個奇怪而一致的問題!我忘了實際迭代等式lol的Z(n)+ C部分。感謝您的意見,也許這樣一個簡單的問題迴避了我由於睡眠不足:D你搖滾 – Parad0x13
這不是太多練習,但'std :: complex'將開發時間縮短到~10分鐘:https://ideone.com/Zn7QVn – Potatoswatter
哈,你的權利!但我想爲受虐狂手動開發它。如果您對此感興趣,可以參考源代碼支持的縮放功能和迭代操作 http://pastebin.com/K1f5Xruc – Parad0x13