「JavaFXの座標系と座標変換」の版間の差分
(→ローカル座標) |
(→ローカル座標) |
||
27行: | 27行: | ||
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 とはノードのグローバル座標に対する | ||
+ | ローカル座標を決定すること'''なのです。 | ||
'''鋭意作成中''' | '''鋭意作成中''' |
2016年3月26日 (土) 00:47時点における版
メインページ>コンピュータの部屋#JavaFX>JavaFX Tips
JavaFXに関してたくさんの解説がネットや書籍に載っていますが、意外なことに
JavaFXの座標系に関する解説が少ないようです。
この記事では JavaFx の座標系と、座標変換に関して解説します。
JavaFXの座標系
まず、JavaFxで使用されているワールド座標を示します。 ワールド座標とは、JavaFXのコントロールや図形が置かれる 座標空間です。
![]() |
図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 とはノードのグローバル座標に対する ローカル座標を決定することなのです。
鋭意作成中