O*******d 发帖数: 20343 | 1 上班有点小闲,无聊之时,突然心血来潮,写了一个小小的程序,描绘
Mandelbrot Set. 纯粹的数学。贴来两张照片。 |
k****f 发帖数: 3794 | 2 当时用586计算这种图象,感觉比386强太多了
一个图片就几秒钟算完了
【在 O*******d 的大作中提到】 : 上班有点小闲,无聊之时,突然心血来潮,写了一个小小的程序,描绘 : Mandelbrot Set. 纯粹的数学。贴来两张照片。
|
O*******d 发帖数: 20343 | 3 用OpenGL画的图,主要用OpenGL的alpha blending来产生明暗。颜色是随机的,每次运
行都不一样。函数如下,但要有一些setup.
void drawMandlebrot()
{
double zx, zy, zx1, m;
GLfloat *buffer;
if(sizeChanged)
{
buffer = new GLfloat [currentWidth * currentHeight * 4];
if(buffer)
{
int halfWidth = currentWidth / 2;
int halfHeight = currentHeight / 2;
double x, y;
float alpha;
double fx = ZOOM / (double)halfWidth;
|
O*******d 发帖数: 20343 | 4 1500x1000的图片大约4到7秒完成。
【在 k****f 的大作中提到】 : 当时用586计算这种图象,感觉比386强太多了 : 一个图片就几秒钟算完了
|
O*******d 发帖数: 20343 | 5 上边函数用到的几个参数
const unsigned int WIDTH = 1500U;
const unsigned int HEIGHT = 1000U;
const double RATIO = (double)HEIGHT /(double)WIDTH;
/* zoom is calibrated to width 1000 */
const double ZOOM = 0.000000001 * (double)WIDTH / 1000.0 ;
const double ZOOM_Y = ZOOM * RATIO;
const int MAX_ITER = 1800;
/* x and y center of the image */
double xOffset = -0.713;
double yOffset = 0.34; |
k*****l 发帖数: 177 | 6 强阿。。。
上班有点小闲,无聊之时,突然心血来潮,写了一个小小的程序,描绘
Mandelbrot Set. 纯粹的数学。贴来两张照片。
【在 O*******d 的大作中提到】 : 上班有点小闲,无聊之时,突然心血来潮,写了一个小小的程序,描绘 : Mandelbrot Set. 纯粹的数学。贴来两张照片。
|
l*****c 发帖数: 1153 | 7 Consider anti-aliasing please, haha.
【在 O*******d 的大作中提到】 : 1500x1000的图片大约4到7秒完成。
|
O*******d 发帖数: 20343 | 8 不是很难. 画一个点时,同时把一圈八个点按着距离也加点颜色. 相当于做了一个卷积
convolution
【在 l*****c 的大作中提到】 : Consider anti-aliasing please, haha.
|
O*******d 发帖数: 20343 | 9 计算时间大部分都花在 for(k = 0; k < MAX_ITER; ++k) |
g****z 发帖数: 2 | 10 Zan!
【在 O*******d 的大作中提到】 : 上班有点小闲,无聊之时,突然心血来潮,写了一个小小的程序,描绘 : Mandelbrot Set. 纯粹的数学。贴来两张照片。
|
O*******d 发帖数: 20343 | 11 放大倍数越高,计算时间需要越长。因为Mandelbrot的边缘处于发散和收敛的临界,放
大倍数越高,计算时要求的iteration次数就要越多才能比较精确确定是发散还是收敛
。 现在基本上还没有理论解决怎样不用反复计算的方法来确定一个点是不是在
Mandelbrot set之内。 |