金字塔图案中圆的绘制方法

2024-02-04

我想在 HTML 画布上以金字塔图案绘制圆形球。

像这样:

小提琴,你可以向我展示算法:

https://jsfiddle.net/ofxmr17c/3/ https://jsfiddle.net/ofxmr17c/3/

var canvas = document.getElementById('canvas');
canvas.width = 400;
canvas.height = 400;
var ctx = canvas.getContext('2d');

var balls = [];
var ballsLength = 15;

var Ball = function() {
	this.x = 0;
    this.y = 0;
    this.radius = 10;
};

Ball.prototype.draw = function(x, y) {
	this.x = x;
    this.y = y;
	ctx.fillStyle = '#333';
	ctx.beginPath();
	ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true);
	ctx.fill();
	ctx.closePath();
};

init();

function init() {
	for (var i = 0; i < ballsLength; i++) {
    	balls.push(new Ball());
    }
    render();
}

function render() {
	for (var i = 1; i <= ballsLength; i++) {
    	if (i >= 1 && i <= 5) {
        	balls[i].draw(i * 20 + balls[i].radius, 20 + balls[i].radius);
        }
        
        if (i >= 6 && i <= 9) {
        	balls[i].draw(i * 20 + balls[i].radius, 20 + balls[i].radius * 2);
        }
        
        if (i >= 10 && i <= 12) {
        	balls[i].draw(i * 20 + balls[i].radius, 20 + balls[i].radius * 3);
        }
        
        if (i >= 13 && i <= 14) {
        	balls[i].draw(i * 20 + balls[i].radius, 20 + balls[i].radius * 4);
        }
        
        if (i == 15) {
        	balls[i].draw(i * 20 + balls[i].radius, 20 + balls[i].radius * 5);
        }
    }
    
	window.requestAnimationFrame(render);
}
canvas {
    border: 1px solid #333;
}
<canvas id="canvas"></canvas>

I have Ball与 一起上课x, y and radius变量:

var Ball = function() {
    this.x = 0;
    this.y = 0;
    this.radius = 10;
};

然后我有方法Ball在画布上绘制球的类:

Ball.prototype.draw = function(x, y) {
    this.x = x;
    this.y = y;
    ctx.fillStyle = '#333';
    ctx.beginPath();
    ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true);
    ctx.fill();
    ctx.closePath();
};

我想创建一种方法,将任意数量的球放入金字塔中。


下面的现场演示展示了如何使用一些三角学将任意数量的球打包成金字塔。要更改金字塔中的层数(以及球的数量),请编辑NUM_ROWS多变的。

完成后的样子如下:

现场演示:

var canvas = document.getElementById('canvas');
canvas.width = 400;
canvas.height = 400;
var ctx = canvas.getContext('2d');

var balls = [];
var ballsLength = 15;

var Ball = function() {
  this.x = 0;
  this.y = 0;
  this.radius = 10;
};

Ball.prototype.draw = function(x, y) {
  this.x = x;
  this.y = y;
  ctx.fillStyle = '#333';
  ctx.beginPath();
  ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true);
  ctx.fill();
  ctx.closePath();
};

init();

function init() {
  for (var i = 0; i < ballsLength; i++) {
    balls.push(new Ball());
  }
  render();
}

function render() {
  var NUM_ROWS = 5;
  for (var i = 1; i <= NUM_ROWS; i++) {
    for (var j = 0; j < i; j++) {
      balls[i].draw(j * balls[0].radius * 2 + 150 - i * balls[0].radius, -(i * balls[0].radius * 2 * Math.sin(Math.PI / 3)) + 150);
    }
  }

  //window.requestAnimationFrame(render);
}
canvas {
    border: 1px solid #333;
}
<canvas id="canvas"></canvas>

JSFiddle 版本:https://jsfiddle.net/ofxmr17c/6/ https://jsfiddle.net/ofxmr17c/6/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

金字塔图案中圆的绘制方法 的相关文章

随机推荐

  • R igraph,如何使用形状和光栅的混合来绘制顶点?

    我正在尝试使用 R 和 igraph 绘制图形 混合使用形状和光栅图像作为顶点 我修改了下面的 igraph 示例来重现我的问题 有人能看出出了什么问题吗 您需要一个 png 文件来测试脚本 library png library igra
  • 修改跳过空列表并继续执行功能

    背景 以下代码稍作修改跳过空列表并继续执行函数 https stackoverflow com questions 57236878 skipping empty list and continuing with function impo
  • 如何使用 ASP.NET Core v2 在 Visual Studio 2017 中安装 font-awesome

    我正在使用 ASP NET Core v2 构建一个网页 并且想使用 font awesome 首先我要说的是我已经尝试了几件事 比如从 NPM 安装 Bower 从 NPM 安装 font awesome 从 VS 中的 Bower 包安
  • 如何将数据集写入Kafka主题?

    我正在使用 Spark 2 1 0 和 Kafka 0 9 0 我正在尝试将批处理 Spark 作业的输出推送到 kafka 该作业应该每小时运行一次 但不是流式运行 在网上寻找答案时 我只能找到 kafka 与 Spark 流的集成 而没
  • 如何抑制“SpriteKit 纹理图集生成器警告”?

    Xcode 报告以下警告 SpriteKit 纹理图集生成器警告由于输入纹理尺寸而将 images atlas 拆分为 2 个纹理图集 虽然我将来会修改我的图像以避免 SpriteKit 生成此警告 但我想使用一些 pragma 指令暂时抑
  • 点击事件中的全日历错误时间

    我正在使用角度和全日历 我有 令人惊讶的 时区问题 而且我似乎无法解决问题 如果在周视图中我点击 08 00 我打开一个模式并显示时间 我会看到 09 00 timezone Europe Brussels ignoreTimezone f
  • 枕头调整像素图像大小 - Django/Pillow

    我正在 Django 中开发一个图像上传器 图像上传并保存到磁盘后 我正在尝试调整保存的图像的大小 同时保持其纵横比 我正在使用 Pillow 进行图像处理 调整大小 当我尝试调整图像大小时出现问题 即使调整大小的图像的长宽比与原始图像的长
  • 使用 PHP 和 jQuery 生成并下载 .csv 文件

    我想生成一个 csv 文件 然后使用 AJAX 下载它 在现场 csv php 我有这个代码
  • 错误错误:未捕获(承诺):QuotaExceededError Ionic 3

    我正在使用 ionic 3 创建一个应用程序 我正在 ionic 存储中保存一个字符串 我工作得很好 但突然出现这个错误 Home ts 这是我设置字符串的地方 this storage set 123 JSON stringify dat
  • 如何跳过 x 轴上的标签?

    我已经尝试了很长一段时间来弄清楚如何跳过该图表 x 轴上的标签 例如 显示每第三个或第四个标签 我尝试将 autoSkip 和 stepSize 添加到刻度配置中 但没有任何变化 有没有一种简单的方法可以做到这一点 Edit visitor
  • 如何使用 JavaScript 检测我的浏览器版本和操作系统?

    我尝试使用下面的代码 但它只在 Chrome 和 Mozilla 中显示结果 在 IE6 中不起作用 div div
  • matplotlib 轴标签出现奇怪错误

    我对 Python 和一般编程都很陌生 所以如果我遗漏了一些明显的东西 请提前道歉 我正在尝试绘制图表并标记轴 但每次尝试标记 y 轴时都会引发异常 我在新脚本中编写了下面的代码 以确保问题不是来自模块中的其他地方 我正在使用Python
  • 未知目录的重写规则

    所以我试图获取 mod rewrite 规则来将请求重定向到带有 htaccess 文件的 php 脚本 问题是 我希望它能够工作 无论我将项目放在网络服务器上的哪个位置 htaccess 文件和 php 脚本始终位于同一文件夹中 重写本身
  • 读取 XMLStreamReader 时出错。获取故障响应

    我开发了一个应用程序 用户应该填写申请表并在最后付款 要付款 用户应在下面给出的链接中填写详细信息 Payment https k2 karnataka gov in wps portal Khajane II Scope Remittan
  • 在 Ubuntu 上安装 Python3 的 mod_wsgi

    谁能给我一套在 Ubuntu for Python 3 上安装 mod wsgi 的清晰说明 我确实使用 Python3 成功获得了 Flask 和 mod wsgi 并且短暂地感到高兴 直到我查看 Apache 的日志并意识到我遇到了这个
  • UnicodeDecodeError:无效的起始字节

    我有一个关于 UnicodeDecodeError invalid start byte 的快速问题 我认为我的文本中的某个地方有非 UTF 8 字符 但错误消息的位置是读取文件的起点 所以我不知道如何修复它 如果您有任何建议 请告诉我 以
  • Mysql 如何获取给定年份和月份的第一个星期一

    如何获取给定年份月份的第一个星期一 SET YearMonth 201304 Result 2013 04 01 For April 2013 11 04 For November 提前致谢 Try this SET firstday 20
  • 使用 CSVHelper 动态映射嵌套对象

    我正在使用 CSVHelper 感谢 Josh Close 来读取 CSV 文件 效果非常好 我现在尝试使用它将该文件映射到一些内部类 但是 我映射的 CSV 因客户而异 但都需要映射到我的内部类 我需要允许客户定义 CSV 如何映射到我的
  • 安装失败,并显示消息“INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME”

    因此 我在项目中对包名称进行了一些重构 现在我无法再安装我的应用程序 大约在同一时间 我更新到了 android studio 的最新版本 我相信这可能是问题所在 因为我认为我在升级之前进行了重构 我只是不记得 100 这是我的清单
  • 金字塔图案中圆的绘制方法

    我想在 HTML 画布上以金字塔图案绘制圆形球 像这样 小提琴 你可以向我展示算法 https jsfiddle net ofxmr17c 3 https jsfiddle net ofxmr17c 3 var canvas documen