Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
大约等于Javascript中的函数?_Javascript_Html_Canvas - Fatal编程技术网

大约等于Javascript中的函数?

大约等于Javascript中的函数?,javascript,html,canvas,Javascript,Html,Canvas,好的,我有一个HTML画布,上面有一堆圆圈。我想用鼠标点击圆圈上的事件来触发一些Javascript函数。我已经有了基础知识,但坐标显然非常精确,我需要30次才能找到某个圆的精确坐标 是否有一种方法可以实现“大约等于”;换句话说,我希望鼠标点击的x和y在非常接近画布上某个物体的坐标时触发一个函数(比如说10px) 谢谢 亚历克斯第一个想法: if ((mouselocx >= (corodinatex - 10)) && (mouselocx <= (corod

好的,我有一个HTML画布,上面有一堆圆圈。我想用鼠标点击圆圈上的事件来触发一些Javascript函数。我已经有了基础知识,但坐标显然非常精确,我需要30次才能找到某个圆的精确坐标

是否有一种方法可以实现“大约等于”;换句话说,我希望鼠标点击的x和y在非常接近画布上某个物体的坐标时触发一个函数(比如说10px)

谢谢

亚历克斯第一个想法:

   if ((mouselocx >= (corodinatex - 10)) && (mouselocx <= (corodinatex + 10)) {
    if ((mouselocy >= (corodinatey - 10)) && (mouselocy <= (corodinatey + 10)) {
Do something...    
}
    }
if((mouselocx>=(corodinatex-10))&&&(mouselocx=(corodinatey-10))&&(mouselocx第一个想法:

   if ((mouselocx >= (corodinatex - 10)) && (mouselocx <= (corodinatex + 10)) {
    if ((mouselocy >= (corodinatey - 10)) && (mouselocy <= (corodinatey + 10)) {
Do something...    
}
    }

if((mouselocx>=(corodinatex-10))&&&(mouselocx=(corodinatey-10))&&(mouselocx您可以使用类似的方法来测试一个点是否在另一个点的某个半径内:

function withinRadius (x1, y1, x2, y2, radius) {
 var dX = x1 - x2, dY = y1 - y2;
 return ((dX*dX) + (dY*dY) < radius*radius);
 }
半径内的函数(x1,y1,x2,y2,半径){
变量dX=x1-x2,dY=y1-y2;
返回((dX*dX)+(dY*dY)
您可以使用类似的方法来测试一个点是否在另一个点的特定半径内:

function withinRadius (x1, y1, x2, y2, radius) {
 var dX = x1 - x2, dY = y1 - y2;
 return ((dX*dX) + (dY*dY) < radius*radius);
 }
半径内的函数(x1,y1,x2,y2,半径){
变量dX=x1-x2,dY=y1-y2;
返回((dX*dX)+(dY*dY)
一般情况下,您要检查是否在通过在左右方向上向外扩展曲线而创建的多边形内单击。在贝塞尔曲线、一般圆锥曲线等情况下计算此多边形是一件棘手的事情。大多数图形库允许您设置笔划宽度参数并为您执行此操作。绘制一个宽的曲线在1px曲线下方用背景色绘制曲线,并检查宽曲线的点击率。只需确保在任何前景色之前绘制所有背景色曲线


在您特定的圆情况下,如果您没有这样的图形库,只需查看您是否在距离圆中心的公差范围内单击就足够了。如果您有非常少的圆,您可以浏览整个列表。如果您有六个以上的圆(直觉知道何时切换到更好的算法)将屏幕划分为四分之一,列出其中一个矩形中的某个命中可能命中的圆,然后在该矩形中划分为四分之一,并用圆检查可能命中的圆,直到您只有六个左右的可能性。然后向下查看可能性列表,检查您是否在任何圆的增量范围内.

一般情况下,您要检查是否在通过在左右方向上向外扩展曲线而创建的多边形内单击。在贝塞尔曲线、一般二次曲线等情况下计算此多边形比较棘手。大多数图形库允许您设置笔划宽度参数并为您执行此操作。绘制宽的c在1px曲线下方绘制背景色曲线,并检查宽曲线的点击率。只需确保在任何前景色之前绘制所有背景色曲线


在您特定的圆情况下,如果您没有这样的图形库,只需查看您是否在距离圆中心的公差范围内单击就足够了。如果您有非常少的圆,您可以浏览整个列表。如果您有六个以上的圆(直觉知道何时切换到更好的算法)将屏幕划分为四分之一,列出其中一个矩形中的某个命中可能命中的圆,然后在该矩形中划分为四分之一,并用圆检查可能命中的圆,直到您只有六个左右的可能性。然后向下查看可能性列表,检查您是否在任何圆的增量范围内.

是否可以使用矩形边界框进行碰撞检测?是否可以使用矩形边界框进行碰撞检测?