javascript实现画不相交的圆


Posted in Javascript onApril 07, 2015

效果

javascript实现画不相交的圆

html代码

<canvas  id="my_canvas" width="500" height="400">

        your browser does not support canvas

    </canvas>

    <button id="my_btn">Another Circle</button>

javascript代码

var context=document.getElementById("my_canvas");

context=context.getContext("2d");

var circles=[];

var width=500;

var height=400;

var max_radius=30;

var min_radius=20;

var count=0;

window.onload=function(){

var btn=document.getElementById("my_btn");

btn.onclick=function(){

var time=new Date();

start=time.getTime();

make_circle();

}

}

function Circle(x,y,r,color){

this.x=x;

this.y=y;

this.r=r;

this.color=color;

}

function make_circle(){

var x=Math.floor(Math.random()*width)+1;

var y=Math.floor(Math.random()*height)+1;

var r=Math.floor(Math.random()*(max_radius-min_radius))+min_radius;

var color="rgb("+(Math.floor(Math.random()*256))+","+(Math.floor(Math.random()*256))+","+(Math.floor(Math.random()*256))+")";//make different color

var circle=new Circle(x,y,r,color);

if(test1(circle)&&test2(circle)){

circles.push(circle);

context.strokeStyle=color;

context.beginPath();

context.arc(x,y,r,0,Math.PI*2,true);

context.closePath();

context.stroke();

count=0;

}

else{

count++;

if(count>10000){//if it loops too many times,we can assume that there is no space for new circle

alert("no more circle");

return false;

}

make_circle();

}

}

function test1(circle){//test if the new circle intersects with the others

var len=circles.length;

for(var i=0;i<len;i++){

var x1=circles[i].x;

var y1=circles[i].y;

var r1=circles[i].r;

var x2=circle.x;

var y2=circle.y;

var r2=circle.r;

if((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)<(r2+r1)*(r2+r1)){

return false;

}

}

return true;

}

function test2(circle){//test if the new circle touchs the border 

if((circle.x+circle.r)>width||(circle.y+circle.r)>height||(circle.x-circle.r)<0||(circle.y-circle.r)<0){

return false;

}

else{

return true;

}

}

以上所述就是本文的全部内容了,希望能够对大家熟练掌握javascript有所帮助。

Javascript 相关文章推荐
js实现单一html页面两套css切换代码
Apr 11 Javascript
jquery 滚动条事件简单实例
Jul 12 Javascript
基于JS模仿windows文件按名称排序效果
Jun 29 Javascript
Angular中$cacheFactory的作用和用法实例详解
Aug 19 Javascript
vue-cli项目中怎么使用mock数据
Sep 27 Javascript
vue组件中使用iframe元素的示例代码
Dec 13 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
Jul 09 Javascript
微信小程序实现自定义加载图标功能
Jul 19 Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
Oct 02 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
May 06 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
Jun 19 Javascript
如何通过JS实现日历简单算法
Oct 14 Javascript
JavaScript使用setTimeout实现延迟弹出警告框的方法
Apr 07 #Javascript
JavaScript使用indexOf获得子字符串在字符串中位置的方法
Apr 06 #Javascript
JavaScript搜索字符串并将搜索结果返回到字符串的方法
Apr 06 #Javascript
JavaScript使用replace函数替换字符串的方法
Apr 06 #Javascript
JavaScript输出当前时间Unix时间戳的方法
Apr 06 #Javascript
JavaScript将当前时间转换成UTC标准时间的方法
Apr 06 #Javascript
JavaScript获取当前日期是星期几的方法
Apr 06 #Javascript
You might like
ASP和PHP都是可以删除自身的
2007/04/09 PHP
php用header函数实现301跳转代码实例
2013/11/25 PHP
PHP实现适用于自定义的验证码类
2016/06/15 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
2017/03/15 PHP
php使用curl下载指定大小的文件实例代码
2017/09/30 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
PHP 图片处理
2020/09/16 PHP
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
Javascript的匿名函数小结
2009/12/31 Javascript
jquery设置控件位置的方法
2013/08/21 Javascript
一个通过script自定义属性传递配置参数的方法
2014/09/15 Javascript
javascript几个易错点记录
2014/11/26 Javascript
JS实现图片放大镜效果的方法
2015/02/27 Javascript
JQuery解析XML的方法小结
2016/04/02 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
DWR3 访问WEB元素的两种方法实例详解
2017/01/03 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
微信小程序实现的动态设置导航栏标题功能示例
2019/01/31 Javascript
element form 校验数组每一项实例代码
2019/10/10 Javascript
uni-app使用微信小程序云函数的步骤示例
2020/05/22 Javascript
[01:16:28]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第二场 2月23日
2021/03/11 DOTA
Python中统计函数运行耗时的方法
2015/05/05 Python
Python 遍历列表里面序号和值的方法(三种)
2017/02/17 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
2021/01/08 Python
瑞典快乐袜子:Happy Socks
2018/02/16 全球购物
如何用Python输出一个Fibonacci数列
2016/08/28 面试题
党员公开承诺书范文
2014/03/25 职场文书
搞笑婚前保证书
2015/02/28 职场文书
2015年中秋节活动总结
2015/03/23 职场文书
贫困生证明范文
2015/06/16 职场文书
初中同学会致辞
2015/08/01 职场文书
六年级上册《闻官军收河南河北》的教学设计
2019/11/15 职场文书
vue首次渲染全过程
2021/04/21 Vue.js
MySQL 重写查询语句的三种策略
2021/05/10 MySQL
pytorch--之halfTensor的使用详解
2021/05/24 Python