※当サイトの記事には、広告・プロモーションが含まれます。

java.awt.geomパッケージのAPIを目にする機会が訪れたので調べてみた

gigazine.net

k-tai.watch.impress.co.jp

⇧ 標準化でソフトウェア開発とかの負担も減ってくれると良いのだけど...

技術革新で便利になるのは、大いにWelcomeなのだけど、

news.yahoo.co.jp

news.yahoo.co.jp

⇧ 自身の生命を脅かしかねないサービスの利用には注意が必要ですな。

何て言うか、アメリカって訴訟大国な気がするのに、リスクマネジメントが杜撰なのって何なんでしょうね...

まぁ、諸悪の根源は、崩落した橋に立ち入れるように放置していた企業だと思うので、Google Mapを悪者にしないで欲しい気はする...

Google Mapの更新対応できるのに対応してなかったのならGoogleにも落ち度はあると思うけど...

java.awt.geomパッケージのAPIを目にする機会が訪れたので調べてみた

Oracleの公式のAPIドキュメントによりますと、

docs.oracle.com

2次元幾何学的図形に関連するオブジェクトで処理を定義および実行するJava 2Dクラスを提供します。このパッケージの主な内容を次に示します。
  • 幾何学的図形を操作するためのクラス。すべてのShapeオブジェクトが実装するAffineTransformインタフェースおよびPathIteratorインタフェースなど。
  • Shapeインタフェースを実装するクラス。CubicCurve2D、Ellipse2D、Line2D、Rectangle2D、およびGeneralShapeなど。
  • ほかのShapeオブジェクトでadd (union)、subtract、intersect、およびexclusiveORの各オペレーションのメカニズムを提供するAreaクラス。

https://docs.oracle.com/javase/jp/8/docs/api/java/awt/geom/package-summary.html

⇧ ということで、2次元の幾何学的図形を扱うためのAPIをまとめたパッケージということらしい、2D(Two-Dimensional)の幾何学的図形を扱えると。

Javaのバージョン1.2で導入されてるということは、

⇧ 1998年から利用できたということかね?

と言うか、

Code Names

Code names were used for early Java releases; the Major releases were named after birds or mammals, while the minor releases were named after insects (given they were bug-fix releases). Hopper was short for grasshopper and ladybird is the British name used for a ladybug. The 1.2 release was called "Playground" by some, but that was never an official or broadly-used code name. The practice of naming releases ended with JDK 7.

https://www.java.com/releases/

Java 7までコードネームが存在していたという事実に衝撃...

Javaを昔から利用してきた人にとってはあるあるなのかも知らんけど。

そして、2023年9月23日(土)時点で、JDK 21がリリースされており、

www.infoq.com

⇧ 今時の認識では、最早、Java 8以下のバージョンは無かったことにされてるような扱いなんだけど...

ちなみに、Javaで、3D(Three-Dimensional)の幾何学的図形を扱いたい場合は、

www.oracle.com

docs.oracle.com

THIS document describes the Java 3D API and presents some details on the implementation of the API

https://docs.oracle.com/cd/E17802_01/j2se/javase/technologies/desktop/java3d/forDevelopers/j3dguide/preface.doc.html#48128

⇧ 別途、ダウンロードが必要らしい。

ただ、JavaFXの説明で3D(Three-Dimensional)のグラフィックが扱えると言っており、

docs.oracle.com

JDK 8には、3Dグラフィックス機能を含むJavaFX APIが含まれています。

https://docs.oracle.com/javase/jp/8/javafx/graphics-tutorial/overview-3d.htm#CJAHFAHJ

Javaのバージョン8以上であれば、Javaに同梱されてるらしい。

stackoverflowによりますと、

stackoverflow.com

Javaの標準APIで3D(Three-Dimensional)を扱うなら、Java 3D APIよりかはJavaFXを使っておいた方が良さ気ではあるけど、そもそも、サードパーティ製のライブラリを代替案として言及してるあたりから察するに、Javaで3D(Three-Dimensional)を扱う標準のAPIが貧弱ってことなんですかね?

Oracleさんの公開しているJava SEの構成を見てみても、

www.oracle.com

⇧ そもそも3D(Three-Dimensional)を扱うAPIについて言及が無いっぽい...

脱線しましたが、「java.awt.geomパッケージ」のAPIは、2D(Two-Dimensional)の幾何学的図形を扱えるということで、試しに、「java.awt.geomパッケージ」に含まれるAPIを1つ確認してみる。

docs.oracle.com

⇧ 上記のRetangle2D.Doubleというクラスには、フィールドとして、

  1. 高さ
  2. X座標
  3. Y座標

の4つが用意されている。

いまいち、どういう用途を想定しているのかがハッキリしないのだけど、「java.awt.geomパッケージ」という名前の「geom」は、おそらく「geometory」の省略だろうと当たりを付けると、「地理空間情報」に関するデータを扱うことを想定しているんではなかろうかと、推測の域を出ないのですが...。

例えば、

www.jodc.go.jp

⇧ 上図のような長方形の集合体を描画するにあたって、java.awt.geom.Retangle2D.Doubleクラスのフィールドは、

  1. 高さ
  2. X座標
  3. Y座標

の情報を保持できるので、

Retangle2D.Doubleクラスのフィールド 長方形の描画に必要と思われる情報
高さ 縦幅
横幅
X座標 経度
Y座標 緯度

という感じでマッチしているのではなかろうか、まぁ、長方形の描画に必要な情報が推測になってしまうので何とも言えんけど...

あと、描画する長方形の数が多い場合に、OOME(OutOfMemoryError)が引き起こされないかという懸念はありますが...

ちなみに、「地理空間情報」を扱うシステム「地理情報システム(GIS:Geographic Information System)」の歴史によると、

club.informatix.co.jp

GISの概念を最初に形にしたのは、「GISの父」と呼ばれるカナダのロジャー・トムリンソンです。

GISの歴史|ロジャー・トムリンソンによるGISの誕生と発展 - 空間情報クラブ|インフォマティクス運営のWebメディア

彼が1968年に書いた論文のタイトルは『A Geographic Information System for Regional Planning』(地域計画のための地理情報システム)とあり、GISが地理情報システムを示す言葉として初めて明確に使われた例だと考えられます。

GISの歴史|ロジャー・トムリンソンによるGISの誕生と発展 - 空間情報クラブ|インフォマティクス運営のWebメディア

⇧ 1986年に、GISの構想は出てきていたようですが、

トムリンソンのアイデアはさまざまな所で共感を呼び、カナダ政府や大手システム会社と協力してGISを構築しました。

しかし、当時最新のコンピュータを使っても処理速度やメモリ不足からGISは動作しませんでした。

GISの歴史|ロジャー・トムリンソンによるGISの誕生と発展 - 空間情報クラブ|インフォマティクス運営のWebメディア

1970年代もまだGISが本格的には動作しない時代でしたが、関連する動きが増えていきます。

GISの歴史|ロジャー・トムリンソンによるGISの誕生と発展 - 空間情報クラブ|インフォマティクス運営のWebメディア

⇧ メモリの問題で、実用に至るまでに12年ほど歳月を要したそうな。

パソコンの性能が上がってきているとは言え、

www.esrij.com

同グループで開発したJAGURSと呼ばれる高速津波コードにパラメータをセットし理化学研究所スパコン「京」で解析し、数十ギガバイトに及ぶ解析結果をArcGIS for Desktopで3Dアニメーションに変換している。解析するエリアの大きさにもよるが、転送されて来た解析結果を20ギガバイト程度に分割し処理している。同研究機構がスパコン地球シミュレーター」を保有、運用していることは有名だが、今回は何故「京」で解析を行っているのだろうか?「JAMSTEC文科省の定めるHPCI(High Performance Computing Infrastructure)戦略プログラムの分野3 防災・減災に資する地球変動予測に参画しているので「京」が使えるんです。」

スーパーコンピューター「京」で解析した津波シミュレーションをアニメーションにより可視化 | ESRIジャパン

「ES(Earth Simulator:地球シミュレー ター)でも勿論解析は可能で、災害時にはどちらかがダウンすることもあり得ますので両方でできるように開発をすすめています。」 国家レベルの最重点課題の1つである防災・減災に国内最高レベルのインフラが投入されているわけだ。さぞや快適な環境かと思えるが課題もある。「計算は速いんです。1.5時間ぐらいで被災予想全域の詳細なシミュレーションが完了するんですが、何せデータが大きいので、転送に1日、可視化に1.5日要します。」PCが「京」の出力についていけないのだ。「ArcGISは市販のソフトとしての視覚化機能は素晴らしいし、集積した GISデータを今後の研究に発展させることができる部分もCGとは比べものになりません。」同機構には可視化専門チームが存在し今回の津波到達モデルもCGモデル化されている。しかし、可視化の専門家の数は限られている。ArcGIS for Desktopで安価に、可視化専門チームの手を煩わせること無くわかり易い3Dアニメーションモデルを制作した意図はここにある。

スーパーコンピューター「京」で解析した津波シミュレーションをアニメーションにより可視化 | ESRIジャパン

スーパーコンピューターで計算処理とかしてるような感じではあるそうな。

分散処理とかで計算できる処理なのであれば、

liginc.co.jp

ボランティアコンピューティング(以下VC)とは、がんやHIVといった難病の解明、気候の解析、天文学の研究など、多くの計算リソースを必要とする科学の研究へ、誰もが参加することができる社会貢献活動のことです。

スーパーコンピューター「京」で解析した津波シミュレーションをアニメーションにより可視化 | ESRIジャパン

複雑なデータを高速に解析するには、高価なスーパーコンピューターが必要です。しかし、分散コンピューティング(=複数台のコンピューターを束ねて1つの大きな問題に取り組むための技術)の仕組みを使うことで、世界中のPCの余った計算能力を集めて、スーパーコンピューターに匹敵する計算速度を安価に実現できます。

スーパーコンピューター「京」で解析した津波シミュレーションをアニメーションにより可視化 | ESRIジャパン

⇧「ボランティアコンピューティング」という手法があるようです。

まぁ、何が言いたいかと言うと、プログラミングで解決できないこともあるっていうことですかね。

コンピューティングリソースに頼らざるを得ないこともあり、お金で解決するしか無いってこともあるのが現代社会の技術力の限界といった感じですかね...

ソフトウェア開発者の目線で発言すると、潤沢なメモリを搭載していてCPUの処理性能にも優れたマシンを使わせてくれと。

でなければ、省メモリで処理できる計算アルゴリズムを組める理系の知見のあるエンジニアを招聘してください、と言いたい。

そもそも、「スパコンスーパーコンピューター)」で処理させてるようなことを、アルゴリズムでどうにかできるのかは分からんけど...

毎度モヤモヤ感が半端ない...

今回はこのへんで。