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 相关文章推荐
Mootools 1.2教程 事件处理
Sep 15 Javascript
javascript动态添加样式(行内式/嵌入式/外链式等规则)
Jun 24 Javascript
前端开发过程中浏览器版本的两种判定方法
Oct 30 Javascript
原生JS实现图片网格式渐显、渐隐效果
Jun 05 Javascript
自定义事件解决重复请求BUG的问题
Jul 11 Javascript
laravel5.4+vue+element简单搭建的示例代码
Aug 29 Javascript
vue+element实现批量删除功能的示例
Feb 28 Javascript
使用json-server简单完成CRUD模拟后台数据的方法
Jul 12 Javascript
vue实现的仿淘宝购物车功能详解
Jan 27 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
Aug 02 Javascript
jQuery实现增删改查
Dec 22 jQuery
小程序wx.getUserProfile接口的具体使用
Jun 02 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
php实现文件下载更能介绍
2012/11/23 PHP
PHP5函数小全(分享)
2013/06/06 PHP
Windows下的PHP安装pear教程
2014/10/24 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
2019/10/10 PHP
jquery 批量上传图片实现代码
2010/01/28 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
node.js中的buffer.toString方法使用说明
2014/12/14 Javascript
JQuery创建DOM节点的方法
2015/06/11 Javascript
详解AngularJS中自定义指令的使用
2015/06/17 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
jQuery文字提示与图片提示效果实现方法
2016/07/04 Javascript
基于百度地图实现产品销售的单位位置查看功能设计与实现
2016/10/21 Javascript
详解js的事件处理函数和动态创建html标记方法
2016/12/16 Javascript
微信小程序动态添加分享数据
2017/06/14 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
JavaScript登录验证基础教程
2017/11/01 Javascript
Vue实现搜索 和新闻列表功能简单范例
2018/03/16 Javascript
chosen实现省市区三级联动
2018/08/16 Javascript
Element UI 自定义正则表达式验证方法
2018/09/04 Javascript
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
JavaScript链式调用原理与实现方法详解
2020/05/16 Javascript
[45:25]完美世界DOTA2联赛循环赛 PXG vs IO 第一场 11.06
2020/11/09 DOTA
python选择排序算法实例总结
2015/07/01 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
2017/11/17 Python
名片管理系统python版
2018/01/11 Python
对numpy中向量式三目运算符详解
2018/10/31 Python
Python常用数据类型之间的转换总结
2019/09/06 Python
Python tkinter实现简单加法计算器代码实例
2020/05/13 Python
Python爬虫中Selenium实现文件上传
2020/12/04 Python
Foot Locker澳洲官网:美国运动服和鞋类零售商
2019/10/11 全球购物
餐厅服务员岗位职责
2015/02/09 职场文书
python实现简单倒计时功能
2021/04/21 Python
MySQL 原理优化之Group By的优化技巧
2022/08/14 MySQL