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 相关文章推荐
菜鸟javascript基础资料整理2
Dec 06 Javascript
拉动滚动条加载数据的jquery代码
May 03 Javascript
Javascript根据指定下标或对象删除数组元素
Dec 21 Javascript
js禁止页面刷新与后退的方法
Jun 08 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
Jan 19 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
Aug 01 Javascript
JS改变页面颜色源码分享
Feb 24 Javascript
一个简单的node.js界面实现方法
Jun 01 Javascript
vue如何截取字符串
May 06 Javascript
Vue.js如何使用Socket.IO的示例代码
Sep 05 Javascript
Vue实现图书管理案例
Jan 20 Vue.js
Vue SPA 首屏优化方案
Feb 26 Vue.js
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
ThinkPHP实现非标准名称数据表快速创建模型的方法
2014/11/29 PHP
js 函数的执行环境和作用域链的深入解析
2009/11/01 Javascript
Jquery操作Select 简单方便 一个js插件搞定
2009/11/12 Javascript
Javascript的getYear、getFullYear、getUTCFullYear异同分享
2011/11/30 Javascript
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
javascript圆盘抽奖程序实现原理和完整代码例子
2014/06/03 Javascript
js操作IE浏览器弹出浏览文件夹可以返回目录路径
2014/07/14 Javascript
jQuery中change事件用法实例
2014/12/26 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
JS实现超炫网页烟花动画效果的方法
2015/03/02 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
用jquery获取select标签中选中的option值及文本的示例
2018/01/25 jQuery
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
vue下的@change事件的实现
2019/10/25 Javascript
[10:24]郎朗助力完美“圣”典,天籁交织奏响序曲
2016/12/18 DOTA
python写入中英文字符串到文件的方法
2015/05/06 Python
在Python的Django框架中编写错误提示页面
2015/07/22 Python
python实现SMTP邮件发送功能
2020/06/16 Python
python cx_Oracle模块的安装和使用详细介绍
2017/02/13 Python
Python解惑之整数比较详解
2017/04/24 Python
pycharm在调试python时执行其他语句的方法
2018/11/29 Python
Pyorch之numpy与torch之间相互转换方式
2019/12/31 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
2020/02/06 Python
Cole Haan官方网站:美国时尚潮流品牌
2017/12/06 全球购物
英国复古皮包品牌:Beara Beara
2018/07/18 全球购物
UDP协议功能
2013/01/06 面试题
珍惜资源保护环境的建议书
2014/05/14 职场文书
竞聘演讲稿开场白
2014/08/25 职场文书
基层党组织建设整改方案
2014/09/16 职场文书
终止劳动合同协议书
2014/10/05 职场文书
党员先进事迹材料
2014/12/19 职场文书
党校党性分析材料
2014/12/19 职场文书
导游词之山西祁县乔家大院
2019/10/14 职场文书
解决pytorch-gpu 安装失败的记录
2021/05/24 Python
Python数据可视化之基于pyecharts实现的地理图表的绘制
2021/06/10 Python
Zabbix对Kafka topic积压数据监控的解决方案
2022/07/07 Servers