我需要在圆形路径中移动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的每个值都已正确设置。 其他信息:
Delta x& y设置在上面。用于设置它的值是速度和当前坐标。速度是在1毫秒内移动的像素数
此外,所有meteor.methods都经过测试和工作。我认为问题与目标坐标y的计算有关。
答案 0 :(得分:1)
使用一点三角函数可能更容易:如果您以恒定速度旋转(x0
,y0
),坐标更新可写为
xn = x0 + (x-x0)*cos(u) + (y-y0)*sin(u)
yn = y0 - (x-x0)*sin(u) + (x-x0)*cos(u)
其中u
是角速度。这样就无需使用sqrt
。