HTML5技术

canvas实现画任意角星

字号+ 作者: 来源:    2014-11-17 18:29 我要评论( )

!DOCTYPE HTMLhtmlheadmeta charset=#39;utf-8#39;script type=text/javascriptwindow.onload = function() { document.getElementById(#39;draw#39;).onclick = function() {var co...

 

<!DOCTYPE HTML>
<html>
<head>
<meta charset='utf-8'>
<script type="text/javascript">
window.onload = function() {
        document.getElementById('draw').onclick = function() {
var count = parseInt(document.getElementById('count').value);
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
context.clearRect(0, 0, canvas.width, canvas.height)
draw_multi_deg(context, count, '#F00', 150, 150, 100 );
        };
/**
*  count:正多角星角的个数
*  x:横坐标
*  y:纵坐标
*  r:多角星外接圆半径
*/
        function draw_multi_deg(context, n, color, x, y, r) {
if(color)
context.strokeStyle = color;
var deg = getDegree(n);
context.beginPath();
for(i = 0 ;i < n; i ++) {
var sintheta = Math.sin(deg * i);
var costheta= Math.cos(deg * i);
context.lineTo(x + r * sintheta, y + r * costheta);
}
context.closePath();
context.stroke();

function getDegree(n) {
for(var k = Math.ceil(n/4); k < n; k++) {
        var flag = [];
        var current = 0;
        initArr(flag, 1, n);
        for(j = 0; j < n; j++) {
flag[current] = 0;
current = (current + k) % n;
if(sum(flag, n) === 0){
return k * Math.PI * 2 / n;
}
        }
}
return -1;

function initArr(arr, value, count) {
        for(var i = 0; i < count; i++) {
arr[i] = value;
        }
}
function sum(arr, n) {
        var sum = 0;
        for(var i = 0; i < n; i++) {
sum = sum + arr[i];
        }
        return sum;
}

}

        }
}
</script>
</head>
<body>
<div class='test'>
  <label for='count'>输入多角形的角的个数</label>
  <input value='5' id='count' name='count'/>
  <button id='draw'>画图</button>
</div>
<canvas id="canvas" width="600" height="400"></canvas>
</body>
</html>

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • HTML5 进阶系列:拖放 API 实现拖放排序 - _林鑫

    HTML5 进阶系列:拖放 API 实现拖放排序 - _林鑫

    2017-05-02 11:02

  • 调取百度地图接口,实现取自己的实时位置,然后可以在百度地图上添加信息标注 - QISHUANG

    调取百度地图接口,实现取自己的实时位置,然后可以在百度地图上添加

    2017-04-18 10:02

  • canvas知识点 - H.U.C-王子

    canvas知识点 - H.U.C-王子

    2017-04-16 10:02

  • 计算机网络——DNS协议的学习与实现 - 学数学的程序猿

    计算机网络——DNS协议的学习与实现 - 学数学的程序猿

    2017-04-16 10:00

网友点评
<