大家好:):有人能解释一下这段代码吗?我想了解但是没什么可做的。为什么这行代码?
Math.sqrt(x_dist*x_dist+y_dist*y_dist)/interval;
这还不够吗?
x_dist+y_dist/interval;
我不理解这段代码的概念......
答案 0 :(得分:1)
第一个例子计算斜边,这样就可以实现鼠标矢量的绝对速度值。
除非x_dist和y_dist都是正数,否则第二个示例将给出错误的结果。换句话说,如果你向下和向左或向上和向右移动,第二个例子将具有减法效果,并不代表真正的整体速度。在向上和向左的情况下,速度不仅成比例地不正确(仅用于比较目的),而且还导致您必须考虑的负号。 (我假设0,0代表鼠标区域的左上角,x_max,y_max代表右下角。)
如果您只是缩放比例速度,则可能不需要Math.sqrt,但如果您想知道真实的像素/间隔,肯定是这样。您还必须考虑到您正在使用的变量容器有多大,但我确信它们都适合双重...除非您正在寻找极高的精度。
想象一下,你沿着一条直线前行,这样你最终会在西边3英里的地方结束,而在1小时的时间里南边4英里。速度答案不是3 + 4 =每小时7英里,也不是-3 + 4 =每小时1英里。绝对速度的正确答案是斜边,即5英里/小时。 SQRT(西^ 2 +南^ 2)
示例#1将是正确的代码。如果您可以忽略该符号,则可以大致使用示例#2,并且您需要快速执行代码。
答案 1 :(得分:0)
你正在制作一个毕达哥拉斯三角形,其中两个catethus是 x_dist 和 y_dist ,它们是鼠标在每一帧X和Y轴上移动的距离。这行代码的作用是获取鼠标的delta位置向量的大小,并将其除以某个标量值。
另请注意,sqrt(a ^ 2 + b ^ 2) NOT 等于a + b。
编辑:不是速度,而是增量位置。
答案 2 :(得分:0)
速度为distance_travelled/time_taken
。
假设指针从(x1,y1)
移动到(x2,y2)
,如上图所示。行进的距离不是x和y距离的总和。
总结x和y假设指针从(x1,y1)
变为(x2,y1)
,然后从(x2,y1)
变为(x2,y2)
。即2条蓝线的长度之和。但你需要的是黑线的长度。
实际行进距离为d
,如图所示。使用Pythagorean theorem,d^2 = x_dist^2 + y_dist^2
。
这将为您提供速度问题中的代码行
Math.sqrt(x_dist*x_dist+y_dist*y_dist)/interval;