为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我画出来的不是弯月?仔细核对了代码,没找到问题,求指点

var canvas =document.getElementById("canvas");
if (canvas.getContext("2d")) {
   var context = canvas.getContext("2d");
}
else {
   alert("当前浏览器不支持Canvas,推荐使用Chrome浏览器")
}

54c5d0230001c24a05000350.jpg

 $("#moon").bind("click",function () {
       var cxt = canvas.getContext("2d");
       fillMoon(cxt,2,200,200,100,30);
   });

   function fillMoon(cxt,d,x,y,R,rot){

       cxt.save();
       cxt.translate(x,y);
       cxt.rotate( rot * Math.PI / 180);
       cxt.scale(R,R);
       pathMoon(cxt,d);
/*
       var linearGrad = cxt.createLinearGradient(0,0,800,800);
       linearGrad.addColorStop(0.0,'white')
       linearGrad.addColorStop(0.5,'yellow')
       linearGrad.addColorStop(1.0,'white')
       cxt.fillStyle=linearGrad;

       var radialGrad = cxt.createRadialGradient(400,400,0,400,400,500);
       radialGrad.addColorStop(0.0,'white')
       radialGrad.addColorStop(0.5,'yellow')
       radialGrad.addColorStop(1.0,'white')

       cxt.fillStyle=radialGrad;
       cxt.fill();
*/
       cxt.strokeStyle="#caff67"
       cxt.stroke();
       cxt.restore();
   }

   function pathMoon(cxt,d){
       cxt.beginPath();
       cxt.arc(0, 0, 1, 0.5*Math.PI , 1.5*Math.PI , true);
       cxt.moveTo(0 , -1);
       cxt.arcTo(d, 0, 0, 1, dis( 0, -1, d, 0) / d );
       cxt.closePath();
   }

   function dis(x1,y1,x2,y2){
       return Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
   }

正在回答

3 回答

你应该用fill填充而不是stroke画线,这样你就可以用scale缩放任意倍数拉。

1 回复 有任何疑惑可以回复我~

建议不要使用scale(R,R)来进行缩放,同时你的pathMoon方法里的moveTo(0,-1)语句不能要

arc画圆终点在0,R,然后直接从这个点开始画弧线arcTo指定两个点就可以了

你试试吧

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么我画出来的不是弯月?仔细核对了代码,没找到问题,求指点

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信