2012-02-28 19 views
2

私はAndroidでアプリケーションを開発しています。ここでandroid.graphicsを取得する必要があります。 pathの値を比較して比較します。android.graphics.pathの理解とandroid.graphics.pathの値の比較

は、次の画像を検討してください。

enter image description here

最初の画像は、直線と生成されたパスの値を示しています。同様に、第2の画像も同様の直線を示し、異なるPath値を有する。

生成される値を理解できません。誰も正確に生成された値が何を意味するかについて説明することはできますか?画面の座標からパスの値を推測することはできますか?

また、私のアプリケーションでは、パスの値を比較したいと思います。上の図に示されている線は似ています。私のアプリケーションでは、それらを比較して同じ行にしたいと思います。そして、私はラインを比較するだけではなく、カーブとそのような描画可能なすべての形状があります。比較のために、私は最初に私のパスの値を正規化する必要があります(私の現在のキャンバスにはgetMatrixと呼んでいますか?)、異なるスクリーンサイズに対して同じ効果を持たせるためには?

他の方法がありますが、これははるかに簡単で、図のパスの重心を見つけることができます。明らかに、線は曲線などと比較して異なる位置に重心を有する。しかし、このような比較はあまり正確ではありません。私はいくつかの値を保存し、生成されたパスの値と保存された値を比較し、より正確な精度を持つように重心を比較したかったのです。しかし、そのために、私は生成されたパスの値を理解する必要があります!

助けを借りてください!ありがとう! :-)

編集:私はStringに私のパスの値を変換するため使用してい

コード。私のパスの値はArrayListpointsToDraw)に格納されています。ここでは、コードです:

@Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
         synchronized(pointsToDraw){ 
         for(Path path : pointsToDraw) 
         { 
          stringPoints.add(String.valueOf(path)); 
         } 
         } 
         TextView b1Text = (TextView) findViewById(R.id.GText); 
         for(String s : stringPoints) 
         { 
          b1Text.setText(s); 
         } 

      } 
+1

私はこの質問の最初の部分を理解するのに苦労しています。具体的には、「生成される価値」を意味します。文字列に表示される文字列は何ですか?これはpath.toString()の結果ですか? – Trevor

+0

@TrevorPageいいえ、私は 'String.valueof(path)'を使用しています。質問を編集し、文字列を生成するために使用しているコードを追加します。 –

+0

実際の文字列値や 'toString()'関数を持たないため、パスを見ているだけではありませんか?単に「これはandroid.graphics.Pathのオブジェクトで、現在はメモリアドレスblahblahbalhにあります」と表示されます。 – Nanne

答えて

5

Pathオブジェクトは、一連の幾何学的パスをカプセル化するオブジェクトです。あなたがプログラムで1つのパスを別のパスと比較したい場合は、開始する必要があると思われる場所は、そのPathオブジェクトにPathMeasureオブジェクトを使用してすべての座標を引き出すことです。 PathMeasureを使用すると、distance引数を指定することで、パスに続く一連の座標を取得できます。

PathMeasure

そして、1つの所与の経路のサイズと画面に沿ってその経路の点で相互に類似であるか否かを決定するために、私は、おそらくそれらの両方にPathMeasureを使用してCOを比較することを示唆していますそれらは増分距離引数を与えて生成します。次に、比較された座標の各セットが(相対的な開始座標を考慮して)互いに距離から離れているかどうかを判断するだけの簡単な比較アルゴリズムを使用します。

私はあなたが使用するアルゴリズムを手助けすることはできませんが、開始点としてはPath内のデータを検査して分析するために使用する必要があるのはPathMeasureだと思います。または、それらをbitmapにレンダリングして、ある種の画像認識ライブラリを使用して、これらのビットマップを比較することができます。

+0

これは私が使用する必要があると思います!私はこれで作業し、あなたが私が欲しかったものを達成するのに成功した場合、あなたに戻ってきます!ありがとうございました! –

1

デフォルト値を取得するので、あなたは本当に、私が思う、そのオブジェクトの文字列を作成することはできません:あなたはそれが実際に

getClass().getName() + '@' + Integer.toHexString(hashCode()) 
と同じであることがわかり the manualチェックアウトする場合

又は、それらの言葉で、

オブジェクトのハッシュコードの符号なし16進表現。

これはオブジェクトのハッシュ値であり、パス(場所など)の任意の機能に直接認識できる接続はありません。どのように作成されたのか本当に知りたいのであれば、そのオブジェクトのhashCode()機能を見つけることができますが、私はあなたがこの質問のために興味深いものを見ないと思う。

「パス値」を比較したいと言うときは、上記の印刷された値を比較することを意味するようです。私はあなたがそれを必要としたいと思う方法を見ません。2つの別々の描画/作成された線が同じかどうかをチェックしたいと思うかもしれません。その目的のためにこのハッシュを使用することはできません。開始/停止/角度/などの実際の値を使用する必要があります。 (パスにどのメンバーが存在するかはわかりませんが、あなたはそれを見ることができます)

+0

私はあなたのポイントを得る。私はラインを比較する方法について間違っていた。正確にあなたが書いたこと - 私は2つの別々に描画された/作成された行が同じかどうかをチェックしたい。しかし、私はそれに関するいくつかのガイダンスが必要です。私は[Path](http://developer.android.com/reference/android/graphics/Path.html)APIをチェックしましたが、私の目的に役立つものは見つかりませんでした。 –

関連する問題