2016-10-12 14 views
1

ImageViewを円形のパスで移動する必要があります。ImageViewを円形のパスに移動

プログラムの仕様:

1)各ImageViewのは、ターゲットが

  • や他のいくつかの様々な変数を調整するImageViewのの

    • 現在の座標
    • が含まれている流星クラスを持っていますおよび機能

    2)ターゲット座標を設定すると、ImageViewが正しい速度で移動します

    3)使用している円の軌道の方程式はk + sqrt(-h^2 + 2 * h * (下半分)

    以下のコードです。円の上半分の目標座標を計算します。

       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 
            } 
    
           } 
    

    私の問題は、最初の実行後にlogcatに従ってターゲット座標yがNaNになります。 また、Log.dに従って、目標座標yを設定するために使用されるすべての値が適切に設定されます。 追加情報:

    • TargetCoord yを& xはフロートである
    • H、K、およびR
    • デルタX & yはフロートが
    • 現在の座標のx & yは
    • フロートがフロート
    されています

    デルタx & yが上記に設定されています。設定に使用される値は、速度と現在の座標です。速度は1ミリ秒で移動したピクセルの数です

    また、すべてのmeteor.methodsがテストされ、動作しています。私は問題が目標座標yの計算と関係していると思います。

  • +1

    'sqrt'の引数の値を計算し、' sqrt'の呼び出しの前に負でないかどうかを確認します – MBo

    +0

    これは否定的です。残念ながら、なぜ私は理解できません。 – holycatcrusher

    +1

    可能な理由:1)あなたの論理的な間違い2)浮動小数点計算エラーのための非常に小さな負の値 – MBo

    答えて

    1

    少し三角法を使用する方が簡単かもしれません:あなたは一定の速度で周り(x0y0)回転している場合は、座標の更新は

    uは角速度である
    xn = x0 + (x-x0)*cos(u) + (y-y0)*sin(u) 
    yn = y0 - (x-x0)*sin(u) + (x-x0)*cos(u) 
    

    のように記述することができます。これにより、sqrtを取る必要はありません。

    +0

    素晴らしいです、ありがとうございます。私は週末にそれと一緒に遊ぶよ。 xスピードとyスピードが異なるため、実際には一定のスピードを得ることに問題がありました。 – holycatcrusher

    +0

    私はあなたの方法を見て、それは良いようですが、私は私の他のすべてのパターンのために移動する方法と一致するように私の現在の方法を保つつもりです。 – holycatcrusher

    関連する問題