javascript - HTML5 Canvas 上的随机多边形形状

标签 javascript html canvas

我对 canvas 元素还是很陌生,我正在尝试在 canvas 元素上的随机位置绘制随机多边形(三 Angular 形)。但我很难理解它。

到目前为止我已经有了这个,它很好地绘制了一个 ploygon,但是我完全不知道如何添加随机性和定位

var c = document.getElementById('c');
if (c.getContext) {
  c2 = c.getContext('2d');
  var width = c2.width;
  var height = c2.height;
  var maxAmount = 20;

  for (i = 0; i < maxAmount; i++) {
    var polySize = 50;
    var posx = (Math.random() * (width - polySize)).toFixed();
    var posy = (Math.random() * (height - polySize)).toFixed();

    c2.fillStyle = '#f00';
    c2.beginPath();
    c2.moveTo(posx, posy);
    c2.lineTo(100, 50);
    c2.lineTo(50, 100);
    c2.lineTo(0, 90);
    c2.closePath();
    c2.fill();
  }
}
<canvas id="c" \>

最佳答案

您正在尝试获取 Canvas 的 Context2D 属性的宽度和高度属性,它们都返回了 undefined
您需要的是 canvas 元素的宽度和高度属性。

现在,由于您对其他答案的评论,如果您需要移动整个形状,只需使用保存在 posxposy 变量中的第一个点,然后调整其他点的位置:

var c = document.getElementById('c');
c.width =500;
c.height= 500;
if (c.getContext) {
  var c2 = c.getContext('2d');
  var width = c.width;
  var height = c.height;
  var maxAmount = 20;

  for (var i = 0; i < maxAmount; i++) {
    var polySize = 50;
    var posx = (Math.random() * (width - polySize));
    var posy = (Math.random() * (height - polySize));

    c2.fillStyle = '#f00';
    c2.beginPath();
    c2.moveTo(posx, posy);
    c2.lineTo(posx+100, posy+50);
    c2.lineTo(posx+50,posy+100);
    c2.lineTo(posx+0, posy+90);
    c2.closePath();
    c2.stroke();
    c2.fill();

  }
}
<canvas id="c"><\canvas>

关于javascript - HTML5 Canvas 上的随机多边形形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32331025/

相关文章:

javascript - HTML5 Canvas 在 Firefox 上比在 Chrome 上更快!为什么?

javascript - 如何在javascript中设置一分钟计数器?

javascript - 无法将 Threejs EventDispatcher 附加到自定义对象

html - 页脚图像上的文字

javascript - 如何将 DIV 的大小调整为小于其初始宽度和高度?

javascript从 Canvas 中删除具有唯一属性的多个对象

javascript - 如何去掉CKeditor的新图片属性的照片上传,或者浏览器服务器属性?

javascript - 使用 Jest CLI 时如何让 Promises 工作?

html - 如何使用 CSS 更改单选按钮的大小?

javascript - phonegap 中不显示远程图像源