按y位置查找哪一行

时间:2013-12-15 15:45:35

标签: 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的鼠标位置,确定鼠标是否在一行上最快,更有效的方法是什么,哪一行?

我可以通过搜索每一行来轻易地强制它,但我知道有一个更好的方法,但我无法绕过数学计算它。

2 个答案:

答案 0 :(得分:3)

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

方法2:
或者因为你在计算:

yfrom = 4 + offset * row;

您可以反算

(Y - 4)/offset;

现在说这个数字是3.6

现在检查Y是否在行号中。 3 or 4

答案 1 :(得分:1)

感谢Abhishek Bansal,我得到了我正在寻找的答案。所以要计算行我使用Abhishek方法:

var row = (Y - 4)/offset;

为了知道我是否在行内,我计算除法的余数(模数),如果它小于或等于行高,那么我在行中,如果我在外面更大:

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