「JavaFXの座標系と座標変換」の版間の差分

提供: tknotebook
移動: 案内検索
(ローカル座標)
(ローカル座標)
27行: 27行:
  
 
Scene のルートコンテナに登録された個々のノード(コントロールやコンテナや図形)は、
 
Scene のルートコンテナに登録された個々のノード(コントロールやコンテナや図形)は、
自身のローカル座標を持ちます。ローカル座標は初期状態では親ノードのローカル座標と
+
自身のローカル座標を持ちます。
一致しています。つまり、Sceneの中のコントロールや図形、コンテナに Transform(変換)が無く、
+
layoutX, layoutYプロパティもゼロならば、全てのローカル座標はグローバル座標と一致します。
+
  
ノードはローカル座標の中に置かれますが、基本的には
+
例えば、2次元図形の Rectangle は矩形の左上の座標をプロパティ x, y に保持しますが
ローカル座標の中で自身の位置を大きく変更することは可能ですが、あまり行われません。
+
これはローカル座標です。
ローカル座標系は、図形に固定された座標系ととらえ、ワールド座標系での図形の位置は、
+
 
ワールド座標に対するローカル座標を変更することで行います。つまり JavaFX の
+
3次元図形の Box(箱型) や Sphere(球) はその中心が常に座標 (0, 0) になりますが、
ノード Transform(変換) とはノードのローカル座標を決定することなのです。
+
(0、0) はローカル座標です。つまり3次元図形は自身のローカル座標の中を動くことができません。
 +
 
 +
ローカル座標は親ノードのローカル座標の中に置かれます。初期状態では親ノードのローカル座標と
 +
ノードのローカル座標は一致しています。つまり、ノードにTransform(変換)が無く、
 +
'''layoutX, layoutYプロパティもゼロのまま'''ならば、子ノードと親ノードのローカル座標系は一致します。
 +
 
 +
つまりノード自身、およびSceneに至るまでの全ての直系の親ノードに Transform(変換)が無く、
 +
'''layoutX, layoutYプロパティもゼロのまま'''ならば、ローカル座標はグローバル座標と一致します。
 +
 
 +
JavaFxでは'''ローカル座標系は図形に固定された座標系'''ととらえ、
 +
ワールド座標系での図形の位置は、'''ワールド座標に対するローカル座標を変更する'''
 +
ことで行います。
 +
 
 +
つまり '''JavaFX のノード Transform(変換)+layoutX+LayoutY とはノードのグローバル座標に対する
 +
ローカル座標を決定すること'''なのです。
  
 
'''鋭意作成中'''
 
'''鋭意作成中'''

2016年3月26日 (土) 00:47時点における版

メインページ>コンピュータの部屋#JavaFX>JavaFX Tips


JavaFXに関してたくさんの解説がネットや書籍に載っていますが、意外なことに JavaFXの座標系に関する解説が少ないようです。

この記事では JavaFx の座標系と、座標変換に関して解説します。

JavaFXの座標系

まず、JavaFxで使用されているワールド座標を示します。 ワールド座標とは、JavaFXのコントロールや図形が置かれる 座標空間です。

JavaFX ワールド座標.png
図1 JavaFXのワールド座標

図はシーンで3Dカメラを用いない場合の Scene で使われるワールド座標系です。 z軸も書いてあるのは、2Dグラフィックでも画面の深さ方向の座標(Z軸)が使われることがあるからです。

Scene(ウィンドウ) の左上が座標系の原点で、そこから右方向にX軸が、下方向にY軸が伸びます。 軸目盛の単位はピクセルです。

3Dカメラを用いない Scene では、Scene とワールド座標の関係は変えられません。固定です。

ローカル座標

Scene のルートコンテナに登録された個々のノード(コントロールやコンテナや図形)は、 自身のローカル座標を持ちます。

例えば、2次元図形の Rectangle は矩形の左上の座標をプロパティ x, y に保持しますが これはローカル座標です。

3次元図形の Box(箱型) や Sphere(球) はその中心が常に座標 (0, 0) になりますが、 (0、0) はローカル座標です。つまり3次元図形は自身のローカル座標の中を動くことができません。

ローカル座標は親ノードのローカル座標の中に置かれます。初期状態では親ノードのローカル座標と ノードのローカル座標は一致しています。つまり、ノードにTransform(変換)が無く、 layoutX, layoutYプロパティもゼロのままならば、子ノードと親ノードのローカル座標系は一致します。

つまりノード自身、およびSceneに至るまでの全ての直系の親ノードに Transform(変換)が無く、 layoutX, layoutYプロパティもゼロのままならば、ローカル座標はグローバル座標と一致します。

JavaFxではローカル座標系は図形に固定された座標系ととらえ、 ワールド座標系での図形の位置は、ワールド座標に対するローカル座標を変更する ことで行います。

つまり JavaFX のノード Transform(変換)+layoutX+LayoutY とはノードのグローバル座標に対する ローカル座標を決定することなのです。

鋭意作成中