1

「ミリメートル」単位の道路の「長さ」などのデータを含むタスクに取り組んでいます。そして、仕様によると、私の JFrame は 4 メートル * 3 メートルでなければなりません (これをデバイス座標に変換する方法は...?)。

これで、少なくともこのデータは実世界のデータであり、デバイスのピクセル データではないことがわかりました。ただし、いくつかのソースを見つけた後、これらのデータを Graphics2D クラスによって実際にピクセルに変換できます。

これらの情報を見つけたリソースは、

コア Java 2、ボリューム II - 高度な機能、著者 - Cay S. Horstmann および Gary Cornell

しかし、私は実際の例をグーグルで検索しましたが、うまくいきませんでした。

これについてもっと読むことができる情報源を知っている人はいますか。そして、誰かが実際にこのようなことをした例があれば、それはより有益です.

これまでの調査: これまでのところ、メートル単位のピクセル数の Graphics2D クラスに仮定を与える必要があることがわかっています。Graphics2D には、この仮定を設定するのに役立つメソッドがあります。方法は、

g2D.scale(pixelsPerMeter, pixelsPerMeter);
//And than I can draw a line with meter or millimetre coordinates
g2D.draw(new Line2D.Double(coordinates in meter));

上記のコードを試しましたが、実際に描きたいところに線を引くのは本当に難しいです。

理解の助けは非常に役に立ちます。

ありがとう

4

4 に答える 4

2

java.awt.geom.AffineTransform オブジェクトを作成し、自分で座標をメートルからピクセルに変換する方が簡単だと 思います。あなたの場合、使用しますAffineTransform.getScaleInstance(sx, sy)

次に、関数を呼び出しGraphics2Dて、ピクセル座標を使用して線と多角形を描画します。

これにより、デバッグが容易になります。変換前後の座標値を確認できます。

Javaチュートリアルの高度なトピックGraphics2Dのセクションでは、例 を使用して変換を行う方法について説明しています: http://download.oracle.com/javase/tutorial/2d/index.html

于 2011-09-02T16:10:10.833 に答える
2

メソッドGraphicsDeviceを介して、任意の特定の暗黙的なジオメトリを取得できます。getNormalizingTransform()

必要なモデル <-> ビュー変換も抽象化する必要があります。このでは、4 つのメソッドを使用して明示的にこれを行い*scale*ます。

于 2011-09-02T16:10:14.500 に答える
1

これを試して

Dimension d = getSize();
   int maxX = d.width - 1, maxY = d.height - 1;
   pixelSize = Math.max(rWidth/maxX, rHeight/maxY);
   centerX = maxX/2; centerY = maxY/2;


   int iX(float x){return Math.round(centerX + x/pixelSize);}//convert to device coordinate
   int iY(float y){return Math.round(centerY - y/pixelSize);}
   float fx(int x){return (x - centerX) * pixelSize;}//convert to logical coordinate
   float fy(int y){return (centerY - y) * pixelSize;}

  where rWidth and rHeight are real numbers
于 2012-09-03T22:17:52.570 に答える
1

すべてのスケーリングを UI ツールキットに任せるのは得策ではないと思います。実際に 4×3 メートルのウィンドウを表示できるハードウェアはおそらく見つからないため、ユーザーに実際に表示するものに現実世界の座標をスケーリングまたはトリミングする方法の決定は、一般的な UI ではなくコードに論理的に属します。層。たとえば、プロジェクトの後半で一般的な UI 要素を再利用したい場合、高さ 1 メートルのボタンを 40 cm の文字で描くように説得するのは難しいかもしれません。

于 2011-09-02T16:10:06.573 に答える