gamemaker吧 关注:13,651贴子:95,139
  • 14回复贴,共1

求一算法公式 , 希望吧里的数学达人赐教 , 如图:

只看楼主收藏回复

已知 : 发射点_x , 发射点_y , 目标点_x , 目标点_y
1.求 (obj_箭) 飞行的 x , y
2.求 (obj_箭) 不同位置的角度 image_angle


1楼2019-08-04 09:38回复
    补充:
    箭的飞行是抛物线飞行
    应该增加一个抛物高度变量 high
    可以手动调整这个变量


    2楼2019-08-04 09:46
    回复
      先给你第一问,可能还可以化简(注意这里的high是相对于y1的!time的意思是效果总持续时间!)
      tmp=
      某时间点的x和y分别是tmp和f(tmp) f的定义看下面
      (这公式有点长)


      IP属地:湖北3楼2019-08-04 14:17
      回复
        第二问(这里x代表时间!)
        x=
        y=


        IP属地:湖北4楼2019-08-04 14:30
        收起回复
          代入到对象里试了一下 y轴不运动
          x1=x
          y1=y
          x2=object0.x
          y2=object0.y
          time=100
          tmp=x1-(x1-x2)/time
          a=(2*high*x2*y1-(x2*x2)*y1+2*x2*(y1*y1)-2*high*x1*y2+(x1*x1)*y2-2*x1*y1*y2)/((x1-x2)*(-2*high+x1+x2-2*y1))
          b=-1*((2*(high+y1)*(y1-y2))/((x1-x2)*(-2*high+x1+x2-2*y1)))
          c=-1*( (-y1+y2)/((x1-x2)*(-2*high+x1+x2-2*y1)) )
          f=(a+b*x+c*x*x) ////---------这个有问题 f(x)=(a+b*x+c*x*x) 这个表达式本身有错误
          x=tmp
          y=f


          5楼2019-08-05 06:58
          回复
            sorry哈,那个第二问只有一个值,x那个作废,y的那个是斜率 搞混了


            IP属地:湖北6楼2019-08-05 08:36
            回复
              还有,f(x)=a+b*x+c*x*x是数学里的表达,不是让你直接放进代码里啊这不是GM的表达式!


              IP属地:湖北7楼2019-08-05 08:57
              回复
                需要一个变量表示飞行进度,这里用jindu表示,范围是0到1。
                x=发射x*(1-jindu)+目标x*jindu
                y=发射y*(1-jindu)+目标y*jindu+4*high*jindu*(1-jindu)//这个4*high*jindu*(1-jindu)是个关于jindu的二次曲线
                image_angle=point_direction(上一步的x,上一步的y,当前x,当前y)//注意根据素材方向可能需要添加补偿值
                至于上一步的xy是想用内置的还是自己记录,以及修正相关BUG,应该在LZ能力范围内了。


                IP属地:北京8楼2019-08-05 09:30
                收起回复
                  其实有个简单的办法,只要确定好目标点和用时,在绘制事件中设置精灵的变化高度、角度就可以了


                  IP属地:河南9楼2019-08-05 13:25
                  回复
                    q糖豆p 提供的公式实验成功 , 果然是大神 , 佩服!!!


                    10楼2019-08-06 09:55
                    回复