ljq279318147
发表于 2009-1-1 13:55:55
漂亮!数学真的很美
0.1
发表于 2009-4-13 18:00:14
太美了,楼主辛苦了
wayne
发表于 2009-4-21 10:29:05
我用matlab画过一个分形的,虽不如前面那些精致,但也朴素好看
数学星空
发表于 2009-6-21 20:41:21
我也发几张漂亮的图片供大家欣赏
gxqcn
发表于 2009-6-22 07:36:01
啊,这是立体的分形图。
虽然分形本身的维数就是“分数”维的。
数学星空
发表于 2009-6-22 15:48:54
本帖最后由 数学星空 于 2009-6-22 15:53 编辑
[呵,我再几张极小曲面图供大家欣赏
wayne
发表于 2009-7-24 20:58:50
感觉上面,有一张图是openGL的作品,其他的都是Mathematica画出来的
mathabc
发表于 2009-9-21 18:59:27
怎么做出来的啊?很想知道,\(^o^)/~
suprman
发表于 2009-12-18 22:56:53
好东西,要分享。
KeyTo9_Fans
发表于 2009-12-19 14:33:33
本帖最后由 KeyTo9_Fans 于 2009-12-19 14:46 编辑
我的头像挺精致的吧?
其实做这样的图片只需写短短的几行代码就可以了:
#include<cstdio>
char hd={66,77,38,106,0,0,0,0,0,0,54,0,0,0,40,0,0,0,0,8,0,0,0,6,
0,0,1,0,24,0,0,0,0,0,-16,105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int i,j,k,l,n,m,B,G,R;
double a,b,x,y,z,p,px,py;
int main()
{
printf("宽度 高度 横坐标 纵坐标 放大倍数: ");
scanf("%d%d%lf%lf%lf",&m,&n,&px,&py,&p);
FILE *f=fopen("KeyTo9_Fans.bmp","wb");
hd=m&255;
hd=m>>8;
hd=n&255;
hd=n>>8;
for(i=0;i<54;i++)
fprintf(f,"%c",hd);
for(i=0;i<n;i++)
{
if((i+1)*80/n>i*80/n)printf("|");
for(j=0;j<m;j++)
{
a=(j-m/2+0.5)/m/p+px;
b=(i-n/2+0.5)/m/p+py;
l=1;x=0;y=0;
for(k=-64;k<1024;k++)
{
z=x*x-y*y+a;
y=2*x*y+b;
x=z;
if(x*x+y*y>4)
{
if(k<=0){B=255;G=191-k;R=255;}
if(0<k&&k<64){B=255;G=191;R=255-k;}
if(63<k&&k<128){B=255;G=127+k;R=255-k;}
if(127<k&&k<256){B=383-k;G=255;R=127;}
if(255<k&&k<384){B=383-k;G=255;R=k-128;}
if(383<k&&k<640){B=0;G=639-k;R=255;}
if(639<k&&k<768){B=k-639;G=0;R=895-k;}
if(767<k&&k<896){B=127;G=0;R=895-k;}
if(k>895){B=1023-k;G=0;R=0;}
fprintf(f,"%c%c%c",B,G,R);
l=0;break;
}
}
if(l)fprintf(f,"%c%c%c",0,0,0);
}
}
return 0;
}
附件是该代码编译出来的可执行程序,即使没有编程工具也可以运行。
运行程序,按如下格式输入5个参数就可以生成一张图片:
896 672 -0.16143 1.03879 20000
这5个参数分别是图片宽度、图片高度、中心点横坐标、中心点纵坐标、放大倍数。
我的头像正是用这组参数生成的。
放大倍数理论上多大都没问题,但由于计算机进行实数运算的精确程度有限,所以最高放大倍数只能达到10万亿倍左右,再放大就变成巨大的方块了。
注意:图片宽度和图片高度必须是4的倍数,不然生成出来的图片好像会囧掉*_*