我的 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;
”,并希望它能满足我的要求?还是有可能像我一样做-“我希望它们成为最小值和最大值,现在我需要为其提供一个方程式”?指向正确方向的指针会很棒,因为到目前为止我仍在黑暗中射击。
最佳答案
如果我理解正确,则您希望circleSpeed
是distance
的函数,这样
当circleSpeed
是0.5
时,
distance
是100
。 circleSpeed
是2
时,distance
是20
。 有满足此要求的无穷大函数,因此我将假设线性。
包含点
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/