Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 如何推断乒乓球的位置?_Math_Pong - Fatal编程技术网

Math 如何推断乒乓球的位置?

Math 如何推断乒乓球的位置?,math,pong,Math,Pong,好的,我还有一个关于乒乓球的问题。现在我正在努力改进“人工智能”。我在网上读到,我应该预测球的x和y,然后移动到那里 这是我的方程式。 然后,我使用诸如pos 0和屏幕高度、宽度之类的常数来计算桨叶运动线的坐标 为了计算中间点,我建立了方程:a1x4+b1=a2x4+b2a1 b1 b2 a2是我以前计算过的东西。它不起作用:P怎么了?看来你走对了方向。基本上,你想知道当球到达桨的位置时,球的位置会在哪里 通过找到x和y速度并跟踪上下壁的位置,可以很容易地做到这一点 要计算x和y速度,基本上要

好的,我还有一个关于乒乓球的问题。现在我正在努力改进“人工智能”。我在网上读到,我应该预测球的x和y,然后移动到那里

这是我的方程式。

然后,我使用诸如pos 0和屏幕高度、宽度之类的常数来计算桨叶运动线的坐标


为了计算中间点,我建立了方程:
a1x4+b1=a2x4+b2
<代码>a1 b1 b2 a2是我以前计算过的东西。它不起作用:P怎么了?

看来你走对了方向。基本上,你想知道当球到达桨的位置时,球的位置会在哪里

通过找到x和y速度并跟踪上下壁的位置,可以很容易地做到这一点

要计算x和y速度,基本上要计算球在设定的时间间隔内沿x方向和y方向移动的距离。假设你发现t=0时的位置是(100(x),50(y))。。。然后您会看到,在t=1时,球位于(110,65),这意味着球在x方向上每单位时间移动10(像素),在y方向上每单位时间移动15(像素)

因此,让我们设置房间大小以供参考。让我们把房间设为200(x)乘150(y),这样最远的桨在200,最近的桨在x上的0。。。房间的底部是150,顶部是0,在y轴上

如果您的划桨位于
x=200
,则需要
(200-110)(像素)/10(每次像素)
。现在您知道了球到达桨叶需要多长时间,您可以计算出球在y轴上的位置。使用位于
x=200
的桨叶,我们发现到达桨叶还需要9个单位的时间。所以我们只需将时间乘以y方向上的变化率,就可以知道球在y方向上走了多远。通过快速计算,我们得到球在y轴上移动了135(像素)

但是,我们可以回头看,我们的房间只有150像素高。我们从y=65开始,65+135等于200,这超过了我们的限制150。所以我们必须有一个反弹。因此,我们可以通过简单地使用y=mx+b形式的线性方程来确定球何时到达y=150。其中m是y速度,b是y起点。X以时间为单位,y以距离为单位

所以我们知道碰撞发生的y是在
y=150
处,所以我们把它和m一起作为我们的旅行速率和b,这是我们原来的y位置

150=(15)(x)+65
我们可以快速求解x,得到5和2/3的时间单位。所以我们现在可以从我们的总时间中减去这个,直到我们击中划桨
(9个单位)-(5和2/3个单位)=(3和1/3个时间单位)
。在我们反弹之后,我们现在将有一个负的y速度,但是假设一个简单的反弹,速度是相同的。因此,我们可以再次使用我们的
y=mx+b
方程,但现在可以确定球的最终y位置

y=(-15)(3 and 1/3)+150
y是球的最终y位置,我们的速度现在是负的15,我们的时间是从上方反弹后的时间,b是150,因为我们从屏幕底部开始。通过快速解决这个问题,我们可以看到现在的y=100

所以我们可以看到,当我们在
x=200
,或者桨叶的x位置时,我们的y位置将在100,这是我们可以用桨叶击球的地方


希望这些都是正确的,在睡觉前尽快完成。我可以回答你关于这个的更多问题。这只是数学和物理方面的知识,你需要把它解释成你想用的任何语言。

几年前,我写了一个函数,计算引导一个移动目标作为一个“导弹命令”克隆人的欺骗。你的情况不同,所以这种方法并不完全适用,但你的问题是相似的,所以看到这一点可能会对你有所帮助

我刚刚搜索了那个旧论坛帖子,令人惊讶的是,代码仍然存在:

Function Cheat()
  Color 255,0,0
  For M.Meteor = Each Meteor
    distance#=M\m
    x#=(M\Vector\x*distance)+M\ox
    y#=(M\Vector\y*distance)+M\oy
    For i=1 To 6
      distance=M\m+M\speed*Sqr((x-gunx)*(x-gunx)+(y-guny)*(y-guny))/bulletspeed
      x=(M\Vector\x*distance)+M\ox
      y=(M\Vector\y*distance)+M\oy
    Next
    Oval x,y,4,4
  Next
End Function
(如果该代码真的很难理解,我深表歉意,因为它是用一种相当晦涩的Basic方言编写的。)


基本上,我用一点三角法来计算,如果我直接向目标射击,当子弹穿过它的路径时,目标会在哪里。然后我重复计算,但这一次计算出如果我在上一次计算中确定的位置开火,目标会在哪里。我重复了几次(在上面的代码中重复了6次,但需要重复的次数会有所不同;次数足够精确,但不会太频繁地减慢程序的执行速度,)缩小到正确的前导,以确定在何处射击。在我的代码中,我在点上画了一个红点,但很明显,一旦你算出了坐标,你就可以对信息做任何你想做的事情。

什么是“它不起作用”呢?a1、b1、a2、b2是什么?(当然你想要的是外推线y=ax+b与右侧墙x=x3的交点,也就是简单的a.x3+b。)我添加了a1和b1,我使用屏幕分辨率和纸上的0,0点计算了a2和b2。我所说的“不工作”是指当我设定位置(x4,y4)时,我的桨会飞离屏幕。嗯,也许我误解了外推的意思。基本上我想计算x4和y4。我不熟悉数学相关的英语,所以对错误感到抱歉。@ ZACELL:你不需要计算<代码> X4<代码>,因为你已经知道了。ZZAREL不太重视这个问题,这只是我的肛门问题:技术上这个问题与C++无关,说它和物理有关有点牵强,因为它只是一个线的交点。此外,互联网上有大量关于这类问题的资料。。。这是简单代数。你真的需要发布这个问题和垃圾邮件吗
Function Cheat()
  Color 255,0,0
  For M.Meteor = Each Meteor
    distance#=M\m
    x#=(M\Vector\x*distance)+M\ox
    y#=(M\Vector\y*distance)+M\oy
    For i=1 To 6
      distance=M\m+M\speed*Sqr((x-gunx)*(x-gunx)+(y-guny)*(y-guny))/bulletspeed
      x=(M\Vector\x*distance)+M\ox
      y=(M\Vector\y*distance)+M\oy
    Next
    Oval x,y,4,4
  Next
End Function