Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 如何在轴上旋转正弦曲线大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写2D游戏.我取得的是基于自定义路径移动精灵.
路径可以在数学上表示为:y = sin(X)..因此运动是波.
我想以这种方式旋转这个波浪,所以运动不是水平的,而是垂直的,或者有一些自定义角度相对于原点.
我数学上有点弱.抱歉.有人可以帮忙.
我的代码是这样的

for (int i=0; i<300; i++) {
  coordinatesX[i] = i;
  coordinatesY[i] = (float) (50 * Math.sin(coordinatesX[i]));
}

createpath (coordinatesX,coordinatesY);
...

解决方法

好吧,你的对象用一些起始坐标(x,y)^ t表示.要在2D空间中旋转,您可以使用旋转矩阵

R = [ cos(a) -sin(a)]
    [ sin(a) cos(a) ]

由于您还想执行平移T(沿正弦波移动),您可以通过将2D坐标扩展到3D同质坐标来构成仿射变换.假设你的平移将是(tx,ty)并且你的旋转角度(以弧度表示)是a,变换矩阵将是

T = [ cos(a) -sin(a) tx
      sin(a) cos(a)  ty 
       0       0     1 ]

将原始(x,y)点转换为(x,y,1)时,简单

T * (x,1)^t

会做的.

您可以通过将所有元素除以最后一个(即,您松散一个维度),从均匀坐标到笛卡尔坐标.因为在这个简单的情况下,它们始终为1,您可以简单地删除最后一个坐标并返回2D.

编辑:
多重T和(x,1)^ t得出:

T*(x,1)^t = [ cos(a) -sin(a) tx ] [ x ]
              [ sin(a) cos(a)  ty ]*[ y ]  =
              [   0      0      1 ] [ 1 ] 

             = [ cos(a)*x - sin(a)*y + tx ]
               [ sin(a)*x + cos(a)*y + ty ] = 
               [           1              ] 

             = (cos(a)*x - sin(a)*y + tx,sin(a)*x + cos(a)*y + ty,1)^t

大佬总结

以上是大佬教程为你收集整理的android – 如何在轴上旋转正弦曲线全部内容,希望文章能够帮你解决android – 如何在轴上旋转正弦曲线所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。