Javascript 按y位置查找哪一行

Javascript 按y位置查找哪一行,javascript,math,canvas,language-agnostic,computational-geometry,Javascript,Math,Canvas,Language Agnostic,Computational Geometry,我使用以下命令在画布中生成行: var offset = 20; var rowHeight= 17; for (var row=1;row<20;row++) { var yfrom = 4 + offset * row; ctx.strokeRect(0, yfrom, 300, rowHeight); } 现在给定一个鼠标位置(比如posY),确定鼠标是否在一行上以及在哪一行上的最快和更有效的方法是什么 我可以很容易地通过搜索每一行来强迫它,但我知道有一个更好

我使用以下命令在画布中生成行:

var offset = 20;
var rowHeight= 17;

for (var row=1;row<20;row++)
{
     var yfrom = 4 + offset * row;
     ctx.strokeRect(0, yfrom, 300, rowHeight);
}
现在给定一个鼠标位置(比如posY),确定鼠标是否在一行上以及在哪一行上的最快和更有效的方法是什么

我可以很容易地通过搜索每一行来强迫它,但我知道有一个更好的方法,但我不能为它的数学问题绞尽脑汁。

方法1: 您可以对行的上y坐标进行二进制搜索。获得鼠标Y坐标所在的两行的位置后,可以检查它是否位于行矩形内

方法2: 或者,由于您正在计算:

yfrom = 4 + offset * row;
你可以回去计算

(Y - 4)/offset;
现在说这个数字是3.6

现在检查Y是位于第3行还是第4行。

方法1: 您可以对行的上y坐标进行二进制搜索。获得鼠标Y坐标所在的两行的位置后,可以检查它是否位于行矩形内

方法2: 或者,由于您正在计算:

yfrom = 4 + offset * row;
你可以回去计算

(Y - 4)/offset;
现在说这个数字是3.6


现在检查Y是在第3排还是第4排。

多亏了阿披舍克·班萨尔,我得到了我想要的答案。因此,为了计算行数,我使用阿披实方法:

var row = (Y - 4)/offset;
为了知道我是否在行内,我计算除法模数的剩余部分,如果它小于或等于行高,则我在行内,如果我在行外,则我在行内:

var inRow = (Y - 4)%offset <= rowHeight

多亏了阿披舍克·班萨尔,我得到了我想要的答案。因此,为了计算行数,我使用阿披实方法:

var row = (Y - 4)/offset;
为了知道我是否在行内,我计算除法模数的剩余部分,如果它小于或等于行高,则我在行内,如果我在行外,则我在行内:

var inRow = (Y - 4)%offset <= rowHeight

这是一个很好的方法,如果你明白我的意思的话,这仍然是野蛮的。我觉得有一种方法可以直接计算出来……如果没有这种方法,那么我会接受这个答案。谢谢你,这会引导我找到答案。这是一个很好的方法,如果你知道我的意思的话,仍然是一种残忍的方式。我觉得有一种方法可以直接计算出来……如果没有这种方法,那么我会接受这个答案。谢谢你,这会引导我找到答案。我会把它贴出来以备将来参考