【问题标题】:Math.Pow inside Math.Sqrt - I don't understand this codeMath.Pow 里面 Math.Sqrt - 我不明白这段代码
【发布时间】:2015-06-24 11:20:13
【问题描述】:

我正在使用我从某个地方获取的这段代码,用于学习目的。如果您能帮助我更好地理解它,我正在尝试对其进行分解并了解它是如何工作的。

此函数返回鼠标与相应元素之间的距离。

function calculateDistance(elem, mouseX, mouseY) {
    return Math.floor(Math.sqrt(Math.pow(mouseX - (elem.offset().left+(elem.width()/2)), 2) + Math.pow(mouseY - (elem.offset().top+(elem.height()/2)), 2)));
}

它返回一个正数,只计算鼠标和元素之间的像素。

剥离它,只留下 Math.floor。我不知道为什么没有 math.sqrt(math.pow...) 我会得到负值,具体取决于鼠标相对于元素的位置-> left(-x)、right(x)、 above(-y)、下面(y)元素

并且还为元素获得不同的中心。

function calculateDistance(elem, mouseX, mouseY) {
    return Math.floor(mouseX - (elem.offset().left+(elem.width()/2)) + mouseY - (elem.offset().top+(elem.height()/2)));
}

我知道 Math.pow 和 sqrt 自己做什么。我没有看到他们如何找到元素的中心,因为我认为 elem.offset().left+(elem.width()/2) 是在水平方向上做的,而 elem.offset().top+(elem.height()/2) 是在垂直方向上做的。

【问题讨论】:

    标签: javascript math code-readability


    【解决方案1】:

    所以1

    is elem.width()/2 
    

    2

    elem.height()/2 
    

    通过添加

    elem.offset().left and elem.offset().top 
    

    你得到了元素的中心。

    你得到3

    mouseX - (elem.offset().left+(elem.width()/2)
    

    你得到 4 by

    mouseY - (elem.offset().top+(elem.height()/2)
    

    最后,为了找到鼠标指针和元素之间的距离,您必须使用古老的勾股定理 a²+b²=c²。为了找到边 34 的平方,您使用 Math.pow()。关于你的问题,为什么当你删除它时它返回一个负整数是一个数字的平方总是正的,不管你是正数还是负数。例如,在这种情况下,边 3 (mouseX - (elem.offset().left+(elem.width()/2)) 的结果将为负数,因为鼠标位于元素。

    如果距离平方,这将为您提供长度,因此您需要使用 Math.sqrt 从 c² 获取 c。

    最后 Math.floor 仅用于向下舍入到最接近的整数。

    【讨论】:

    • OHH xD 现在很有意义。该死的,我和它一点关系都没有
    【解决方案2】:

    它是勾股定理,a²+b²=c²,其中你有 a (x) 和 b (y) 并搜索 c(距离)

    https://en.wikipedia.org/wiki/Pythagorean_theorem

    【讨论】:

      【解决方案3】:

      我知道 Math.pow 和 sqrt 自己做什么

      他们正在这里实现Pythagoras' theorem

      我没有看到他们是如何找到元素的中心的,因为我认为 elem.offset().left+(elem.width()/2) 在水平方向上同时 elem.offset()。 top+(elem.height()/2) 垂直做了

      这正是开发人员在这里所做的。

      mouseX - (elem.offset().left+(elem.width()/2))对应链接图中的'a',elem.offset().top+(elem.height()/2)对应b

      【讨论】:

        猜你喜欢
        • 2012-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 2014-04-11
        • 2021-11-03
        • 2018-12-28
        • 2020-03-02
        相关资源
        最近更新 更多