使用js画图之圆、弧、扇形


Posted in Javascript onJanuary 12, 2015

半径为r的圆上的点p(x,y)与圆心O(x0,y0)的关系: x = x0+rcosA;  y = y0+rsinA ,A为弧度

样例:http://www.zhaojz.com.cn/demo/draw6.html

一、圆

//圆形/椭圆

//dot 圆点

//r 半径

//compressionRatio 垂直压缩比

function drawCircle(dot, r, compressionRatio, data){

    var pstart = [dot[0]+r, dot[1]]; //起点

    var pre = pstart; 

    for(var i=0; i < 360; i+=5){

        rad = i*Math.PI/180; //计算弧度

        //r*Math.cos(rad) 弧线的终点相对dot的水平偏移

        //r*Math.sin(rad) 弧线的终点相对dot的垂直偏移

        //compressionRatio 垂直压缩比例

        var cur = [r*Math.cos(rad)+dot[0], compressionRatio*r*Math.sin(rad)+dot[1]];

        drawLine(pre,cur);

        pre = cur; //保存当前点的坐标

    }

    drawLine(pre,pstart);//使闭合

    //描圆点

    drawPoint({

        pw:2,ph:2,color:'DarkRed',point:dot

    });

}

二、弧

就在画出圆的一部分,算法与圆相似

//画弧

//dot 圆点

//r 半径

//angle 圆心角

//angleOfSlope 与x轴的夹角

//pop 是否弹出

//title 标签

function drawArc(dot, r, angle, angleOfSlope, pop, title){

    var newDot = [dot[0], dot[1]];

    var a = (angleOfSlope+angle/2)*Math.PI/180; 

    if(pop){ //计算圆心的新坐标

        newDot[0] = dot[0]+10*Math.cos(a);

        newDot[1] = dot[1]+10*Math.sin(a);

    }

    if(!angleOfSlope){

        angleOfSlope = 0;

    }

    var aos = angleOfSlope*Math.PI/180;

    var aos2 = (angleOfSlope+angle)*Math.PI/180;

    var pstart = [newDot[0]+r*Math.cos(aos), newDot[1]+r*Math.sin(aos)]; //弧线的起点

    var pend = [newDot[0]+r*Math.cos(aos2), newDot[1]+r*Math.sin(aos2)]; //弧线的终点

    var pre = pstart;

    for(var i=0; i < angle; i+=2){ //在angle范围内画弧

        rad = (i+angleOfSlope)*Math.PI/180;

        var cur = [r*Math.cos(rad)+newDot[0], r*Math.sin(rad)+newDot[1]];

        drawLine(pre,cur);

        pre = cur;

    }

}

三、扇形

将弧的两端与圆心相连

//扇形

//dot 圆点

//r 半径

//angle 圆心角

//angleOfSlope 与x轴的夹角,确定扇形的方向

//pop 是否弹出,即是否偏离圆心

//title 标签

function drawSector(dot, r, angle, angleOfSlope, pop, title){

    var newDot = [dot[0], dot[1]];

    var a = (angleOfSlope+angle/2)*Math.PI/180; 

    if(pop){ //计算圆心的新坐标

        newDot[0] = dot[0]+10*Math.cos(a);

        newDot[1] = dot[1]+10*Math.sin(a);

    }

    if(!angleOfSlope){

        angleOfSlope = 0;

    }

    var aos = angleOfSlope*Math.PI/180;

    var aos2 = (angleOfSlope+angle)*Math.PI/180;

    var pstart = [newDot[0]+r*Math.cos(aos), newDot[1]+r*Math.sin(aos)]; //弧线的起点

    var pend = [newDot[0]+r*Math.cos(aos2), newDot[1]+r*Math.sin(aos2)]; //弧线的终点

    drawLine(newDot,pstart); //连接圆心与起点

    var pre = pstart;

    for(var i=0; i < angle; i+=2){ //在angle范围内画弧

        rad = (i+angleOfSlope)*Math.PI/180;

        var cur = [r*Math.cos(rad)+newDot[0], r*Math.sin(rad)+newDot[1]];

        drawLine(pre,cur);

        pre = cur;

    }

    drawPolyline([pre, pend, newDot]); //使闭合

    //描圆心

    drawPoint({

        pw:2,ph:2,color:'DarkRed',point:dot

    });

    //标签

    if(title){

        document.write("<span style='height: 24px; line-height: 24px; width: 80px; text-align: center; color: RED; position: absolute; left:"+(newDot[0]+r*(2/4)*Math.cos(a)-40)+"px; top: "+(newDot[1]+r*(2/4)*Math.sin(a)-12)+"'>"+title+"</span>");

    }

}

是不是很震撼,原来js也能做如此炫酷的事情。。。

Javascript 相关文章推荐
枚举JavaScript对象的函数
Dec 22 Javascript
js列举css中所有图标的实现代码
Jul 04 Javascript
javascript语言结构小记(一)
Sep 10 Javascript
jQuery中json对象的复制方式介绍(数组及对象)
Jun 08 Javascript
jQuery插件zepto.js简单实现tab切换
Jun 16 Javascript
Javascript中call,apply,bind方法的详解与总结
Dec 12 Javascript
HTML5实现微信拍摄上传照片功能
Apr 21 Javascript
JavaScript函数中的this四种绑定形式
Aug 15 Javascript
解决layui 复选框等内置控件不显示的问题
Aug 14 Javascript
小程序实现左滑删除功能
Oct 30 Javascript
关于vue表单提交防双/多击的例子
Oct 31 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
Oct 31 Javascript
js函数与php函数的区别实例浅析
Jan 12 #Javascript
使用JS画图之点、线、面
Jan 12 #Javascript
javascript定义变量时带var与不带var的区别分析
Jan 12 #Javascript
jQuery实现友好的轮播图片特效
Jan 12 #Javascript
js函数内变量的作用域分析
Jan 12 #Javascript
Jquery api 速查表分享
Jan 12 #Javascript
js常用系统函数用法实例分析
Jan 12 #Javascript
You might like
用PHP与XML联手进行网站编程代码实例
2008/07/10 PHP
php实现转换ubb代码的方法
2015/06/18 PHP
PHP PDO数据库操作预处理与注意事项
2019/03/16 PHP
Jquery进度条插件 Progress Bar小问题解决
2011/07/12 Javascript
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
关于hashchangebroker和statehashable的补充文档
2011/08/08 Javascript
js DOM 元素ID就是全局变量
2012/09/20 Javascript
jquery实现tr元素的上下移动示例代码
2013/12/20 Javascript
给应用部分的js代码设定一个统一的入口
2014/06/15 Javascript
jquery实现个人中心导航菜单效果和美观都非常不错
2014/09/02 Javascript
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
Vue学习笔记之计算属性与侦听器用法
2019/12/07 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
javascript实现贪吃蛇经典游戏
2020/04/10 Javascript
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
python分析作业提交情况
2017/11/22 Python
Python SMTP发送邮件遇到的一些问题及解决办法
2018/10/24 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
2019/10/11 Python
python实现滑雪游戏
2020/02/22 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
2020/04/10 Python
几款Python编译器比较与推荐(小结)
2020/10/15 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
Eyeko美国:屡获殊荣的睫毛膏、眼线笔和眉妆
2018/07/05 全球购物
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
AURALog面试题软件测试方面
2013/10/22 面试题
实习单位接收函模板
2014/01/10 职场文书
公务员培训自我鉴定
2014/02/01 职场文书
《祁黄羊》教学反思
2014/04/22 职场文书
小学三好学生事迹材料
2014/08/15 职场文书
2015年中秋晚会主持词
2015/07/01 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL
微信小程序用户授权最佳实践指南
2021/05/08 Javascript
微信小程序实现聊天室功能
2021/06/14 Javascript
Python使用openpyxl模块处理Excel文件
2022/06/05 Python