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

一、圆

//圆形/椭圆

//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(""+title+"");

}

}

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

java 扇形_使用js画图之圆、弧、扇形相关推荐

  1. js 中 java 代码_在js中嵌套java代码

    jsp中有时候在js中操作某些java后台传递过来的数据逻辑比较复杂,比如list内容的遍历,可以直接在页面上添加java脚本来执行内容,代码如下: //在js中插入java代码操作 //取出java ...

  2. js文件 import java类_实现JS脚本导入JAVA类包

    本例演示怎样通过JS脚本导入JAVA类包,我们创建JS引擎后,通过eval方法调用 getScript() ,JS脚本中importPackage(java.util)为导入包. package aj ...

  3. js encodeurl java接收_在JS中encodeURI(url)怎样才能不出现乱码?

    这次给大家带来在JS中encodeURI(url)怎样才能不出现乱码?,在JS中使用encodeURI(url)的注意事项有哪些,下面就是实战案例,一起来看一下. 一般情况下, 发送 encodeUR ...

  4. 隔行变色java代码_纯js实现隔行变色效果

    本文实例为大家分享了js实现隔行变色的具体代码,供大家参考,具体内容如下 function createTable(){ //创建表格 var table = document.createEleme ...

  5. 微信通讯录java实现_原生JS实现微信通讯录

    最近工作当中再一次遇到要实现一个车辆列表,要求能够像微信通讯录一样,实现右侧滑动,点击功能,并且滑动过程中,能够有提示.原来用jquery实现过一次,为了精简代码,现在用原生的实现一次.想必工作中大家 ...

  6. js装修计算器java代码_用js编写的简单的计算器代码程序

    最近编写的一个简单的计算器代码程序,先给大家展示一下 分享代码如下 #box{width: 295px; margin: 0 auto; text-align: justify; border: 1p ...

  7. java喷泉编码_好程序员Java教程分享使用JS实现简单喷泉效果

    原标题:好程序员Java教程分享使用JS实现简单喷泉效果 好程序员Java教程分享使用JS实现简单喷泉效果,最近,在教学生使用JS的基本操作,为了练习JS的基本作用,特地写了一个喷泉效果,代码如下: ...

  8. java 怎么调用js代码_在Java中直接调用js代码

    JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Java中直接调用js代码 不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: " ...

  9. 使用html和js制作饼图,使用js画图之饼图

    使用js画图之饼图 饼图是将一个圆分割为多个扇形. //饼图 //dot 圆点 //r 半径 //data 数据(一维数组) function drawPie(dot, r, data){ if(da ...

最新文章

  1. Day02,Python条件判断及循环
  2. Java 多重catch语句的使用
  3. C#用Zlib压缩或解压缩字节数组
  4. HTML+CSS+JS实现 ❤️响应式团队❤️
  5. spark的外排:AppendOnlyMap与ExternalAppendOnlyMap
  6. 1.8. subshell
  7. C语言遇空字符缩进,c语言代码缩进和空白
  8. PHP安全编程:register_globals的安全性
  9. 当前音乐推荐系统研究中的挑战和愿景
  10. IBM Systems Director VMControl资源生命周期管理,第2部分
  11. 【C语言】常见面笔试题(10道)
  12. 车载以太网网络中的时间同步
  13. 沉迷游戏在心理学怎么解释
  14. 微信文章搜索工具, 推荐使用它,简单好用
  15. J-link 报错解决方法
  16. spring-boot-redis-cache集成总结及源码分析
  17. SDUT 3386 小雷的冰茶几
  18. EAAccessory iphone与经过苹果MFI授权认证的硬件通讯
  19. C2039 Error: WriteHuge : is not a member of CFile
  20. 怎样学习C语言——快速上手C语言系列之—什么是指针

热门文章

  1. 201计算机基础知识,201年计算机应用基础备考练习题及答案
  2. 基于 CoreAudio 的音频编解码(二):音频编码
  3. numpy_basic
  4. Stm32之通用定时器复习
  5. Intel亚太研发有限公司段建钢:存储市场的那些年
  6. JAVA互联网应用架构师、JAVA架构、JAVA中间件、集群等互联网应用
  7. 工作日志20150202
  8. Linux下命令详解(-)
  9. 上一篇的改进!!!!!
  10. flex 左右布局_web前端学习:移动端开发常用布局—前端弹性布局总结