我的 Canvas 上有一个圆圈。鼠标位置是相对于 Canvas 计算的。我希望当鼠标距其基本上,鼠标越靠近圆圈,圆圈应该移动得越快。
当距离小于或等于100时,我到目前为止所移动的圆-(我正在使用easyljs库)

function handleTick() {
    distance = calculateDistance(circle, mX, mY);
    if (distance<=100) {
        circle.x += 0.3;

    stage.update();
    }
}
我想要的是
function handleTick() {
    distance = calculateDistance(circle, mX, mY);
    if (distance<=100) {
        circleSpeed = // equation that takes distance and outputs velocity px/tick.
        circle.x += circleSpeed;

    stage.update();
    }
}
所以我认为这是一个数学问题,并将其发布在数学交流上,但到目前为止还没有答案。我尝试过搜索多个主题,例如:“如何提出关系方程式”,因​​为我有域(100,20)和范围(0.5,2)。哪些功能可以将它们联系起来?
问题是我数学不好,这些数字甚至可能没有关系-我不确定我在这里寻找什么。
我是否应该编写一个随机算法“circleSpeed = 2x + 5x;”,并希望它能满足我的要求?还是有可能像我一样做-“我希望它们成为最小值和最大值,现在我需要为其提供一个方程式”?
指向正确方向的指针会很棒,因为到目前为止我仍在黑暗中射击。

最佳答案

如果我理解正确,则您希望circleSpeeddistance的函数,这样

circleSpeed0.5时,

  • distance100
  • circleSpeed2时,
  • distance20

  • 有满足此要求的无穷大函数,因此我将假设线性。

    包含点m的斜率(x₀,y₀)的线的方程为
    y = m (x-x₀) + y₀
    

    但是在这种情况下,您有两个点(x₁,y₁)(x₂,y₂),因此您可以使用
        y₂ - y₁
    m = ───────
        x₂ - x₁
    

    所以这条线的方程是
        y₂ - y₁
    y = ─────── (x - x₁) + y₁
        x₂ - x₁
    

    根据您的数据,
        0.5 - 2
    y = ──────── (x - 20) + 2 = -0.01875 x + 2.375
        100 - 20
    

    因此,

    circleSpeed = -0.01875 * distance + 2.375
    

    关于javascript - 提出算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31088015/

    10-09 16:33