ASP.NET网站制作之Html 5 Canvas绘制分形图Mandelbrot仓酷云
既然话题已经抄起,我打算今晚发篇博文再引导一下舆论方向,使它再火两天,抛砖引玉,而且赵劼先生一直在跟帖,使.NET阵营的我感到万分难得。为了测试一下js和Canvas的盘算才能,做了一个Mandelbrot的分形图,撑持鼠标ZoomIn。Mandelbrot的界说很复杂,虚数立体的每一个点(x,y),经由过程重复盘算zn+1=zn2+c,z0=0。只要了局收敛才属于Mandelbrot,不然依据n的设定一个色彩,越年夜越深,代表靠近属于汇合的点,能够把汇合中的点了解为n=无量年夜。保举在chrome中翻开本页,还撑持firefox和ie9。拖动鼠标能够分明发明chrome是最流利的。更加专业的Mandelbrot请check这里http://www.atopon.org/mandel/
<canvasid="canvas"width="600"height="480"style="margin-left:100px"><p>Yourbrowserdoesnotsupportthecanvaselement.</p></canvas><p><inputid="reset"type="button"value="Reset"/></p><script>varcanvas=document.getElementById(canvas);varcontext=canvas.getContext(2d);varwidth=canvas.width,height=canvas.height;varmaxIterations=100;varminRe=-2.0;varmaxRe=1.0;varminIm=-1;varmaxIm=minIm+(maxRe-minRe)*height/width;reset();document.getElementById("reset").onclick=reset;canvas.onmousedown=function(evt){varx0=evt.pageX-canvas.offsetLeft;vary0=evt.pageY-canvas.offsetTop;varx1,y1,w,h;varimgd=context.getImageData(0,0,width,height);update(evt);functionupdate(evt){x1=evt.pageX-canvas.offsetLeft;y1=evt.pageY-canvas.offsetTop;w=Math.abs(x1-x0),h=Math.abs(y1-y0);}functionclear(evt){if(w&&h){context.clearRect(0,0,width,height);context.putImageData(imgd,0,0);}}canvas.onmousemove=function(evt){clear(evt);update(evt);context.strokeStyle="red";context.strokeRect(x0<x1?x0:x1,y0<y1?y0:y1,w,h);}canvas.onmouseup=function(evt){clear(evt);canvas.onmousemove=canvas.onmouseup=null;minRe=minRe+(maxRe-minRe)/width*(x0<x1?x0:x1);maxRe=minRe+(maxRe-minRe)/width*w;minIm=minIm+(maxIm-minIm)/height*(y0<y1?y0:y1);maxIm=minIm+(maxIm-minIm)/height*h;draw();}}functionreset(){minRe=-2.0;maxRe=1.0;minIm=-1;maxIm=minIm+(maxRe-minRe)*height/width;draw();}functiondraw(){context.fillRect(0,0,width,height);varimgd=context.getImageData(0,0,width,height)varpix=imgd.data;vardrawPixel=function(x,y,itr){vari=(y*width+x)*4;pix=pix=pix=Math.round(itr*255/maxIterations);}mandelbrot(width,height,drawPixel);context.putImageData(imgd,0,0);}functionmandelbrot(imageWidth,imageHeight,drawPixel){varre_factor=(maxRe-minRe)/(imageWidth-1);varim_factor=(maxIm-minIm)/(imageHeight-1);for(vary=0;y<imageHeight;++y){varc_im=maxIm-y*im_factor;for(varx=0;x<imageWidth;++x){varc_re=minRe+x*re_factor;varz_re=c_re,z_im=c_im;varisInside=true;varn=0;for(;n<maxIterations;++n){varz_re2=z_re*z_re,z_im2=z_im*z_im;if(z_re2+z_im2>4){isInside=false;break;}z_im=2*z_re*z_im+c_im;z_re=z_re2-z_im2+c_re;}if(!isInside){drawPixel(x,y,n);}}}}</script>
另外,小型软件代码重用价值低,没有必要跨平台;大型软件,有严格的规划、部署,不可以随意跨平台。 平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。 关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。 我的意思是.net好用,从功能上来说比JAVA强还是很明显的。 目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案. 逐步缩小出错代码段的范围,最终确定错误代码的位置。 JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。 那么,ASP.Net有哪些改进呢? HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了. 这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。 以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。
页:
[1]