以圆形路径移动ImageView

时间:2016-10-12 15:54:03

标签: java android floating-point imageview geometry

我需要在圆形路径中移动ImageView。

该计划的规格:

1)每个ImageView都有一个包含ImageView的流星类

  • 当前坐标
  • 目标坐标
  • 以及其他一些变量和函数

2)当设置目标坐标时,ImageView将以正确的速度移动到它们

3)我正在使用的圆的路径的等式是k + sqrt(-h ^ 2 + 2 * h * x + r ^ 2-x ^ 2)(上半部分),k-sqrt( - h ^ 2 + 2 * h * x + r ^ 2-x ^ 2)(下半部分)

下面是我用来计算圆圈上半部分的目标坐标的代码。

              if(meteor.getXCoord() == meteor.getTargetCoordsX() && meteor.getXCoord() != meteor.getH() + meteor.getR()) {
                     if (meteor.getYCoord() == meteor.getTargetCoordsY()) {

                         /*
                             b+sqrt(-a^2+2*a*x+r^2-x^2), b-sqrt(-a^2+2*a*x+r^2-x^2)
                          */

                         meteor.setDeltaX(meteor.getSpeedX() + meteor.getXCoord());
                         meteor.setDeltaY(meteor.getSpeedY() + meteor.getYCoord());

                         meteor.setTargetCoordsX(meteor.getDeltaX());

                         //where target coordinate y is set *****
                         meteor.setTargetCoordY((meteor.getK() + (float) Math.sqrt(-1 * meteor.getH() * meteor.getH() + 2 * meteor.getH() * meteor.getDeltaX() + meteor.getR() * meteor.getR() - meteor.getDeltaX() * meteor.getDeltaX())));


                         //bottom half
                     }

               }

我的问题是,第一次运行后,目标坐标y根据logcat变为NaN。 此外,根据Log.d,用于设置目标坐标y的每个值都已正确设置。 其他信息:

  • TargetCoord y& x是花车
  • h,k和r是浮点数
  • delta x& y是花车
  • 当前坐标x& y是花车

Delta x& y设置在上面。用于设置它的值是速度和当前坐标。速度是在1毫秒内移动的像素数

此外,所有meteor.methods都经过测试和工作。我认为问题与目标坐标y的计算有关。

1 个答案:

答案 0 :(得分:1)

使用一点三角函数可能更容易:如果您以恒定速度旋转(x0y0),坐标更新可写为

xn = x0 + (x-x0)*cos(u) + (y-y0)*sin(u)
yn = y0 - (x-x0)*sin(u) + (x-x0)*cos(u)

其中u是角速度。这样就无需使用sqrt