Canvas JavaScript -检查圆形是否与pixeldata碰撞
Canvas JavaScript - Check if circle shape collides with pixeldata
所以,我想检查一个圆形是否与任何在HTML5 Canvas中不透明的pixeldata碰撞。
要收集pixeldata,只需执行:
ctx.getImageData(x, y, w, h)
检查point是否在圆内只需使用pythagoras:
(x1-x0) * (x1-x0) + (y1-y0) * (y1-y0) < r * r
其中0为圆心,1为点的坐标,r为圆的半径。
你是不是需要循环遍历所有像素?
假设:
Circles center is at: 300, 420
Circles radius is: 20
Canvas size is: 750 * 500 pixels
首先,您只需要检查圆圈的边界框内的图像数据:
var imageData = ctx.getImageData(c.x - c.radius, c.y - c.radius, c.radius * 2, c.radius * 2);
var pixels = imageData.data;
然后循环遍历该数据,获取颜色值和位置:
var w = imageData.width;
var h = imageData.height;
var l = w * h;
for (var i = 0; i < l; i++) {
var r = pixels[i*4]; // Red
var g = pixels[i*4+1]; // Green
var b = pixels[i*4+2]; // Blue
var a = pixels[i*4+3]; // Alpha
// skip to next iteration if the alpha of this pixel is 0
if(a === 0) {
continue;
}
// get the position of this pixel
var y = i / w;
var x = i - y * w;
// check for collision and exit is there is one
if(isInCircle(x, y)) {
collision = true;
break;
}
}
希望这对你有帮助!
相关文章:
- 访问布局信息是否也会导致浏览器重排
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 如何检测是否有溢出
- jQuery中是否内置了任何字符串格式化函数
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 测试索引值是否等于某个数字的倍数
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- YUI3 IO实用程序是否可以根据给定的内容类型标头值自动序列化数据
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 是否可以禁用jquery中的单个单选按钮
- 是否可以从父类访问子类的属性
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 如何让程序检查所选单词中是否有按键
- 用于检查数组中是否存在元素的javascript自定义方法
- 如何使用jquery确定用户是否年满18岁
- Canvas JavaScript -检查圆形是否与pixeldata碰撞