技术交流 · 2009 年 4 月 17 日 0

利用js在一个方框内打印一个圆

<!–
程序功能:利用js在一个方框内打印一个圆
程序制作:付江云
算法来源:梁栋
说明:本程序中相关的html和js编程不重要,重要的是希望大家能理解到这个算法,利用这种方式打印一个纵向200个点的实验需要执行近15秒,网页打开时打开会卡会儿后出现一个圆,除了上下两头比较稀疏,其他地方点看起来都还密集。
测试环境:T5450 @1.66GHZ,1G内存
–>
<html>
<head>
<title>用JS在正方形方框内打印一个圆</title>
<!–下面定义打印点的颜色–>
<style>
.dian{background-color:red;}
</style>
</head>
<body >
<script>
<!–
//定义几个需要用的变量,x1和x2是横线和圆的两个交点,y是定义的纵向坐标数,borderwidth是整个正方形的边框厚度,danwei是每个点的象素,banjing是以象素为单位的半径值。
var x1,x2,y,borderwidth=1,danwei=1,banjing=100;

//定义画园主函数,主要功能有画一个边框,以及在每一行根据圆的方程计算出圆上的两点横坐标,并且调用huadian()函数将两点用生成红色span块的方式“打印”出来,如此循环直到打印完所有行的点,结束。
function huanyuan()
{
bw=2*(banjing*danwei+borderwidth);
bh=2*(banjing*danwei+borderwidth);
document.body.innerHTML+='<div id=MainMap style=position:absolute;left:’+(document.body.clientWidth-bw)/2+’;top:’+(document.body.clientHeight-bh)/2+’;width:’+bw+’;height:’+bh+’;border-width:’+borderwidth+’;border-style:outset;border-color:#00ff00></div>’;
for(y=0;y<2*banjing;y++)
{
x1=parseInt(banjing-Math.sqrt(banjing*banjing-(y-banjing)*(y-banjing)));
x2=parseInt(banjing+Math.sqrt(banjing*banjing-(y-banjing)*(y-banjing)));
huadian(x1*danwei,y*danwei);
huadian(x2*danwei,y*danwei);
}
}

//定义画点函数,根据传递过来的参数确定生成的span块(即圆上的点)的位置。
function huadian(zuo,gao)
{
MainMap.innerHTML += ‘<span style=position:absolute;left:’+zuo+’;top:’+gao+’;width:’+danwei+’;height:’+danwei+’;overflow:hidden class=dian></span>’;
}
onload=huanyuan;//窗口加载时运行画圆主函数。
//–>
</script>
</body>
</html>