2022年1月18日 (火)

海上輸送の[脱CO2]の問題

いま、とても気になってることがある。海上輸送の[脱CO2]の問題だ。

後に述べるように、海上輸送の[脱CO2]は、なんとかして実現できるだろう、とは思うが、しかし、その結果、日本と海外との貨物輸送量は、大きく減少する(せざるをえない)のでは、と、懸念しているのだ。

小麦、大豆、鉄鉱石など、いま、海外から輸入しているモノの海上輸送の量が、大きく減少するならば、いったい、どうなるか?

 パンや豆腐の生産量が、減少するのでは、ないだろうか。
 電車や電気自動車(それらは、鉄を使って作られている)の生産量が、減少するのでは、ないだろうか。
 洗濯機、冷蔵庫、エアコン(それらは、鉄を使って作られている)の生産量が、減少するのでは、ないだろうか。

海上輸送の[脱CO2]に関しては、様々な方法が研究されているようだが、以下に述べるような問題があるようだ。なので、それが実現できたとしても、現在のような海上輸送量を維持できるかどうか、とても懸念される。

アンモニア使用 アンモニアを燃やして船のタービンを回し、スクリューを回し、という方法。大量のアンモニアを燃焼して、出てきた大量の窒素酸化物を、どのようにシマツするのか、という問題がある。海上を走りながら、海の中に、それを捨てていき、というようなこと、実現可能なんだろうか?

水素使用 水素を燃やして船のタービンを回し、スクリューを回し、という方法。大量の水素を燃焼して、出てきた大量の水蒸気を、大気中に出しても、だいじょうぶなんだろうか? 地球環境に影響はないのだろうか?

バイオマス燃料使用 バイオマス燃料を燃やして船のタービンを回し、スクリューを回し、という方法。バイオマス燃料に対しては、航空会社や電力会社も、関心を持っているようだ。大量のバイオマス燃料の需要が発生した結果、日本中の森から木が無くなってしまい、なんてことに、ならないだろうか。そうなってしまったら、もう、森からバイオマス燃料を得ることが、できなくなってしまう。

風力使用 船の上に巨大な風車(発電用の)を建てることはムリだろうから、昔ながらの帆船で、ということになる。様々な帆が、研究されているようなので、大航海時代に逆戻り、とまではならないだろう。

 

2021年7月10日 (土)

埋もれた地蔵


1. 要約

ここでは、以下のような私の仮説を、述べている。

(1)京都市内・[祇園]エリアの[白川]ぞいにある[なすあり地蔵](付近の川底から発掘されたという)は、その場所より上流のどこかに、建てられた石像であろう。

(2)その地蔵菩薩像は、[白川]の水害によって亡くなった方々を慰霊する目的で、その場所に建てられた。

(3)地蔵菩薩像・建立の後、[白川]の流域に大量の降雨があった際に、[白川]は激流となり、その地蔵菩薩像は、流れの中に水没し、その激流によって、現在ある場所([なすあり橋]付近)にまで、移動してきた。

かつて、私は、京都市内の白川流域に、徒歩や自転車で行ける場所に住んでいたので、白川に関する様々な事について調べることができる状態にあったから、上記仮説を検証するための様々な調査を手軽に行えた。しかし、その後、京都市を離れたので、そのような調査を続行することが不可能となった。

これを読まれた方々の中に、白川について関心を持たれる方がおられるならば、よろしければ、この仮説について、更に調べていただけたならば、幸いである。

================================

2. [なすあり地蔵]

京都市の[祇園]エリアの[白川]べりは、国内や海外からの多くの人々で、にぎわう場所である。特に、春のサクラ開花シーズンには、[巽橋](たつみばし)、[大和橋](やまとばし)のあたりには、おおぜいの方々がこられる。

そこから少し、白川の流れを遡って行った所に、[有済橋](なすありはし)という橋がある。この上を歩きながら川の上に開いたサクラの花を見れる、という橋である。

写真1

P1

 

この橋の近くに、[なすあり地蔵]という地蔵菩薩・像がまつられている。

1954年に、この付近で水道管敷設工事が行われた際に、この白川の川底から地蔵が発掘された、それが、この、[なすあり地蔵]なのだそうだ。

いったいなぜ、このお地蔵様は、川の底におられたのだろうか?

地蔵の像を作った直後に、誰かがそれを川の底に埋めて、他の人々には見えなくしてしまう、というような事は、極めて想像しにくい。だから、この地蔵を白川のこの場所の川底に埋めたのは、人間以外のなにものかであろう。

いったい、どこのなにものが、どのようなわけで、この[なすあり地蔵]を、この場所、[有済橋]の近くに埋めたのだろう?

私は、以下のような仮説を考えてみた。

 [どこのなにもの] = 白川
 [どのようなわけで] = 大量の流水によって運び
 
すなわち、

(1)過去のいつかの時 ([時T1]とこれを呼ぶ) に、白川ぞいのどこかの場所 ([場所P1]とこれを呼ぶ) に、一つの地蔵菩薩・石像([石像S]とこれを呼ぶ)が建立された。その建立の目的は、白川の水害によって亡くなった人々への慰霊のためであった。

(2)その石像が建立された後の、過去のいつかの時 ([時T2]とこれを呼ぶ) に、大量の降雨が発生し、その結果、大量の流水が白川を流れた。

(3)その流水は、[石像S]を、[場所P1]から[有済橋]の近くのある場所([場所P2])へ移動させた。それと時を同じくして、[石像S]の上に土砂が堆積したので、[石像S]を、人間の目が見ることは不可能になってしまった。

(4)1954年に行われた水道工事によって、[石像S]の上に堆積していた土砂が除去され、[石像S]が再び、人間の目が見ることができる状態になった。地域の人々は、この石像を、[なすあり地蔵]と名付け、[場所P2]において、まつることにした。

上記を説明するために、ここから以降、以下の順で述べていくことにする。

 白川の流路を見ていくと、奇妙な場所が目につく
 過去にあった白川の水害
 石像は、どこから?
 慰霊と地蔵

================================

2. 白川の流路を見ていくと、奇妙な場所が目につく

この章では、下記のコンテンツをもとに、説明する。

===================
[コンテンツ 2-1] [京都大学埋蔵文化財調査報告 第2章 北白川追分町遺跡の堆積環境の変遷 石田 志朗, 竹村 恵二]

 [北白川追分町遺跡の堆積環境の変遷]等のキーワードを使用してネット検索することにより、上記のコンテンツにアクセスすることが、可能であるかもしれない。

----------

[コンテンツ 2-2] [祇園白川地区における都市形成と白川・琵琶湖疎水の役割に関する史的研究 田中 尚人, 川崎 雅史 土木学会論文集 No.681/IV-52 2001年7月,77-86]

 [祇園白川地区における都市形成と白川・琵琶湖疎水の役割に関する史的研究]等のキーワードを使用してネット検索することにより、上記のコンテンツにアクセスすることが、可能であるかもしれない。

----------
 
[コンテンツ 2-3] [近代京都オーバーレイマップ]

 これは、[立命館大学 アートリサーチセンター]のサイトの中にある。 [立命館大学 アートリサーチセンター 近代京都オーバーレイマップ]等のキーワードを使用してネット検索することにより、上記のコンテンツにアクセスすることが、可能であるかもしれない。

----------
 
[コンテンツ 2-4] [花洛名勝図会 元治元年 平塚瓢齋 著]

 [国際日本文化研究センター]のサイトの中に、[花洛名勝図会]の画像が掲載されている。
 
 [国際日本文化研究センター 花洛名勝図会]等のキーワードを使用してネット検索することにより、上記のコンテンツにアクセスすることがアクセスすることが、可能であるかもしれない。

===================

まず、現在の白川の流路はどのようになっているのか、を見てみよう。

[地理院地図]で、[京都市 左京区 北白川仕伏町]と入力して検索すると、[北白川仕伏町]付近の場所が表示されるだろう。白川は、その付近を流れている。

そのあたりが、比叡山と京都盆地との境目にあたる場所であり、地形的に見ると、扇状地になっている。

[コンテンツ 2-1] 中には、以下のようにある。

========
1 白川扇状地の形成

「白川扇状地は 北白川仕伏町の市バス終点付近を扇頂 とし,北白川,田中,吉田,岡崎, 聖護院一帯にひろがる ( 図 112) 。 」
========

[京都市 左京区 北白川仕伏町]の付近から、[地理院地図]、あるいは、ネット地図を使用して、白川の流路を下流方向にたどっていくと、流路が奇妙な変わり方をしている場所が数か所、目につくだろう。

第1ポイント 北白川仕伏町

その上流からの流れに自然に従ったならば、白川は、そこから西方向へ流れていくものと思われるのだが、なぜか、ここで、南西方向に流路が変わっている。川の水が流れていく先は、鹿ケ谷、これは、東山と吉田山との間にある谷である。

第2ポイント 京都市動物園

鹿ケ谷を経由して、岡崎エリアに到達した後、京都市動物園の付近で、白川の流路は、西方向へと激変する、そこから先は、西方へまっすぐ。明らかに、人工の流路である。

第3ポイント 京都国立近代美術館

白川の流路は、この付近でいきなり、真南へと変わる。

第4ポイント 京都華頂大学

白川の流路は、この付近でいきなり、南西から西へと変わる。

第5ポイント 西之町

白川の流路は、この付近でいきなり、西から南へと変わる。

[なすあり地蔵]があるのは、このあたりである。

第6ポイント 元吉町

白川の流路は、この付近でいきなり、南から西南西へと変わる。

このあたりが、観光名所の[巽橋]がある場所だ。ネット地図で[京都市 東山区 元吉町]で表示してみたら、それを確認できるかもしれない。

------------

上記のうち、

 第4ポイント 京都華頂大学
 第5ポイント 西之町
 第6ポイント 元吉町

での、流路のいきなりの変化に関して、[コンテンツ 2-2]においては、

 17世紀後半以降の、白川沿いの地域の開発において、このように流路が設定されたであろう
 
と、している。

[コンテンツ 2-2] 79P には、以下のようにある。

========
「この都市内水路網と不自然に屈曲した白川のネットワーク化により、生活や防災に必要不可欠な水を通常の河川下流日部より長く滞留させることが可能になったと考えられる。」
========

------------

 第2ポイント 京都市動物園
 第3ポイント 京都国立近代美術館

この場所での流路の変化の原因は、明治時代の[琵琶湖疎水]の開削によるものであり、[コンテンツ 2-2] 80P ~ 81P の

 3. 近代の都市形成と琵琶湖疎水の役割
  (1)琵琶湖疎水建設と白川の治水
    b) 白川の流路変更

に詳しく述べられている。

[コンテンツ 2-3] の中の

 [明治25年(仮製図)[1892]]

を選択すると、琵琶湖疎水が建設されるよりも前の段階での、白川の流路を見ることができる。

このコンテンツは、スライダーを調整することにより、現代の地図と古地図とを重ね合わせてみることができる、とても優れたものである。

上記の地図によれば、当時の白川は、[無鄰菴]の北側から西南西方向に流れていたようである。

なお、この時代の白川の流路の痕跡かもしれないような、細い水路が現在も存在することが、現代の地図との重ね合わせにより分かる。[無鄰菴]付近から[瓢亭](料亭)の前を通る道を歩いていくと、その痕跡らしきものを見ることができるだろう。

なお、この地図でみると、この時代、岡崎エリアは、田園地帯であったようだ。平安神宮は未だ存在していない。

 [京都市 上下水道局 琵琶湖疏水のご紹介] には、

 琵琶湖疎水の着工は、明治18(1885)年
 完成は、明治23(1890)年

とあるのだが、上記の[明治25年(仮製図)[1892]]には、なぜか、琵琶湖疎水が書き込まれていない。

[コンテンツ 2-4] 図絵 中の、[東山之部 二]の中に、江戸時代末期の段階での、[南禅寺]の付近の様子が描かれている絵がある。

(年号[元治]を西暦に変換すると、1864年~1865年。[大政奉還]があったのは、1867年。)

以上で、「流路が奇妙な変わり方をしている場所」6か所のうち、5か所までの説明を終えた。残る1か所、すなわち、[第1ポイント 北白川仕伏町]については、次章で述べる。

================================

3. 過去にあった白川の水害

この章では、下記のコンテンツをもとに、説明する。

===================

[コンテンツ 3-1] [京都白川の弥生時代前期末の土石流 冨井 眞 京都大学構内遺跡調査研究年報 The Annual Report of the Center for Archaeological Operations (2005), 2000: 225-262]

 [京都白川の弥生時代前期末の土石流]等のキーワードを使用してネット検索することにより、上記のコンテンツにアクセスすることが、可能であるかもしれない。

----------

[コンテンツ 3-2] [祇園白川地区における都市形成と白川・琵琶湖疎水の役割に関する史的研究 田中 尚人, 川崎 雅史 土木学会論文集 No.681/IV-52 2001年7月,77-86]

 [祇園白川地区における都市形成と白川・琵琶湖疎水の役割に関する史的研究]等のキーワードを使用してネット検索することにより、上記のコンテンツにアクセスすることが、可能であるかもしれない。

----------
 
[コンテンツ 3-3] [明治以前日本水害史年表 高木 勇夫 慶應義塾大学学術情報リポジトリ]

 [明治以前日本水害史年表 慶應義塾大学]等のキーワードを使用してネット検索することにより、上記のコンテンツにアクセスすることが、可能であるかもしれない。

----------

[コンテンツ 3-4] [立命館地理学 第25号(2013)47-65 白河法皇の怒りと歎き―歴史地理学から「天下三不如意」の深層に迫る 片平 博文]

 [白河法皇の怒りと歎き 立命館地理学]等のキーワードを使用してネット検索することにより、上記のコンテンツにアクセスすることが、可能であるかもしれない。

----------
 
[コンテンツ 3-5] [京都歴史災害年表 赤石 直美, 塚本 章宏, 麻生 将, 荒木 まみ, 飯田 将悟, 大塚 夏子, 小畑 貴博, 北 利史, 柴山 礼子, 福島 康之, 藤野 真挙, 森田 美晴, 片平 博文, 吉越 昭久 京都歴史災害研究第6号]

 これは、[立命館大学 歴史都市防災研究所]のサイトの中にある。 [立命館大学 歴史都市防災研究所 京都歴史災害年表]等のキーワードを使用してネット検索することにより、上記のコンテンツにアクセスすることが、可能であるかもしれない。

===================

[コンテンツ 3-1]によれば、

 京都大学の吉田キャンパスには、先史時代に堆積した黄褐色の厚い砂層がある。それは、白川の流域(京都大学よりも上流の方の)から、土石流によって運ばれてきた、と考えられている。

 その砂層のすぐ下に、 弥生時代前期末の水田が見つかった。

のだそうだ。

これが、白川の流域で起こった、現在、我々が知りうる限りでの最古の水害・土砂災害の痕跡、といえるのだろう。

(もしかしたら、これは、日本列島中の、日本史上最古の水害・土砂災害の痕跡なのかも)。

この「白川土石流」によって、白川の流路が、第1ポイント:北白川仕伏町 において、西から南へ変わった、という事も考えうるであろう。

一方、我々が生きている今の時代に最も近い過去に起こった、白川の流域での水害・土砂災害はというと、1935年の[鴨川大洪水]ということになるようだ。

この時には、鴨川流域だけではなく、白川流域にも、水害被害があったという。

[コンテンツ 3-2] 83p の
 現代に至る白川・琵琶湖疎水の役割
  (1) 鴨川大洪水概要
   b)鴨川運河・白川流域の被害
     図-15

によれば、前記 2.章に設定した、白川の流路上の6個の地点のうち、

 第4ポイント:京都華頂大学
 第5ポイント:西之町
 第6ポイント:元吉町

の付近では、流域の被害なし

 第1ポイント:北白川仕伏町 と 第2ポイント:京都市動物園 の間においては、「被害多数」とある。
 
弥生時代に土石流が起こって以降、1935年の鴨川大水害に至るまでの間、白川流域においては、多くの水害被害があったようである。

[コンテンツ 3-2] 77P - 86P には、それまでは、白川の支流であった「小川」が本流になる、というような事があったと記されている。

[コンテンツ 3-3] 中の、1807 ( 文化4 ) の項には、

 「京都白川筋悲田院辺より切込ミ二条ニては白川加茂川ひとつニ成」
 
とある。

(河原町御池下がる 河原町通りの西面の一角に、この地が悲田院跡であることを記す説明が設置されている。)

[コンテンツ 3-4] 中の(49P)、[第1表 おおよその浸水地域が把握できる洪水(10 ~ 14 世紀)]には、

 「延長七 七月二十六日左京と左岸の白河辺」
 
とある。 

[コンテンツ 3-5] にも、白川流域での水害を示す記述が以下のようにある。

929年 「白河ノ人民多以溺死」

1578年 「浄土寺之者於山中路流死、白川在家廿間計流損」

1583年 「悉皆自白川其沙汰了」

1615年 「白川ノ水見物、京宿坊ノ門前道人渡カネタル時也」

================================

4. 石像は、どこから?

上記に見たように、弥生時代以降、[白川]の流域においては、水害が多く起こっていた。よって、白川沿岸の[場所P1]に建立された[石像S]が、暴流によって、[場所P2]にまで流された、という事は、十分、考えうるのである。

(1)過去のいつかの時 ([時T1]とこれを呼ぶ) に、[白川]ぞいのどこかの場所 ([場所P1]とこれを呼ぶ) に、一つの[地蔵菩薩]・石像([石像S]とこれを呼ぶ)が建立された。その建立の目的は、[白川]の水害によって亡くなった人々への慰霊のためであった。

(2)その石像が建立された後の、過去のいつかの時 ([時T2]とこれを呼ぶ) に、大量の降雨が発生し、その結果、大量の流水が[白川]を流れた。

(3)その流水は、[石像S]を、[場所P1]から[有済橋]の近くのある場所([場所P2])へ移動させた。それと時を同じくして、[石像S]の上に土砂が堆積したので、[石像S]を、人間の目が見ることは不可能になってしまった。

(4)1954年に行われた水道工事によって、[石像S]の上に堆積していた土砂が除去され、[石像S]が再び、人間の目が見ることができる状態になった。地域の人々は、この石像を[なすあり地蔵]と名付け、[場所P2]でまつることにした。

では、[石像S]がもとあった場所、すなわち、[場所P1]は、どこなのか?

川の流れと逆方向に移動する、ということは、極めて考えにくい。

膨大な水が[鴨川]を流れることにより、[鴨川]と[白川]の合流地点から水流が逆流して、[白川]を遡り、という事も、想定できないでもないのだが、そのような事態は、極めて想定しがたい。

ということで、[場所P1]は、[場所P2](現在ある場所、[有済橋]の近く)よりも上流のどこか、であろうと、私は考える。

[有済橋]の近くであったとも、考えにくい。もしも、橋の近くにあったのであれば、

 「えらいこっちゃ! あのお地蔵さん、どっかへ行ってしまわはった!」

ということで、人々は、すぐに捜索を開始し、地蔵を探し当てたであろうから。

[石像S]の重量と、その時の[白川]の水量、流れるスピード等を推定して計算してみたら、上流のどこのあたりからやってきたのか、ということを割り出すことも、可能なのかもしれないが、これを行うには、その方面の知識と経験を豊富に有する人が、高速コンピューターを駆使してでないと、できないだろう。

[石像S]が元あった場所は、[白川]の川辺なのか、それとも、相当、川岸から離れた所だったのか? それも、問題になるのだが、そこまでは、割り出しようがないと思われる。

ただし、この調査の手掛かりとなるかもしれない石像群が、[白川]流域に2か所、あることが分かったので、以下にこれを述べておこう。

琵琶湖疎水記念館・南方

琵琶湖疎水記念館の南の方、琵琶湖疎水の上にかかる橋の南東側に、石像群がある。そこにお参りしておられる方に、その石像について聞いてみたら、「琵琶湖疎水の掘削工事の際に、地中からでてきたらしいのだが、詳しいことは知らないので、琵琶湖疎水記念館事務所に聞いてみたら」と、教えてくださった。そのうち、事務所に行って聞いてみようと、思っているうちに、京都から離れることになってしまい、未だに、残念ながら聞けていない。

(桜の開花シーズンに、この橋から眺めるインクラインは、絶景である。)

京都天王町郵便局・北西

ここにも、石像群があるが、由来等については、調べれていない。現在の[白川]の河道から少し隔たった場所にあるが、もしかしたら、この場所の近くに河道があった時期も、あるのかもしれない。

================================

5. 慰霊と地蔵

この章では、下記のコンテンツをもとに、説明する。

===================

[コンテンツ 5-1] [吉野川の語り部地蔵 高地蔵探訪 ガイドブック]

 これは、[国土交通省 四国地方整備局 徳島河川国道事務所]のサイトの中にある。 [吉野川の語り部地蔵 高地蔵探訪 INDEX 徳島河川国道事務所]等のキーワードを使用してネット検索することにより、上記のコンテンツにアクセスすることが、可能であるかもしれない。
 
------------------

[石像S]、すなわち、[なすあり地蔵]が建てられた、その目的は、何だったのだろう?

もしも、[なすあり地蔵]が元あった場所が、[白川]の川べりであったとするならば、地蔵を建立した目的をうかがい知ることができると思う。

徳島県の[吉野川]の流域には、[高地蔵]と呼ばれる地蔵像が多数存在するという。

[コンテンツ 5-1]によれば、それらの[高地蔵]のうちの、下記の地蔵は、その建立の目的が、水死した人々への慰霊であるという。

 高川原の地蔵、乙瀬中田の地蔵、川島の浜の地蔵、東覚円の南の地蔵

[吉野川]では、洪水被害が多くあったという、なので、ここでの「水死」とは、洪水、あるいは、降雨による土砂災害による死、と考えてよいだろう。

上記とは別の形の水死の犠牲者に対する供養の為に、地蔵を建立した、という事例は、[地蔵 水難]のキーワードでネット検索してみたら、様々に見つかった。下記にその例をあげる。

 地蔵庵:宮崎県 宮崎市 青島
 青部村川地蔵(延命地蔵尊):静岡県 榛原郡 川根本町
 浜のお地蔵さん:愛媛県 今治市 喜田村

上記の3例の全てに、地蔵を建立した理由だけではなく、地蔵を建立したその後、どうなったか、ということが述べられている。いわく、「その後、水難事故が起こらなくなった」と。

[地蔵菩薩]がもたらす利益(りやく)には、二十八種があり、その中に、

 離水火災(水難や火災を免れる)
 
というのが、あるのだそうだ。 

水難者に関係のある場所に地蔵を建立する目的は、下記の2つがあるのだろう。

 (1)水難者への供養のため
 (2)近隣の人々の水難防止のため
 
水難者への供養のために、いったいなぜ、地蔵像を建立するのだろう? 薬師如来や観音菩薩の像ではなく。

それは、[地蔵菩薩(Kṣitigarbha)]が、[六道界](地獄、餓鬼、畜生、修羅、人、天)の全てにおもむいて、死後、そこに行ってしまった人々を救出する、との信仰があるからだろう。

水死した後に、[六道]ではない世界、(菩薩界、仏界等)に行けた人は、幸せ、でも、そうでない人々は、何とかしてあげなければ、その為に、

 「お地蔵様の像を建て、お地蔵様に[六道]へ行っていただき、それらの人々を救い上げていただこう、同時に、我々からの供養を、お地蔵様に託し、それらの人々のもとへ届けていただこう」

という心であろう。

仏教界には、[七分獲一]という言葉がある。

A(生きている人)からB(亡くなった人)へ、供養を施したならば、Bは、その供養のうちの1/7だけを受け取り、残りの6/7は、Aにリターンされてくるのだという。

上記の場合においては、

 A 建立された地蔵の付近に住み、その地蔵に祈り・供養(Bへの)をささげる人々
 B 水死した人々

という構図となる。

AからBへささげられた祈りと供養のうちの6/7が、Aにリターンされてくる。その結果、Aは水難の危険から救われる。

という構図なのであろう。

もしかしたら、[なすあり地蔵]も、上記と同様に、[白川]の水害で亡くなった人々への祈りと供養をたむけるために、[白川]の川辺に建立されたのであったのかもしれない。

それが、[白川]の洪水によって流され、[なすあり橋]のあたりまでやってきたのではないだろうか。

そして、水道工事によってふたたび、この世に現れ、[なすあり橋]周辺の人々が祈りささげる存在となったのではないだろうか。

[なすあり地蔵]と、[なすあり橋]付近の住民の方々は、このような不可思議な因縁の糸によって、結ばれているのであろう。

2020年8月 3日 (月)

[美]とは、いったい、何なのか? What, exactly, is [beauty]?

1 [美の感じ]の源泉は、いったい、どこにある?
1 Where is the source of [feeling of beauty]?

(in Japanese) まずは、下記の写真(私が撮影した写真です)をご覧ください。そして、この写真を見て、あなたが、「きれいな写真だなぁ」と感じたと、仮定してみてください。

「とても、きれいだとは思えないなぁ」と、思われたのであれば、[きれいな写真だなぁ、と感じたフリ]を、してください。そうしていただかないと、ここから先に、話を進めることができないので。

この話を読み了えられた瞬間、「でも、やっぱり、きれいじゃぁないよなぁ」というように、そのフリをするのを、そこでストップしていただければと、思います。
-----
(in English) First, please look at the photo below ( that was taken by me ). Then, please suppose that, you looked at this picture and thought, "It is a beautiful picture".

If you think, "I don't think, it is beautiful", please pretend that, you think it is a beautiful picture. If you don't do so, I can't move forward from here.

When you finish reading this story, please stop pretending, and say, "But, it's not beautiful after all."

写真 photo

P6_20200803113801

--------------------
(in Japanese) さて、この写真画像を見て、あなたが、「きれいな写真だなぁ」と感じておられる(おられた)時、あなたの心の中には、[美の感じ]、すなわち、[「自分は、美しいものを見ている!」感]が、湧出している(していた)と、思われます。(注1)

その、湧出した[美の感じ]、その[美の感じ]の[源泉]は、いったい、どこにあるのでしょう?

私が思うに、その[源泉]は、この写真画像の中には、ないでしょう。別のどこかに、それはあると、思われます。
-----
(in English) Now, when you are looking at this photographic image, and you are feeling, "It is a beautiful picture", in your mind, a [feeling of beauty], ( that is , [feeling of "I'm looking at something beautiful!"]) must have been springing out.

Where is the source of that springing [feeling of beauty]?

I think, the [source] does not exist in this photo image. In somewhere else, it must be existing.(Note1)
--------------------
(in Japanese) 「写真画像を見て」と言ってみても、それは単なる、[言語表現においての一種の省力化]でしかありません。「あなたが、この写真画像を見て」と言う表現は、以下の一連の現象を表現しているのです。

現象1 あなたの網膜に、ある[電磁波の集合]が到達した。その電磁波の集合は、ディスプレイが放出したものである。
現象2 その電磁波の集合を受信した網膜は、あなたの脳に、[信号]を送信した。その[信号]は、[電磁波の集合]から、脳が受け取ることができるような形の[信号]に、網膜によって、翻訳されたものである。
現象3 その信号を受信したあなたの[心(あるいは脳)]は、あなたの[心(あるいは脳)]の中に、[美の感じ]を、発生させた。

ディスプイレイが放出するのは、電磁波(光)の集合だけです。ディスプレイから、[美の感じ]というナニモノか(電磁波(光)ではない)が、放出されている、という事を示唆するような実験結果が報告された、というような事を、私は未だに、聞いたことがありません。
-----
(in English) When you say, "Look at this photographic image," it's just [a kind of labor saving in linguistic expression]. The expression "You look at this photographic image" expresses the following series of phenomena.

Phenomenon 1, A set of electromagnetic waves has reached your retina. The set of electromagnetic waves is emitted by the display.
Phenomenon 2, The retina received the set of electromagnetic waves, and sent a [signal] to your brain. That [signal] was translated by the retina, from the [set of electromagnetic waves] into a [signal], in a form, that your brain can receive.
Phenomenon 3, Your [mind (or brain)] received that signal, and your [mind (or brain)] generated, in your [mind (or brain)], a [feeling of beauty].

A display emits only a collection of electromagnetic waves (light). I have yet to hear of any experiment, that has been reported to suggest that, [something called a "sense of beauty" (not electromagnetic waves (light)) is emitted from a display].
--------------------
(in Japanese) 以下、[心(あるいは脳)]という表現をいちいち用いるのは、わずらわしいので、「心」と表現します。「心なんてない、あるのは脳だけだ」派の方は、以下の文中の「心」を「脳」に置き換えて、読み進めてください。それでも、この話は成立すると思います。
-----
(in English) In the following, I will use the word [mind], ( instead of using [mind (or brain)] ), because it's annoying to use the word [mind (or brain)], every time. If you think that, "Mind dos not exist. Only brain exist.", please rewrite the word [mind] to [brain] ( in your brain, not in your mind ), in the following sentence, and continue reading. If you do such rewriting, I think, this story will be valid.

--------------------
(in Japanese) 湧出した[美の感じ]の源泉、それは、ディスプレイの中にはない。では、いったい、どこにある?

あなたの[心]の中でしょう。そこ以外の場所に、その源泉があるとは、とても考えられません。

あなたの[心]の中で、あたかも、化学変化が起こったかのように(注2)、あなたの心の中のその源泉が、[美の感じ]を、あなたの心の中に湧出させ、あなたの心を、[美の感じ]で満たしたのです、「源泉かけ流し」で。
-----
(in English) The source of the spring [feeling of beauty] does not exist in the display. Then, where on the earth, is it?

It (the source) exists in your [mind]. It is very unlikely that, the source could be anywhere else.

As if, a chemical change occurred in your [mind](Note2), the source in your [mind], created [feeling of beauty], in your [mind], and filled your mind with [feeling of beauty].
--------------------
(in Japanese) 私が撮影した上記の画像が、その化学変化を生み出したのでは、ありません。化学変化を生み出したのは、あなたです、あなたの心です。私が撮影した画像は、その化学変化を起こすための、触媒の役割を果たしたに、すぎません。

ゆえに、[美の感じ]([美の感動]と言い換えてもよいかも?)を生み出したのは、あなたです、私では、ありません。

ゆえに、美をクリエイトする人(=クリエイター)は、世間からリスペクトされるべき(ほめそやされるべき、尊敬のまなざしをもって見つめられるべき)である、というのであれば、リスペクトされるべきは、私ではありません、あなたです。あなたが、リスペクトされるべきなのです。なぜならば、その美をクリエイトした(湧出させた)のは、あなたなのですから。

上記の写真画像は、触媒にしか、すぎません。私は、その触媒のメーカーなので、あります。
-----
(in English) The above image ( made ( taken ) by me ) did not create that chemical change. It is you, your [mind], that created that chemical change. The above image acted, only as a [catalyzer], for that chemical change.

Therefore, it is you, who created [beauty] ([feeling of beauty], [emotionally moving of beauty] ), not me.

Consequently, If the creater of [beauty] should be respected, it is you, who should be respected. You are the creater of [beauty].

I am the maker of the [catalyzer] ( The above photo image ).
--------------------
(in Japanese)
(注1)厳密に言うならば、ここは、

 「アァァァ! 自分は、美しいものを見ている!」という表現を、用いるべきでしょう。

あなたの心の中に[美の感じ]が湧出している時間帯はといえば、それは、最初の「アァァァ!]の時間帯だけであります。「自分は、美しいものを見ている!」と思い始めたとたんに、あなたの心の中では、もう[思考]が始まってしまっています。「自分は」とか、「見ている」とかいったように、考え始めたとたん、[思考]が始まり、[美の感じ]は、「思考」に覆われてしまい、しぼんでしまうでしょう。

(注2)「心なんてない、あるのは脳だけだ」派の方は、このように言われるかもしれません、

 「あたかも、化学変化が起こったかのように」などと言っちゃ、いけない。そこで起こったのは、まさに、化学変化にほかならないのだから。」
 
-----
(in English)
Note1: Strictly speaking, I should use the expression,

 "Ahhhhh! I am seeing something beautiful".
 
The time of day when [feeling of beauty] is spring up in your [mind], is "Ahhhhh!".
As soon as, you start to think that "I am seeing something beautiful”, your [mind] has already started [thinking]. As soon as, you start thinking, like "I am" or "am seeing", the [thinking] will start, and [feeling of beauty] will be covered by the [thinking], and will fade.

Note2: The people who think that, "Mind dos not exist. Only brain exist.", will say,
"You should not say, "As if, a chemical change occurred". You should say, "A chemical change occurred", because, that's exactly what's happening there, the chemical change itself".

-----------------------------
2 そうはいっても、作品には[格]というものが、あるのでは?
2 Even so, there is [dignity]( or [grade]) of [work of art], doesn't it?

(in Japanese) ここまで読んでくださった方々の中から、以下のような反論が出てくることは、大いに予想できます。

 「なるほど、芸術作品というものは、この人(この文章を書いている人間)が言うように、[触媒]にしか、すぎないような、もの(存在)なのかもしれない。でも、[触媒]にも、いろいろ、あるだろうに。触媒の[品格]、あるいは、触媒の[格調]といった方面にも、目を向けてほしいんだよなぁ。[格調]高い[触媒]もあれば、そうでないものもある。[品格]ある[触媒]もあれば、そうでないものもある。」

 「高[品格]の、高[格調]の、[触媒]をメイクする人は、やはり、世間からリスペクトされるべきだ。ゆえに、そのような触媒を作った人、生み出した人、すなわち、クリエイター(作品の)は、世間からリスペクトされるべきだろう。」
 
でも、この反論は、とても、険しい道を進むことになるのではと、私は予想します。
-----
(in English) It is highly predictable that, the following objections will come from those, who have read this far.

"As you say, a [work of art] may be a mere [catalyzer]. But, there are various difference in the [catalyzer]. I want you to look at the [grade] of the [catalyzer], or the [dignity] of the [catalyzer]. There are [high grade] [catalyzer]s, and there are others that are not. Some are [high dignity] [catalyzer]s and some are not."

"The persons, who ( are able to ) make [high grade] [catalyzer], [high dignity] [catalyzer], should be respected. The persons, who ( are able to ) create such a [catalyzer], that is, the creator of [work of art, high grade catalyzer] should be respected by the world."

But, I think that, this objection will go into very hard road.
--------------------
(in Japanese) その行くてには、

 「[格調]高い」とは、いったい、どういう事なのか?」
 「その触媒(作品)が、どのような状態であれば、それを、高[格調]の作品というのか?」
 
と、いう問題が、立ちはだかっているのです。

この問いに対して、多くの人々に理解できるような言葉づかいでもって、明確に説明できなければ、その反論は成立しないでしょう。
-----
(in English) In front of the objection, hard problems stand in the way.

What do the word [high grade] mean?
What state of the [catalyzer]( [work of art] ) , is a [high dignity] [catalyzer]?

If this question cannot be clearly explained in language that, many people can understand, then the objection will not be valid.
--------------------
(in Japanese) ここで、別の方角から、この問題について、考えてみましょう。

いま、あなたの目の前に、あるアプリ(コンピューター・プログラム)が、あるとしましょう。そのアプリのトリセツ(取扱説明書)には、以下のように、書かれています。

 「このアプリに、どんどん、絵画や写真の画像を読み込ませてください。音楽作品でもOKです。」

 「そうしますと、このアプリは、様々な文言を表示します。以下に示すのは、その一例です。」
 
 『いま、読み込んだ絵画1、これは 品格高い作品です。ゆえに、これは、芸術作品と、みなされます』
 『いま、読み込んだ絵画2、これには、「品格」がありません。ゆえに、これは、芸術作品とは、みなされません』
 『いま、読み込んだ音楽3、これは、ひとくちに言えば、低い品格を持つ作品、すなわち、「下品な音楽」としか、言いようがありません。』
-----
(in English) Now, let's consider this issue from a different direction.

Let's assume that, there is a computer program, in front of you, right now. In the user's manual of the program, the following statements are written,
 
"Please load more and more photos, paintings and musical works, into this program."

"If you do so, this program will display various text. The following is an example. "
 
"Painting 1, just has been loaded into me, this is a [high grade][work]. Therefore, I have graded that, this [work] is [work of art]."
"Painting 2, just has been loaded into me, this has no [dignity]. Therefore, I have graded that, this [work] is not [work of art].
"Music 3, , just has been loaded into me, oh no, this do not have [high grade], at all.
--------------------
(in Japanese) このような、アプリを作ることは、可能でしょうか? 今、話題の[AI ( artificial intelligence )]を使えば、可能かもしれません。

[AI]は、教育されることによって、様々な知識を獲得していく、と聞いています。([ディープラーニング]とか、いろいろと教育方法があるようです)。
 
と、いうことですから、何か、[AI]を借りてきて、それに、絵を見せたり、音楽を聴かせたりしていきましょう。そして、見せたり、聴かせたりするその都度、[AI]に学習させましょう、([AI]に「教育」してやりましょう、)次のようにして。

 [あなた] 絵画1、これは、品格高い作品だよ。
 [AI] ワカリマシタ

 [あなた] 絵画2、これは、品格低い作品だぞぉ。
 [AI] I see

 [あなた] 音楽3、これはぁ、品格低い作品だなぁ。
 [AI] Oh no!
-----
(in English) Is it possible, to make a computer program like this? It may be possible to make that, using the [AI (artificial intelligence)] ( much talked about, nowadays ).

I heard that, [AI] acquires various [knowledge] by being educated. (There are various ways to educate it, for example, [deep learning]).

So, let's borrow some [AI], and show it, various photo, painting, music. And, each time we show it, let's let [AI] learn, as follows,

You "Have you read this [Painting 1]? This is a [high grade][work]."
[AI] I see.

You "Have you read this [Painting 2]? This is a [high dignity][work]."
[AI] I see.

You "Have you read this [Music 3]? This is very [low grade][work]."
[AI] Oh no!
--------------------
(in Japanese) そのような[教育]([AI]の側から見れば、[学習])を続けていけば、そのうち、その[AI]は、地球上に存在する、ありとあらゆる、絵画、写真、音楽作品に対して、それが、[高品格のものか|低品格のものか]、の判断を、瞬時の中に、下すことができるようになるかもしれません。

そうなれば、

 たゆまない教育(学習)の結果、この[AI]はついに、作品の品格の有無を判定できるような境地にまで、到達した!

ということに、なるでしょうね。
-----
(in English) If, such [education] ([learning], from the [AI]'s point of view) will be continued, in time, the [AI] will become to be able to do a grading about every painting, photograph, or musical work on earth in an instant, whether it is [high grade] or [low grade].

And, the following announcement will be made,

 As a result of tireless education (learning), this [AI] has finally reached a point where, it is able to do grading of all [work of art] on the earth!
--------------------
(in Japanese) 5段階評価つきの教育(学習)を施せば、(「絵画1、これは、[品格度]4だよ」、「絵画2、これは、[品格度]2だよ」というようにすれば)、その[AI]は、

 「この作品の[品格度]は、5段階評価においての、3.14159であると、判定しました。」
 
というような表示をも、行えるようになるかもしれません。
-----
(in English) If you give a teaching (learning) with a 5-point scale ("Painting 1, this is [grade 4]", "Painting 2, this is [grade 2]"), then, mey be, the [AI] will become to able to display the following,

 "I have graded that, the [grade] of this [work] equal 3.14159, on a scale of [1 to 5]."
--------------------
(in Japanese) もしかすると、もしかすると・・・我々が、常識的、無意識的に、心中でつぶやき、あるいは、言葉に出している、[作品に対する評価]とは、もしかしたら、このようなものだったのでは、ないでしょうか?

すなわち、

誰か、[教師]ともいうべき人(人々)がいて、その人(人々)が、延々と、[我々]に対して、教育しつづけてきた、様々な、絵画や音楽を、我々に見せ、聴かせながら、

 絵画1、これは、品格高い作品だよ。
 了解
 
 絵画2、これは、格調低い作品だよ。
 了解
 
 音楽3、これは、品格低い作品、すなわち、これは、下品な音楽だよ
 Oh no!"
 
その結果、我々は、おのおのの作品に対して、

 「絵画A、品格というものを、この作品には、感じちゃうんだよなぁ」
 「絵画B、この絵、格調という点では、イマイチかなぁ」
 「音楽C、こんな下品な音楽ばっかし聴いて育っていって、ほんとうにいいのかねぇ?」
 
と、いうような事を言えるように、なったのではないでしょうか?
-----
(in English) Maybe, maybe...Our [evaluation of [work of art]] is something like that?

In other words,

There is someone, a [teacher] ( or [teachers]), who has been educating [us] for a long time, showing various [work of art] to [us], and let [us] to do [deep learning].

"Have you seen this [Painting 1]? This is a [high grade][work]."
"I see."

"Have you seen this [Painting 2]? This is a [low dignity][work]."
"I see."

"Have you listened this [Music 3]? This is very [low grade][work]."
"Oh no!"

As a result, we've been able to say that,

"[Painting A], There is a sense of dignity in this work."
"[Painting B], it is hard , to say that, This painting is [high grade]."
"[Music C], growing up, always, always, listening to this kind of [low grade] music...what the world will be in the future? I'm very worried.
--------------------
(in Japanese) なんの、エビデンスも無しに、私は、上記のような事を言っているのでは、ありません。以下に、少し、それを述べてみましょう。

(1)[史記 本紀 殷本紀]の中に、[妲己]からのリクエストに応じて、[帝紂]が、[師涓]に、[新淫聲]を作らせた、という趣旨の記述が、あります。[新淫聲]を、ある翻訳システムは、[new obscene sound]と、英訳してくれました。現代の我々の感覚をもってしては、そのような概念と音楽との間に、いったいなんの関係があるのか、と思いたくなるのですが・・・。でも、この記述は、当時の社会において、音楽作品に対して、[何らかの格づけ、すなわち、品格度の評価が、行われていた]という事を、示しています。いったい誰が、その格付けを行っていたのか、までは、不明ですが。(注3)

(2)ショスタコーヴィチ、プロコフィエフ、ハチャトゥリアン、カバレフスキーたちは、「社会主義リアリズム」に依拠する人々からの、強い批判を受けたのだそうです。

(3)[印象派]、[野獣派]は、そのグループに属する画家たちが描いた作品群を、低く評価するために、使われはじめた用語である、というような事を、聞いたことがあります。おそらく、このような評価に対抗して、ある人々が、「いや、そんな事はない」と、と言い始め、言い続けた、その結果、現在のような世間からの高い評価が、それらの絵に対して、与えられるようになったのでしょう。

(4)[フィンセント・ファン・ゴッホ]が描いた絵は、彼が生きていた期間中、そのほとんどが、売れてない状態に、あったのだそうです。彼の死後、様々な人々が、「ゴッホの絵は、いいね!」と言い始め、言い続けた、その結果、現在のような世間からの高い評価が、彼の絵に対して、与えられるようになったのでしょう。

(5)[アンリ・ジュリアン・フェリックス・ルソー(Henri Julien Félix Rousseau)

この人についても、上記と同様の事情であったようです。生きている間は、世間からあまり認められることなく・・・というような事は、芸術家の間においては、よくある事のようですね。

等々、過去にさかのぼっていけば、いろいろと、見つかるでしょう。
-----
(in English) I am not saying the above without any evidence.

The evidence is as follows,

(1)In [史記(Shǐjì)(Shi ji)](This is a document that describes the history of ancient China), there is a statement to the effect that, [紂(Zhòu)(King Chuo)] had a musician make [新淫聲(Xīn yín shēng)(Zhin yuin shen)], in response to a request from [妲己(Dájǐ)(Da ji)]. A translation system translated [新淫聲(Xīn yín shēng)(Zhin yuin shen)] as [new obscene sound]( in English ). To our modern sensibilities, we are tempted to wonder, what such a concept has to do with music. But this statement shows that, musical works were evaluated by the society at that time, in terms of their [dignity]. It is not clear, who ( in the society at that time ) made the evaluation.

(2) [Шостакович(Shostakovich)], [Прокофьев(Prokofiev)], [Խաչատրյան(Khachaturian)],[Кабалевский(Kabalevsky)] were strongly criticized by those who relied on [socialist realism].

(3) I have heard that, [Impressionism] and [Fauvisme] are terms, that began to be used, to devalue the works painted by artists, who belonged to that group. Perhaps, in response to this kind of evaluation, some people began to say, "No! The works ( of [Impressionism] ) are Great!", and, continued to say so. As a result, these paintings came to be held in high esteem.

(4) Most of the paintings drawn by [Vincent Willem van Gogh] were unsold during his lifetime. After his death, some people said, "Van Gogh's paintings are great!", and, continued to say so. As a result, his works became to receive the high praise.

(5)[Henri Julien Félix Rousseau], as for the picture he painted, it is the same as that of [Van Gogh].

If we go back in time, we will find many evidences, such as.
--------------------
(in Japanese) 我々もまた、[AI]と同様、[ディープラーニングしていくように、しむけられて](「影響を受けて」、という美称を用いて、それを表現することも可能でしょうが)、それぞれの作品の[品格度]、[格調度]といったようなものを判定する(判定できる)ような境地に至った(そのような脳内の配線状態に至った?)、ということなのかも、しれません。
-----
(in English) Like the [AI], we, too, have been encouraged to do [deep learning] (although, it is possible to use the term "influenced" to describe it), and we have reached a point where, we can evaluate [the degree of dignity], [the grade] of each work.
--------------------
(in Japanese)
(注3)[師涓]は、固有名詞ではなく、[音楽家]を表す名詞であるのかもしれません。このあたりについては、この方面に詳しい方のご意見を、おうかがいしたいところです。もしかしたら、これは、人類史上最初の(歴史書に記されている中の)、作曲依頼行為である、ということに、なるのかもしれません。と、なると、ここに[師涓]と記されている人は、人類史上最初の作曲家(歴史書に記されている中の)、ということに、なるのかも。
-----
(in English)
Note3: Maybe, this is the first time in human history (written in the history books) that a musician has been commissioned to compose a musical work. So, this musician may be the first person in the history (written in the history books) of mankind to be commissioned to compose music.

-----------------------------
3 [美=ディープラーニング結果]説の弱点
3 Weak point of the [beauty = deep learning results] theory

(in Japanese) しかし、このような考えを、つきつめていくと、ある疑問に、つきあたります。

 [P]という人は、[P1]という人により、教育(影響)されて、すなわち、[ディープラーニングしていくように、しむけられて]、[ディープラーニング]し続けた。その結果、[P]は、作品の「品格度」を判定する(できる)ような境地に至った。
 
 では、[P1]は?
-----
(in English) But, as we pore over these ideas, we come to a question.

 The person [P] was educated by [P1], that is , [encouraged to do [deep learning] by [P1]]. As a result, [P] came to a point where, [P] could evaluate [the grade] of [work of art].

Then, [P1]?
--------------------
(in Japanese) いったい何に依拠して、[P1]は、[P]に対して、「この作品nの品格度はね、・・・」というような、教育を行っているのでしょうか?

[P1]の[心]の中には、様々な作品の品格度を判定する、なんらかの仕組み(システム)が、存在している、だから、[P1]は、[P]に対して、そのような教育を行うことが、できるのでしょう。

では、いったいどのようにして、[P1]は、自らの心中に、その[様々な作品の品格度を判定するシステム]を、形成したのか?

そのようなシステムが、[P1]の心中に自然発生したとは、とうてい、思えません。

[P1]は、誰かに教育されて、([ディープラーニング]させられて)、その結果、作品の品格度を判定する、そのシステムを、獲得するに至ったのでしょう。

すなわち、[P1]に、[ディープラーニング]させた、[P2]という人が、いるに違いない。

となると、[P2]に、「ディープラーニング」させた、[P3]という人が、いるに違いない。

となると、[P3]に、「ディープラーニング」させた、[P4]という人が、いるに違いない。

・・・・・・・
-----
(in English) What on the earth, is [P1] relying on, to educate [P], to say, "[the grade] of this [work of art] is..."?

In the [mind] of [P1], there is some kind of mechanism (system), that evaluate [the grade] of various works. So, [P1] is able to provide such an education to [P].

Then, how did [P1] form, in his own [mind], [a system for evaluating [the grade] of various [work of art]]?

I can not think that, such a system spontaneously arose in [P1]'s [mind].

It is certain that, [P1] have been educated ([encouraged to do [deep learning]]) by someone else. As a result, [P1] have acquired the [a system for evaluating [the grade] of various [work of art]].

In other words, there must be a person [P2], who encouraged doing [deep learning] to [P1].

Then, there must be a person [P3], who encouraged doing [deep learning] to [P2].

Then, there must be a person [P4], who encouraged doing [deep learning] to [P3].

.............
--------------------
(in Japanese) このように、時間軸を昔の方向に延々と遡っていくと、その先には?

[P∞]が、そこには、いなければ、なりません。誰にも、「ディープラーニング」させられることなく、作品の品格度を判定するシステムを、自力で、獲得した人、[A∞]が。

-----
(in English) Thus, if you go up the flow of time, you will meet a person [P∞].

Without [deep learning], [P∞] have acquired [a system for evaluating [the grade] of various [work of art]]. No one educated [P∞].
--------------------
(in Japanese) もしかしたら、[P∞]は、あの[ラスコー洞窟]にいた人なのかもしれません。なにか、啓示みたいなものを受けて、あるいは、なぜか突然、[A∞]は、洞窟の壁に描かれた絵を見て、「この動物の絵は、品格おおきい! イイネ!」と、叫び始めたのかもしれません。

あるいは、[P∞ = ミトコンドリア・イブ]?

まぁ、しかし、このような事をいくら言ってみても、「それは、おもしろい考えですね」と言ってくれる人は、いないでしょうね、「おもしろい、ジョークですね」と、言ってくれる人は、いるかもしれませんが。(「たちの悪いジョークですね」と言われるがオチかな?)

[A∞]が誰なのかを、特定するためには、[確かな史料」が必要でしょう。でも、昔にさかのぼっていくにつれて、[確かな史料」の数は、どんどん減少していってしまい、ついには、ゼロになってしまいます。

[ラスコー洞窟]への道を見つけるのは、どうやら、[ミッション・インポッシブル]であるようですねぇ。
-----
(in English) Maybe, [P∞] was the one, who was in that [Grotte de Lascaux (Lascaux Cave)]. By something like a revelation, or for some reason, looking at the painting on the wall of the cave, [A∞] suddenly said, "This animal painting is [high grade]! Likes!".

Or, [[P∞] = [Mitochondrial Eve]]?

Well, how many times, I try to say this, no one will say, "That's an interesting idea," although they might say, "That's an interesting joke. (Or, "It's a bad joke," they'll say.)

In order to identify, who [A∞] is, we need [reliable historical materials].

But, as we go back in time, the number of [reliable historical materials] dwindles and eventually, it dwindles to zero.

It seems to be a mission impossible, to find the way to [Grotte de Lascaux].

 

2020年7月14日 (火)

プログラム 元の動画とは時間進行の逆順に進んでいく動画を生成 Java OpenCV3 を使って

コンピューター・プログラム 制作 インデックス

 

[元の動画とは時間進行の逆順に進んでいく動画を生成する] という制作テーマにより、コンピューター・プログラムを制作しました。

以下に、その様を記述しますが、その記述内容は、このようなコンピューター・プログラムを制作した、それを動かしたら、このような結果になった、というような事を、ただ、淡々と述べているに過ぎません。

下記の記述をお読みになった方が、それを単に参考にする、というのであれば、問題は無いと思われます。

しかし、記述されている内容に沿って、その方がそこに記されているのと同様の制作や作業を行われた際に、その制作や作業の結果、使用されたコンピューター等、様々な方面において、何らかの問題が発生しない、という保証は、全くありません。

その作業の結果、その方や、その方が使用された様々な器機、インフラ等の身の上にどのような事が起ころうとも、私は一切、責任を負いません。

------------
1 できたもの

制作作業の結果、できたのが、下記のようなコンピューター・プログラムです。

まず、(1)[元となる動画]を1個、所定のフォルダー中に格納しておきます。

次に、このプログラムを動かします。

すると、(2)[元の動画とは時間進行の逆順に進んでいく動画]が、生成されます。

動画(1)、動画(2)を、そっくりそのまま、ここに掲載することができたら、とても分かりやすくなると思うのですが、それができません。なので、それら2個の動画の数コマだけ切り出して、下記に掲載することにしました。

[元となる動画]として、下記のように、紙ヒコーキを左から右に移動させながら撮影したものを使用しました。

Fig1 [元となる動画] 開始後0秒付近の様子

 

 

Fig2 [元となる動画] 開始後5秒付近の様子

 

 

Fig3 [元となる動画] 開始後10秒付近の様子

 

 

[元の動画とは時間進行の逆順に進んでいく動画]は、下記のように、紙ヒコーキが、右から左へ移動していきます。

Fig4 [元の動画とは時間進行の逆順に進んでいく動画] 開始後0秒付近の様子

 

 

Fig5 [元の動画とは時間進行の逆順に進んでいく動画] 開始後5秒付近の様子

 

 

Fig6 [元の動画とは時間進行の逆順に進んでいく動画] 開始後10秒付近の様子

 

 

このプログラムの仕組みは、しごく単純なものです。動画が格納されているファイルから、動画フレームを読み取り、それを順次、プログラム内部の配列(array)へ、格納します。

その後、その配列から、格納されたものを、格納した時とは逆順に取り出し、それを、出力側ファイルに書き込んでいくと、出力側ファイル中に、[元の動画とは時間進行の逆順に進んでいく動画]ができあがる、というわけです。

配列(array)は、外部記憶ではなく、コンピューターの主記憶の中に展開されるので、処理できる量(動画フレーム数)は、主記憶容量により、制約を受けます。

ただし、このプログラムを更に改造すれば、小さい主記憶量で、もっと多くの動画フレーム数を処理できるようになるかも、しれません。

------------
2 使用したコンピューターとソフトウェア

この、コンピューター・プログラムを制作・実行するために使用したものは、下記の通りです。

コンピューター

 CPU : Core(TM) i7-7700HQ
 メモリー : 16 GB
 Operating System : Windows 10 Home, 64ビットオペレーティングシステム

OpenCV3

 opencv-3.4.3-vc14_vc15.exe

Java

 jdk-8u181-windows-x64.exe

[opencv3] と [Java] を組み合わせて使用する方法については、過去に発表ずみです。

その内容を読みたい方は、

 [コンピューター・プログラム 制作 インデックス]にアクセスし(このページの先頭と末尾に、それへのリンクがあります)、

 そこから、下記にアクセスしてください。

 [開発費用ゼロ コンピューターグラフィックスによる動画制作 Java OpenCV3 Eclipse を使って]

------------
3 ソースリスト

このコンピューター・プログラムのソースリストを、以下に記します。

==============================
OppositeDirection.java
--------------------------
import org.opencv.core.Core ;

import org.opencv.videoio.Videoio ;
import org.opencv.videoio.VideoCapture;
import org.opencv.videoio.VideoWriter;

import org.opencv.core.Mat ;
import org.opencv.core.Size ;

public class OppositeDirection {

private String make_OppositeDirection_VideoData () {

//for using OpenCV
System.loadLibrary ( Core.NATIVE_LIBRARY_NAME ) ;

//----------- input Datas ----------------------------------------------------

//make path for file that contains [ Input Video Image Data ]
String path_of_InputVideoImageDataFile = "D:\\TestOppositeDirection\\InputVideoData.MP4" ;
//construct instance of [VideoCapture] class
VideoCapture ins_VideoCapture = new VideoCapture ( path_of_InputVideoImageDataFile ) ;
if ( ins_VideoCapture == null ) {
System.out.println ( "******* Error !!!!!! **************, instance of [VideoCapture] could not be constructed." ) ;
return "could not be constructed" ;
}
else {
System.out.println ( "instance of [VideoCapture] have been constructed" ) ;

}
//read first data of InputVideoImageData
Mat ins_Mat_first_data = new Mat () ;
if ( ins_VideoCapture
.read ( ins_Mat_first_data )
) {
//first data have been read
System.out.println ( "first data have been read" ) ;
}
else {
System.out.println ( "******* Error !!!!!! **************, first data could not be read." ) ;
return "could not be read" ;
}
//get width and height of input Video image data
int width_of_InputVideoImage = ins_Mat_first_data.width () ;
int height_of_InputVideoImage = ins_Mat_first_data.height () ;
//get fps value of input Video image data
double fps_value_of_InputVideoImageData
= ins_VideoCapture.get ( Videoio.CV_CAP_PROP_FPS ) ;

//prepare area for accumulating image data read

//*****************************************
int seconds_for_accumulating = 10 ;
//*****************************************

int max_number_of_Mat_for_accumulating
= ( int ) ( fps_value_of_InputVideoImageData
* seconds_for_accumulating ) ;
Mat [ ] cv_array_Mat_for_accumulating
= new Mat [ max_number_of_Mat_for_accumulating ] ;
//accumulate first data of InputVideoImageData
int number_of_accumulated_Mat_data = 0 ;
int i = 1 ;
cv_array_Mat_for_accumulating [ i - 1 ]
= new Mat () ;
cv_array_Mat_for_accumulating [ i - 1 ] = ins_Mat_first_data ;
number_of_accumulated_Mat_data = i ;

//accumulate datas of InputVideoImageData
int j ;
char process_continue = 'Y' ;
while ( process_continue == 'Y' ) {
j = number_of_accumulated_Mat_data + 1 ;

if ( j > max_number_of_Mat_for_accumulating ) {
System.out.println ( "reached to max_number_of_Mat_for_accumulating," ) ;
System.out.println ( "I can't continue processing anymore." ) ;

process_continue = 'N' ;
break ;
}

//*****************************************************
//construct one instance of Mat for accumulating
cv_array_Mat_for_accumulating [ j - 1 ]
= new Mat () ;
//read one data of InputVideoImageData
//, and set into the instance of Mat
if ( ins_VideoCapture
.read (
cv_array_Mat_for_accumulating [ j - 1 ] )
) {
//*****************************************************

//data have been read
number_of_accumulated_Mat_data = j ;

System.out.println ( "-----------------------------------------------------------" ) ;
System.out.println ( "data have been read, and accumulated" ) ;
System.out.println ( "number_of_accumulated_Mat_data = "
+ number_of_accumulated_Mat_data ) ;
System.out.println ( "-----------------------------------------------------------" ) ;
}
else {
System.out.println ( "-----------------------------------------------------------" ) ;
System.out.println ( "data have not been read, probably, reached to end of file." ) ;
System.out.println ( "-----------------------------------------------------------" ) ;

process_continue = 'N' ;
break ;
}

}

System.out.println ( "-----------------------------------------------------------" ) ;
System.out.println ( "process of reading and accumulating has been completed." ) ;
System.out.println ( "-----------------------------------------------------------" ) ;

//----------- output Datas -----------------------------------------------

//make path for file that contains [ Outpout Video Image Data ]
String path_of_OutputVideoImageDataFile = "D:\\TestOppositeDirection\\OutputVideoData.MP4" ;
//set fourcc value of OutputVideoImageData
//( set to MP4V format )
int fourcc_value_of_OutputVideoImageData
= VideoWriter.fourcc ( 'm', 'p' , '4', 'v' ) ;
//set FPS value of OutputVideoImageData
double fps_value_of_OutputVideoImageData
= fps_value_of_InputVideoImageData ;

//set size value of OutputVideoImageData
int width_of_OutputVideoImage = width_of_InputVideoImage ;
int height_of_OutputVideoImage = height_of_InputVideoImage ;
Size ins_Size_of_VideoWriter_OutputVideoImage
= new Size ( width_of_OutputVideoImage
, height_of_OutputVideoImage ) ;
//construct one instance of VideoWriter Class for make OutputVideoImageData
VideoWriter ins_VideoWriter_OutputVideo
= new VideoWriter (
path_of_OutputVideoImageDataFile
, fourcc_value_of_OutputVideoImageData
, fps_value_of_OutputVideoImageData
, ins_Size_of_VideoWriter_OutputVideoImage
) ;
System.out.println ( "instance of [VideoWriter_OutputVideo] have been constructed" ) ;

for ( int k = number_of_accumulated_Mat_data
; k >= 1 ; k -- ) {

//*****************************************************
ins_VideoWriter_OutputVideo
.write ( cv_array_Mat_for_accumulating [ k - 1 ] ) ;
//*****************************************************

System.out.println ( "-----------------------------------------------------------" ) ;
System.out.println ( "data have been written, by OppositeDirection" ) ;
System.out.println ( "number_of_accumulated_Mat_data = "
+ number_of_accumulated_Mat_data ) ;
System.out.println ( "k = " + k ) ;
System.out.println ( "-----------------------------------------------------------" ) ;
}

//*****************************************************
ins_VideoWriter_OutputVideo
.release ( ) ;
//*****************************************************

System.out.println ( "-----------------------------------------------------------" ) ;
System.out.println ( "ins_VideoWriter_OutputVideo have been realeased." ) ;
System.out.println ( "process of writing has been completed." ) ;
System.out.println ( "-----------------------------------------------------------" ) ;

return "OK, this mission was possible!!!" ;
}

//-------------------------------------------------------------------------
public static void main ( String[] args ) {

OppositeDirection ins_OppositeDirection = new OppositeDirection () ;
ins_OppositeDirection.make_OppositeDirection_VideoData () ;
}

}

------------------------------------------------

コンピューター・プログラム 制作 インデックス

2019年11月 3日 (日)

赤ちゃんも上に立っている者が優位と判断する、との研究発表が行われた

[このコンテンツが属するカテゴリー([言語])]の インデックス] へのリンク

過去にアップロードした、下記コンテンツ

なぜ、晴から雨へと移りゆく時に、「天気は上り坂に」と、言わないのだろうか?

において、

[高度]という概念と、他の概念とが複合されることにより、下記のような様々な言葉が生み出されていることを確認した。

 高位高官
 天気は下り坂に
 昇進 降格
 上司 部下
 献上 下賜
 仰ぎ見る存在
 他を見下す
 上目使い
 上から目線
 声高らかに 声を低めて
 落ち込む 舞い上がる
 上昇気流に乗っている
 落ち目
 没落
 都落ち
 上洛 上京
 下剋上
 高尚 低俗
 堕落
 高等遊民

そして、「天気は下り坂に」と「高位高官」という表現について、その成り立ちについて、考えてみたのであったが、

これに関連して、下記のような、注目すべき研究成果発表が、2019年10月に行われた。

 [赤ちゃんも上に立っている者が優位と判断することを解明 ―前言語期の乳児が空間的上下と社会的上下を結びつける―]

この研究を行ったのは、[孟憲巍],[森口佑介],[橋彌和秀]らの研究グループであるようだ。

この研究の内容は、2019年10月9日に、[Proceedings of the Royal Society B: Biological Sciences]のオンライン版に掲載されたのだそうだ。

下記のようなキーワード等を使ってネット検索すると、研究の詳細を把握することができるかもしれない。

----------
[赤ちゃんも上に立っている者が優位と判断することを解明 前言語期の乳児 空間的上下 社会的上下 孟憲巍]

[Proceedings of the Royal Society Biological Sciences Space and rank Xianwei Meng]
----------

この研究の注目すべき点は、

 人間が、1歳の赤ちゃんの段階(まだ言葉を話すことができない)にして、すでに、
 
 [高度]という概念と、他の概念とを複合するような事が、できている可能性がある

という事にある。

これは、下記のような仮説(従来より有力とされてきた)

 優位性関係と空間的位置の結びつきは、言語学習の過程で獲得されている

を覆す可能性のある、研究成果である。

この研究の今後の成り行きによっては、これまでの私の考察は、相当な範囲において、いや、もしかしたら、全ての範囲において、廃棄せざるをないことに、なるかもしれない。

 

2019年3月 5日 (火)

太平記ゆかりの地 5 足利尊氏は、京都御所に住んでいた?

太平記ゆかりの地 インデックス

以下、下記の文献に記述されている内容を参照しながら、述べる。

 文献1:[観応の擾乱 亀田 俊和 著 中公新書 中央公論新社]

[文献1]51P に、以下のようにある。

 「貞和五年(一三四九)三月十四日、京都土御門(つちみかど)東洞院(ひがしのとういん)にあった将軍足利尊氏邸が火災に遭った。尊氏邸の再建が終了するまで、尊氏は一条今出川(いまでがわ)にあった執事高師直邸に居住することとなった。」

京都の地名の中には、東西方向に伸びる道路の名前と、南北方向に伸びる道路の名前を組み合わせてできているものが多くある。(例えば、[四条烏丸]、[四条河原町]、[河原町三条])。

上記中の[土御門東洞院]も、同様だ。[東洞院]という名前の道路と、[土御門]という名前の道路が交差している場所を指している。ただし、[土御門]という名前は、平安時代のものであり(土御門大路)、現在の[上長者町通]に相当する。

よって、この当時の将軍・足利尊氏(あしかが たかうじ)の住所は、[東洞院通]と[上長者町通]が交差するあたりにあった、ということになる。

ネット地図を使用して、[京都市 上京区 元土御門町]で検索すると、[元土御門町]がどこにあるのか分かると思うが、その町内にある東西方向に伸びている道路が、[上長者町通]である。

ネット地図を使用して、[京都市 中京区 三本木町]で検索すると、[三本木町]がどこにあるのか分かると思うが、その町内にある南北方向に伸びている道路が、[東洞院通]である。

では、[東洞院通]と[上長者町通]が交差する場所とは、いったいどこか?

ネット地図を見てその位置を割り出してみると、なんと、それは、[京都御所]の[紫宸殿]のあたりである。

尊氏は、御所に住んでいた?

いや、そうではない。

[文献1]60P には、以下のようにある。

 「だが翌一三日には、さすがの尊氏も直義に土御門東洞院邸へ避難するように勧めた。直義はこの指示に従い、将軍邸へ移動した。これを見て師直に寝返った武士が続出し、将軍兄弟の軍勢は三〇〇騎にも満たなくなった。」

 (途中略)

 「八月一四日早朝、師直は大軍を率いて法成寺(ほうじょうじ)河原に進出し、将軍御所の東北を厳重に包囲した。師泰も七〇〇〇騎あまりで西南からこれを囲んだ。師直軍が御所を焼き払う風聞も飛び交い、付近の住民は大混乱のうちに避難した。将軍邸の北隣に位置する内裏に住む崇光(すこう)天皇も、光厳上皇の御所(持明院殿)へ避難した。」

これが、足利幕府を分裂・抗争に至らしめた、[観応の擾乱](かんのうのじょうらん)の始まりである。

尊氏は、天皇の住まい(内裏)の南隣に住んでいたのだ。

この時の、崇光天皇の住まいは、[土御門東洞院殿]と呼ばれており、その後、ここに本格的な規模を持つ御所が建設され、それが、現在の京都御所となったのだという。

上記中の、「法成寺河原」とは、[法成寺の付近の鴨川の河原]、という事になるのだろう。

[法成寺]は,[藤原道長]によって建立された寺である。[上京区 荒神口通 寺町 東入 北側]に、「このあたりに法成寺があった」ということを示す石標があるようだ。

よって、[法成寺河原]とは、[荒神口通 寺町]のあたりの、鴨川の河原、すなわち、現在の[荒神橋]のあたりの鴨川の川原、ということになるのだろう。

[高師直](こうのもろなお)は、足利尊氏邸の東側を塞ぐために、荒神橋のあたりに鴨川に沿って南北に軍勢を配置したのだろう。

なお、この当時の鴨川の川原は、現在のそれと一致しないようだ。

ところで、[観応の擾乱]という用語を、誰が最初に用いたのか、ネットで調べてみたが分からなかった。

いったいなぜ、「擾乱」などという、現在の我々にはなじみが無い用語を用いたのだろう?

(気象学や電気工学では、この用語を用いるようだが)。

カンノウノジョウラン・・・うーん、むずかしい用語・・・このような、学生諸君の記憶力に無用の負担をかけるような事はやめて、学生諸君の頭脳に擾乱を引き起こすような事はやめて、[観応の変]あるいは[観応の乱]とでも、呼ぶように、変えてみてはどうだろう?

いや、いっそのこと、年号を使うのを止めてみては?

 [観応の擾乱]は、[足利幕府・第1次・抗争]に

 [応仁の乱]は、[足利幕府・第2次・抗争]に

というようにでも、変えてみては?

これまでの日本史の教育においては、このような、学生諸君の記憶力に負担を強いるような、無駄な事がとても多いのでは、と思う。これによって、多くの学生の日本史への関心を薄れさせているのではないか?

学校(大学・大学院も含む)での日本史関連の授業・講義・試験において、年号を用いた用語を用いない、ということにすれば、学生はどれほど楽になることだろう。

今の日本の学生は、日本史の他にも学ばねばならない事がいっぱいあるのだから・・・IT関係の事とか、国際関係の事とか、地球環境保全の事とか、英語関係の事とか。

もう少し、学生の負担を減らすような方向に、文部科学省、日本史学会は、考えていただいてもよいのではないだろうか。

--------

次に、高師直(こうの もろなお)の住所を見てみよう。

[文献1] 51P には、

 「一条今出川(いまでがわ)にあった執事高師直邸」

とあったが、「一条今出川」とは、いったいどのあたりか?

「今出川」を通りの名前、すなわち、[今出川通]と解釈すると、不可解な地名になってしまう。一条・今出川通? 一条通も今出川通も、東西方向に延びる道路だ、この2本の道路が交差することは、ありえない。

よって、[今出川]は、道路の名前ではなく、川の名前と解釈すべきだろう。

かつて、[今出川]という名前の川があったのだそうである。相国寺の境内や、御所の敷地の内を、南方向に流れていたのだという。

[今出川 川跡]でネット検索すると、それに関する情報を得ることができるだろう。

[一条今出川]とは、[一条]という名前の道路と、[今出川]という名前の河川が交差している場所を指しているのだろう。

ネット地図を使用して、[京都市 上京区 広橋殿町]で検索すると、[広橋殿町]がどこにあるのか分かると思うが、その町内にある東西方向に伸びている道路が、[一条通]である。

上記(尊氏邸について調べた)で見た、[上長者町通]よりも[一条通]の方が北側にある。

よって、師直の住所は、尊氏の住所の北方のあたり、ということになるのだろう。

--------

では、尊氏の弟・足利直義(あしかが ただよし)の住所は?

[文献1] 9P,10P に、以下のようにある。

 「桃崎有一郎(ももさき ゆういちろう)氏の研究成果によれば、この時期の直義は「三条殿(さんじょうどの)」あるいは「三条坊門(ぼうもん)」と呼ばれることがもっとも多かった。(「初期室町幕府の執政と「武家探題(たんだい)」鎌倉殿の成立」)。これは、開幕以来の直義の邸宅所在地で、幕府の執政が行われた下京(しもぎょう)三条坊門高倉(たかくら)にちなんでいる。」

[三条坊門高倉]は、[高倉]という名前の道路と、[三条坊門]という名前の道路が交差している場所を指している。ただし、[三条坊門]という名前は、平安時代のものであり(三条坊門小路)、現在の[御池通]に相当する。よって、この当時の直義の住所は、[高倉通]と[御池通]が交差するあたりにあった、ということになる。

ネット地図を使用して、[京都市 中京区 御所八幡町]で検索すると、[御所八幡町]がどこにあるのか分かると思うが、その西端を南北方向に伸びている道路が、[高倉通]である。[御所八幡町]の南半分ほどは、[御池通]の中にある。

上記にも見たように、尊氏の邸宅は、[東洞院通]の道筋にあった。そして、今見たように、直義の邸宅は、[高倉通]の道筋にあった。

[高倉通]は、[東洞院通]の2筋東である。

よって、直義邸は、尊氏邸の、ほぼま南方向にあった、ということになるだろう。

太平記ゆかりの地 インデックス

2019年1月30日 (水)

京都 嵯峨 混雑する嵐山を好まない人は、こちら方面へ行けばいいかも

最近、[嵐山]の[渡月橋]のあたりには、大勢の人々が来られています。海外から来た人々も多いようです。平日でも多いです、桜シーズン、紅葉シーズンではない時期でも、多いです。

人でいっぱいの[嵐山]は、好きではない、という人も、おられるかもしれませんね。そのような方は、[嵐山]から北の方、すなわち、[嵯峨(さが)エリア]の北の方へ行ってみる、というのもありかもしれません、様々な美しい場所がありますから。

--------

[嵯峨エリア](京都市 右京区)の北の方には、大きな池が2個あります。[広沢池]と[大沢池]です。

ネット地図を使って、[渡月橋]で検索すると、[渡月橋]の付近が表示されるでしょう。その後、縮尺を小さくしていくと、[渡月橋]の北方向と北東方向に大きな池が2個、表示されることでしょう。

西側にあるのが[大沢池]、東側にあるのが[広沢池]です。

--------
広沢池

下記が、過去に[広沢池]で私が撮影した写真画像です。

A1
A1

A2
A2

[広沢池]では毎年、冬になると、[鯉揚げ]が行われるのだそうです(私は、それを見たことがありません)。池の水抜きが行われ、それまで水中にいた生物の販売も、行われるのだそうです。

[広沢池 鯉揚げ]でネット検索すると、関連する情報を得ることができると思います。

--------
大沢池

[大沢池]は、[大覚寺]の境内にあります。

下記が、過去に[大沢池]で私が撮影した写真画像です。

B1
B1

B2
B2

B3
B3

桜の開花シーズンにも、ここへ行ったことがあります。[大沢池]の周囲に桜があるのです。とても、華やかな風景でした。

[大覚寺 桜]、[大覚寺 紅葉]等のキーワードでネット検索すると、関連する情報を得ることができると思います。

--------

[広沢池]と[大沢池]があるあたりは、[北嵯峨」と呼ばれるエリアです。竹やぶ、田園があり、京都市内にもこんな、のびやかですばらしい所が、と思う場所です。

2019年1月に、[北嵯峨エリア]を歩きまわって、動画を撮影してきました。ユーチューブにアップしてあります。下記が、それへのリンクです、よろしければ、ご覧ください。下記に掲載されている画像は、その動画の中の1シーンを切り出したものです。

広沢池の付近で撮影した動画

P1
P1

---------------------------------------
観空寺の付近で撮影した動画

P2
P2

---------------------------------------
後宇多天皇・陵、および、その他の場所で撮影した動画

P3
P3

[後宇多天皇]は、[後醍醐天皇]の父です。

--------

下記の写真画像も、それぞれの地で過去に、私が撮影した写真画像です。

祇王寺(ぎおうじ)

C1
C1

厭離庵(えんりあん)

D1
D1

直指庵(じきしあん)

E1
E1

--------

平安時代から現代に至るまで、[嵐山]は、人気のあるリゾート地であり続けてきたようです。平安時代、公家たちはここにやってきて、船に乗ったりして楽しんでいたようです。

[嵐山]を流れている[桂川](当時は、「大堰川」と呼ばれていたようです)において、あの[藤原道長]が、一大イベントを開催した、という事が、[大鏡]に書かれているようです。

どのようなイベントかというと:

川の上には、船が3個。イベント参加者は、それらの船に分乗する。

 漢詩文を作るのを得意とする人は、船Aに、
 楽器演奏を得意とする人は、船Bに、
 和歌を作るのを得意とする人は、船Cに

そのイベントに参加した[藤原公任]は、漢詩文も和歌も作ることができ、楽器の演奏をすることもできた、だから、3個の船のどれにでも、乗り込むことができたようなのですが、彼は船Cを選択、それに乗り込んで、良い和歌を作れた。そして、

 「じぶん(自分)、船Aに乗っといた方が、よかったんかなぁ」

というような趣旨の事を、言ったのだそうです。

これに関する更なる詳細については、[大鏡 三船 公任]等のキーワードで検索して、情報を得ることができると思います。

[藤原道長]と[藤原公任]は、同じ年に生まれているようだけど、政界の中での昇進スピード、最終到達位置については、相当な差異があるようです。

--------

平安京から嵐山まで、道長さんや公任さんたちは、牛車に乗って行ったのでしょうね。いったい、どれくらいの時間がかかったのでしょう?

平安京の内裏があった場所は、現在の[千本丸太町]交差点のあたりです。

ネット地図で見てみるに、ここから、嵐山の[渡月橋]までの直線距離は、およそ

 6 km

次に求めたいのが、[牛車の速度]です。これが分かれば、上記の距離をこれで割って、[所要時間]を算出することができるでしょう。

[牛車 速度]でネット検索してみたが、確たる情報を得ることができませんでした。

なので、あえて、

 牛車の速度 = 3 km / 1 時間

と仮定してみることにしました。すると、

所要時間は、

 6 / 3 = 2 時間。

意外に、短い時間で到達することができる、ということになるのかなぁ。午前9時に[平安京]を出発したら、昼前には、[渡月橋]に着ける、ということになりますね。公任さんは、到着してから船に乗り込み、まず、船の中でお弁当を食べ、それから和歌を作ったんだろうか、それとも、その逆順か?

あ、そうだ、この時代は、朝食と夕食のみ、ランチは無しだったんだ、だから、弁当は無しですか。ランチ無しで、和歌や演奏、みなさん、タフですねぇ。

公任さんの[嵐山]への旅は、日帰りだったんだろうか、それとも、どこかで一泊?

[京都御苑]の近くに、[冷泉家](れいぜいけ)という家がありますが、そこのご先祖・[藤原定家] 氏が選んだ[小倉百人一首]の中の

 滝の音は 絶えて久しく なりぬれど 名こそ流れて なほ聞こえけれ

は、公任さんが作った和歌ですが、この「滝」は、[名古曽(なこそ)の滝]であり、[大覚寺]の境内にかつてあったのだそうです。[大覚寺]の境内に、「名古曽の滝跡」として、復元されています。

2018年12月22日 (土)

京都一周トレイル・東山コース 2018年12月 倒木 台風 強風

2018年12月に、[京都一周トレイル・東山コース] を歩きました。

2018年に襲来した台風の強風により、[京都一周トレイル]の、道沿いの様々な場所で倒木多数、中には通過困難な場所もあり、との情報を得ていたので、どんな状態になっているか、懸念しながら行ってみました。

この日、歩いたのは、下記コースです。[京都一周トレイル]ご関係の方々のご尽力のおかげでしょう、倒木により通行困難、というような場所は無く、歩き通すことができました。

当日、撮影した動画を、ユーチューブにアップしていますので、よろしければご覧ください。

京都一周トレイル・東山コース (10),  [標識 17] - [東山山頂公園] 間
 ([清水寺]の東側の山上を通り、 [東山山頂公園]に至るルートです。)

京都一周トレイル・東山コース (11)  [標識 22] - [尊勝院の付近] 間
 ( [東山山頂公園]の付近から、  [尊勝院]の付近に至るルートです。)

上記の動画を、私のユーチューブチャンネルからも見れます。私のユーチューブチャンネルにアクセスしたい時は、

ここをクリックしてください。

事前に得ていた情報の通りでした、歩いて行く道沿いの様々な場所で、倒木を見ました。

「異常気象」という言葉を毎年のように聞くようになってきた昨今。これから先もまた、台風がやってきて、倒木多数、という状態になってしまうかもしれません。

京都の2018年のカエデ紅葉、赤一色にきれいに染まり、というような映像を見た記憶がありません。これも、今年の気候の影響だったのでしょうか。

このままのペースで、気温上昇が続いていったならば、社寺等の地表面を美しく彩っている、[京都のコケ(苔)]は、この先、だいじょうぶなんだろうか・・・等々、最近、懸念することが多くなってきています。

2018年12月 7日 (金)

プログラム 制作 複数 の 断面図画像 を与えて 3次元 立体 表示 Java OpenCV3 を使って

コンピューター・プログラム 制作 インデックス

[複数 の 断面図画像 を与えて 3次元 立体 表示] という制作テーマにより、コンピューター・プログラムを制作しました。

以下に、その様を記述しますが、その記述内容は、このようなコンピューター・プログラムを制作した、それを動かしたら、このような結果になった、というような事を、ただ、淡々と述べているに過ぎません。

下記の記述をお読みになった方が、それを単に参考にする、というのであれば、問題は無いと思われます。

しかし、記述されている内容に沿って、その方がそこに記されているのと同様の制作や作業を行われた際に、その制作や作業の結果、使用されたコンピューター等、様々な方面において、何らかの問題が発生しない、という保証は、全くありません。

その作業の結果、その方や、その方が使用された様々な器機、インフラ等の身の上にどのような事が起ころうとも、私は一切、責任を負いません。

------------
1 できたもの

制作作業の結果、できたのが、下記のようなコンピューター・プログラムです。

まず、10個の画像を制作し、所定のフォルダー中に格納しておきます。

画像には、L01.png , L02.png , L03.png ・・・ というように、連番でファイル名を与えておくようにします。

Fig1

Fig1_3

これらの画像は、架空の山の各標高での断面図を示していると思ってください。

例えば、

 L01.png は 標高0メートル での断面図
 L02.png は 標高100メートル での断面図
 L03.png は 標高200メートル での断面図
 L04.png は 標高300メートル での断面図
 ・・・

というような、かんじです。

その後、このコンピューター・プログラムを起動すると、上記の断面図をもとにして、山のおおよその形状が、下記のように3次元表示されました。

Fig2

Fig2_2

[For Data Input] 画面は、プログラムに対する操作の指示を行うためのものです。これを使って、
山を眺める角度を変えたら、示される形状が、下記のように変化しました。

Fig3

Fig3_2

L01.png , L02.png 等の画像セットを、下記のように変えてみました、ピラミッドみたいな形を表示してくれるかな、と思い。。

Fig4

Fig4_2

すると、下記のように表示されました。

Fig5

Fig5_2

Fig6

Fig6

------------
2 使用したコンピューターとソフトウェア

この、コンピューター・プログラムを制作・実行するために使用したものは、下記の通りです。

コンピューター

 CPU : Core(TM) i7-7700HQ
 メモリー : 16 GB
 Operating System : Windows 10 Home, 64ビットオペレーティングシステム

OpenCV3

 opencv-3.4.3-vc14_vc15.exe

Java

 jdk-8u181-windows-x64.exe

[opencv3] と [Java] を組み合わせて使用する方法については、過去に発表ずみです。

その内容を読みたい方は、

 [コンピューター・プログラム 制作 インデックス]にアクセスし(このページの先頭と末尾に、それへのリンクがあります)、

 そこから、下記にアクセスしてください。

 [開発費用ゼロ コンピューターグラフィックスによる動画制作 Java OpenCV3 Eclipse を使って]

------------
3 ソースリスト

このコンピューター・プログラムのソースリストを、以下に記します。

複数個のファイルに分割して記述しました。

==============================
Test3.java
--------------------------
    //for using OpenCV3
import org.opencv.core.Core;

public class Test3 {

  private static String mv_this_Class_name = "Test3" ;

  public static void main ( String[] args ) {

    String this_methode_name = "main" ;

    System.out.println ( "----------------------------------" ) ;
    System.out.println ( "Enter into Class = " + mv_this_Class_name +
                      " : methode = " + this_methode_name ) ;

                    //prepare for using OpenCV3
    prepare ( ) ;

                  //initialize value
    Bridge.cv_Drawing_Scale_of_Showing_Image = 1.0 ;
    Bridge.cv_angle_around_Z = 30.0 ;
    Bridge.cv_angle_around_Y = -15.0 ;

                  //make instance of  image data processing
    Procc ins_Procc= new Procc ( ) ;
                 //set the instance into Mediater class
    Mediater.set_Procc ( ins_Procc ) ;

                 //make instance for data input
    JFrameDataInput  ins_JFrameDataInput
                                      = new JFrameDataInput (
                                     //width of Frame
                              1000
                                     //height of Frame
                           ,  100
                                    //topLeft Location x of Frame
                           ,  1
                                    //topLeft Location y of Frame
                           ,  1
                                             ) ;
    ins_JFrameDataInput.setVisible ( true ) ;
                //set the instance into Mediater class
    Mediater.set_JFrameDataInput ( ins_JFrameDataInput ) ;

                //make instance for showing image data
    JFrameShowImageData ins_JFrameShowImageData
                = new JFrameShowImageData (
                                   //title of frame
                                     "For Show Image Data"
                                  //width of Frame
                                      ,  1000
                                  //height of Frame
                                     ,  1000
                                  //topLeft Location x of Frame
                                     ,  1
                                  //topLeft Location y of Frame
                                     ,  95
                        ) ;
    ins_JFrameShowImageData.setVisible ( true ) ;
                  //set the instance into Mediater class
    Mediater.set_JFrameShowImageData ( ins_JFrameShowImageData ) ;

    Mediater.do_repaint_process ( ) ;

    System.out.println ( "Exit from Class = " + mv_this_Class_name +
                      " : methode = " + this_methode_name ) ;
    System.out.println ( "----------------------------------" ) ;
  }

//=====================
//prepare
//=====================
  private static void prepare ( ) {

      String this_methode_name = "prepare" ;

      System.out.println ( "    ----------------------------------" ) ;
      System.out.println ( "Enter into Class = " + mv_this_Class_name +
                          " : methode = " + this_methode_name ) ;      

      System.loadLibrary ( Core.NATIVE_LIBRARY_NAME ) ;

      System.out.println ( "Done : System.loadLibrary" ) ;

      System.out.println ( "Exit from Class = " + mv_this_Class_name +
                          " : methode = " + this_methode_name ) ;
      System.out.println ( "    ----------------------------------" ) ;
     }
}

-------------------------
==============================
Bridge.java
--------------------------
public class Bridge {

    public static double cv_Drawing_Scale_of_Showing_Image ;
    public static double  cv_angle_around_Z ;
    public static double  cv_angle_around_Y  ;
  }
-------------------------
==============================
ConstantValues.java
--------------------------
public class ConstantValues {

    public  static final String cv_path_of_dir_LayerImages
            = "F:OpenCvTest\\FilesForThreeDUsingImageData\\Layerimages" ;

    public  static final String cv_path_of_dir_BaseImage
            = "F:OpenCvTest\\FilesForThreeDUsingImageData\\Baseimage" ;

}
-------------------------
==============================
Mediater.java
--------------------------
//-------------------------------------------------
//Mediater
//-------------------------------------------------
class Mediater {

  public static String cv_this_Class_name = "Mediater" ;   

  public static JFrameDataInput cv_ins_JFrameDataInput ;
  public static JFrameShowImageData cv_ins_JFrameShowImageData ;
  public static Procc cv_ins_Procc ;

//----------------------------------------
  public static void set_JFrameDataInput (
                     JFrameDataInput para_ins_JFrameDataInput
                                                                               ) {

     cv_ins_JFrameDataInput = para_ins_JFrameDataInput ;
    }
//----------------------------------------
  public static void set_JFrameShowImageData (
               JFrameShowImageData para_ins_JFrameShowImageData
                                                                                          ) {

    cv_ins_JFrameShowImageData
             = para_ins_JFrameShowImageData ;
   }
//----------------------------------------
  public static void set_Procc (
                        Procc para_ins_Procc
                                                        ) {

     cv_ins_Procc = para_ins_Procc ;
   }

//----------------------------------------   
  public static void  do_repaint_process ( ) {

      cv_ins_Procc.edit_ImageData_for_display   ( ) ;

      cv_ins_JFrameShowImageData
               .set_display_image_BufferedImage
                          (  cv_ins_Procc.get_ins_BufferedImage_for_display () ) ;

      cv_ins_JFrameShowImageData
                   .do_repaint ( ) ;
    }
}

-------------------------
==============================
Procc.java
--------------------------
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc ;

import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.awt.image.WritableRaster;

//==========================
// Procc
//==========================
public class Procc {

  private String cv_this_Class_name = "Procc" ;

  private Mat cv_ins_Mat_contain_BaseImageData ;
  private int cv_width_of_BaseImageData ;
  private int cv_height_of_BaseImageData ;

private BufferedImage cv_ins_BufferedImage_for_display ;

  private ContainImageDatas cv_ins_ContainImageDatas_All_LayerS ;
  private int cv_number_of_layers ;

  private CreateImageForDisplay     cv_ins_CreateImageForDisplay ;

//======================
//Constructer
//======================   
  Procc ( ) {

    String this_methode_name = "constructer" ;

    System.out.println ( "----------------------------------" ) ;
    System.out.println ( "Enter into Class = " + cv_this_Class_name +
                              " : methode = " + this_methode_name ) ;

    cv_ins_Mat_contain_BaseImageData
               = load_BaseImageData ( ) ;

     cv_ins_BufferedImage_for_display
             = construct_BufferedImage_instance  (
                        cv_ins_Mat_contain_BaseImageData
                                                                                  ) ;

    cv_number_of_layers = 10 ;   
    cv_ins_ContainImageDatas_All_LayerS
               = new ContainImageDatas ( cv_number_of_layers ) ;

    cv_ins_CreateImageForDisplay
              = new CreateImageForDisplay (
                                cv_ins_Mat_contain_BaseImageData
                      ) ;

    System.out.println ( "----------------------------------" ) ;
    System.out.println ( "Exit from Class = " + cv_this_Class_name +
                              " : methode = " + this_methode_name ) ;
  }          

//=================================
//getter
//=================================
  public BufferedImage get_ins_BufferedImage_for_display () {

     return  cv_ins_BufferedImage_for_display ;
  }

//=================================
//edit_ImageData_for_display
//=================================
  public void edit_ImageData_for_display   ( ) {

        String this_methode_name = "edit_ImageData_for_display " ;

        System.out.println ( "----------------------------------" ) ;
        System.out.println ( "Enter into Class = " + cv_this_Class_name +
                              " : methode = " + this_methode_name ) ;

        cv_ins_Mat_contain_BaseImageData
                     = load_BaseImageData ( ) ;

        Mat ins_Mat_for_display
             = cv_ins_CreateImageForDisplay
                        .modify_BaseImageData_using_LayerImageDataS  (
                                Bridge.cv_angle_around_Z
                              , Bridge.cv_angle_around_Y
                              , cv_ins_Mat_contain_BaseImageData
                              , cv_ins_ContainImageDatas_All_LayerS
                                                             ) ;

        cv_ins_BufferedImage_for_display
           = convert_Mat_Image_to_BufferedImage (
                    ins_Mat_for_display
                 ,  cv_ins_BufferedImage_for_display
                                                                   ) ;

        System.out.println ( "Exit from Class = " + cv_this_Class_name +
                              " : methode = " + this_methode_name ) ;
        System.out.println ( "----------------------------------" ) ;
      }

//=================================
// convert Mat format Image to BufferedImage
//=================================
  private BufferedImage convert_Mat_Image_to_BufferedImage  (
                                                                 Mat para_ins_Mat
                                                              ,  BufferedImage para_ins_BufferedImage                                                            
                                                                                  ) {

    String this_methode_name = "convert_Mat_Image_to_BufferedImage" ;

    System.out.println ( "  ----------------------------------" ) ;
    System.out.println ( "Enter into Class = " + cv_this_Class_name +
                          " : methode = " + this_methode_name ) ;

            //get the area of BufferedImage instance
            //     that contains image data values
    WritableRaster ins_WritableRaster
                  = para_ins_BufferedImage.getRaster () ;
    DataBufferByte ins_DataBufferByte
                 = ( DataBufferByte ) ( ins_WritableRaster.getDataBuffer () ) ;
    byte[] array_byte = ins_DataBufferByte.getData ( ) ;
            //set image data into array_byte
            //             ( into para_ins_BufferedImage )
    para_ins_Mat.get ( 0 , 0 , array_byte ) ;

    System.out.println ( "image data have converted to BufferedImage") ;

    System.out.println ( "Exit from Class = " + cv_this_Class_name +
                " : methode = " + this_methode_name ) ;
    System.out.println ( "  ----------------------------------" ) ;

    return para_ins_BufferedImage    ;
   }

//=================================
//load BaseImageData
//=================================
  public Mat load_BaseImageData  ( ) {

    String this_methode_name = "load_BaseImageData" ;

    System.out.println ( "----------------------------------" ) ;
    System.out.println ( "Enter into Class = " + cv_this_Class_name +
                          " : methode = " + this_methode_name ) ;

                                //read the file directed by para_data_number   
    String w1 =  ConstantValues.cv_path_of_dir_BaseImage
                                    + "\\BaseImage.png" ;
    System.out.println ( "current : w1 = " + w1 ) ;

    cv_ins_Mat_contain_BaseImageData = null ;   
    cv_ins_Mat_contain_BaseImageData
                                   //Using OpenCV3
                    = Imgcodecs.imread ( w1 ) ;
     cv_width_of_BaseImageData
           = cv_ins_Mat_contain_BaseImageData
                                  .width () ;
    cv_height_of_BaseImageData
            = cv_ins_Mat_contain_BaseImageData
                                  .height () ;
    System.out.println ( "cv_width_of_BaseImageData = "
                                + cv_width_of_BaseImageData ) ;   
    System.out.println ( "cv_height_of_BaseImageData = "
                                + cv_height_of_BaseImageData ) ;

    System.out.println ( "Exit from Class = " + cv_this_Class_name +
                          " : methode = " + this_methode_name ) ;
    System.out.println ( "----------------------------------" ) ;

    return cv_ins_Mat_contain_BaseImageData ;
  }

//==========================    
//construct BufferedImage instance
//          related to Mat instance
//==========================    
  private BufferedImage construct_BufferedImage_instance  (
                                     Mat arg_ins_Mat
                                                                                                              ) {

    String this_methode_name = "construct_BufferedImage_instance" ;

    System.out.println ( "  ----------------------------------" ) ;
    System.out.println ( "Enter into Class = " + cv_this_Class_name +
                          " : methode = " + this_methode_name ) ;

           //get size of image data    
    Size ins_Size = arg_ins_Mat.size () ;

              //get type of Mat
    int type_of_Mat = 0 ;
    if ( ( arg_ins_Mat.channels () != 1 )
         &&
         ( arg_ins_Mat.channels () != 3 )
       ) {
      return null;
     }    
    if ( arg_ins_Mat.channels () == 1) {
      type_of_Mat = BufferedImage.TYPE_BYTE_GRAY ;
     }
    if ( arg_ins_Mat.channels () == 3 ) {
       type_of_Mat = BufferedImage.TYPE_3BYTE_BGR;
     }
             //construct instance of BufferedImage
    BufferedImage ins_BufferedImage
        = new BufferedImage (
                arg_ins_Mat.width () , arg_ins_Mat.height ()
                      , type_of_Mat ) ;

    System.out.println ( "Exit from Class = " + cv_this_Class_name +
            " : methode = " + this_methode_name ) ;
    System.out.println ( "  ----------------------------------" ) ;

     return ins_BufferedImage  ;
    }

}

-------------------------
==============================
CreateImageForDisplay.java

 下記中の、cv_array_value_Xdash_drawn は、陰線処理を行うためのものです。

--------------------------
import org.opencv.core.Mat;

public class CreateImageForDisplay {

      String cv_this_Class_name = "CreateImageForDisplay" ;

      Mat cv_ins_Mat_BaseImageData ;
      int cv_width_of_Mat_BaseImageData ;
      int cv_height_of_Mat_BaseImageData ;

      int cv_origin_cordinate_X_of_drawing ;
      int cv_origin_cordinate_Y_of_drawing ;
      double cv_scale_of_drawing ;
      int cv_thickness_of_layer ;

      double [ ] [ ]  cv_array_value_Xdash_drawn ;

            //for calculating the cordinate value after 3Dspace rotation      
      Rotation3DZY  cv_ins_Rotation3DZY ;

//======================
//Constructer
//======================   
  CreateImageForDisplay (
                      Mat para_ins_Mat_BaseImageData
                                              ) {

        String this_methode_name = "constructer" ;

        System.out.println ( "----------------------------------" ) ;
        System.out.println ( "Enter into Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;

        cv_scale_of_drawing = 1.0 ;
        cv_thickness_of_layer = 20 ;

        cv_ins_Mat_BaseImageData = para_ins_Mat_BaseImageData ;
        cv_width_of_Mat_BaseImageData
                     = cv_ins_Mat_BaseImageData.width ( ) ;
        cv_height_of_Mat_BaseImageData
                     = cv_ins_Mat_BaseImageData.height ( ) ;
        cv_origin_cordinate_X_of_drawing
                     = cv_width_of_Mat_BaseImageData / 2 ;
        cv_origin_cordinate_Y_of_drawing
                     = cv_height_of_Mat_BaseImageData / 2 ;

        make_Xdash_drawn_table (
                                     cv_width_of_Mat_BaseImageData
                                   , cv_height_of_Mat_BaseImageData
                                                            ) ;

        cv_ins_Rotation3DZY = new Rotation3DZY ( ) ;

         System.out.println ( "Exit from Class : "
                      + cv_this_Class_name
                      +   " , Methode : " + this_methode_name ) ;
         System.out.println ( "----------------------------------" ) ;
        }

//-------------------------------------
// make Xdash_drawn table
//-------------------------------------
   public   void make_Xdash_drawn_table (
            int para_width_of_BaseImageData
          , int para_height_of_BaseImageData
           ) {

        cv_array_value_Xdash_drawn = new double
                                                [ cv_width_of_Mat_BaseImageData ]                        
                                                [ cv_height_of_Mat_BaseImageData ]
                                                                        ;
     }
//-------------------------------------
// initialize Xdash_drawn table
//-------------------------------------
  public   void initialize_Xdash_drawn_table (  ) {

        for ( int i = 0 ; i < cv_width_of_Mat_BaseImageData ; i ++ ) {
            for ( int j = 0 ; j < cv_height_of_Mat_BaseImageData ; j ++ ) {            
                cv_array_value_Xdash_drawn
                        [ i ]     [ j ]  = -10000 ;            
            }            
         }   
      }

//-------------------------------------------------------------------   
//modify BaseImageData using LayerImageDataS
  //-------------------------------------------------------------------
    public  Mat  modify_BaseImageData_using_LayerImageDataS  (
                                        double para_angle_around_Z
                                      , double  para_angle_around_Y
                                      , Mat para_ins_Mat_contain_BaseImageData
                                      , ContainImageDatas
                                            para_ins_ContainImageDatas_All_LayerS
                                                                              ) {

        String  this_methode_name
                 = "modify_BaseImageData_using_LayerImageDataS" ;

        System.out.println ( "----------------------------------" ) ;
        System.out.println ( "Enter into Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;

        cv_ins_Mat_BaseImageData
               = para_ins_Mat_contain_BaseImageData ;

        initialize_Xdash_drawn_table (  ) ;
          prepare_for_rotation (
                      para_angle_around_Z
                    , para_angle_around_Y
                                 ) ;

          int number_of_layers
               = para_ins_ContainImageDatas_All_LayerS
                       .get_number_of_Mat (  ) ;

        for ( int number_of_Layer = 1
                         ; number_of_Layer <= number_of_layers
                         ; number_of_Layer ++ ) {

            System.out.println ( "Class = " + cv_this_Class_name +
                      " : methode = " + this_methode_name ) ;
            System.out.println ( "number_of_Layer  = " + number_of_Layer  ) ;

           draw_one_Layer (
                             number_of_Layer
                          , ( para_ins_ContainImageDatas_All_LayerS
                                      .get_Mat ( number_of_Layer ) )
                                         ) ;
          }

        System.out.println ( "Exit from Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;
        System.out.println ( "----------------------------------" ) ;

        return cv_ins_Mat_BaseImageData ;
    }
//------------------------------------------
//draw_one_Layer
//------------------------------------------   
    private void draw_one_Layer (
                                    int para_number_of_Layer
                                  , Mat para_ins_Mat_for_draw_layer_image
                                                             )  {

         int width_of_Mat
              = para_ins_Mat_for_draw_layer_image.width () ;
         int height_of_Mat
              = para_ins_Mat_for_draw_layer_image.height () ;
         int half_width_of_Mat = width_of_Mat / 2 ;
         int half_height_of_Mat = height_of_Mat / 2 ;

         int from_x = 0 - half_height_of_Mat + 2 ;
         int to_x =  half_height_of_Mat - 2 ;
         int from_y = 0 - half_width_of_Mat + 2 ;
         int to_y =  half_width_of_Mat - 2 ;       
         int from_z = para_number_of_Layer * cv_thickness_of_layer ;
         int to_z = ( para_number_of_Layer + 1 ) * cv_thickness_of_layer - 1 ;

         for ( int x = from_x ; x <= to_x ; x ++ ) {
             for ( int y = from_y ; y <= to_y ; y ++ ) {
                 for ( int z = from_z ; z <= to_z ; z ++ ) {
                   draw_one_point (
                           x , y , z
                          , para_ins_Mat_for_draw_layer_image
                          , half_width_of_Mat
                          , half_height_of_Mat
                                                     ) ;
                   }
               }
            }   

       }
//--------------------------------------------------
    private   char draw_one_point (
                           int para_x , int para_y , int para_z
                      , Mat para_ins_Mat_for_draw_layer_image
                      , int para_half_width_of_Mat
                      , int para_half_height_of_Mat
                                         ) {

      String this_methode_name = "draw_one_point" ;

      char return_value = 'E' ;

      double  [ ] drawing_color
           =  decide_drawing_color (
                            para_x , para_y
                         ,  para_ins_Mat_for_draw_layer_image
                      ,  para_half_width_of_Mat
                      ,  para_half_height_of_Mat
                        ) ;
      if ( ( drawing_color [ 0 ] > 250 )
              &&
              ( drawing_color [ 1 ] > 250 )
              &&
              ( drawing_color [ 2 ] > 250 )
              ) {
                //if color is near to white, do not draw this point
          return 'N' ;
      }

      double [  ]  after_rotation_cordinate   = new double  [ 3 ] ;
      double [  ]  before_rotation_cordinate   = new double  [ 3 ] ;
      before_rotation_cordinate [ 0 ] = para_x  ;      
      before_rotation_cordinate [ 1 ] = para_y  ;   
      before_rotation_cordinate [ 2 ]  = para_z ;

                     //calculate the cordinate value after 3Dspace rotation
      cv_ins_Rotation3DZY.calculate (
                               before_rotation_cordinate
                            ,  after_rotation_cordinate
                            )     ;
      int [ ] drawing_location_xy
                  = decide_drawing_location (  after_rotation_cordinate ) ;

      if ( ( drawing_location_xy [ 0 ] < 0 )
              ||
              ( drawing_location_xy [ 0 ] >= cv_width_of_Mat_BaseImageData )
              ||
              ( drawing_location_xy [ 1 ] < 0 )
              ||
              ( drawing_location_xy [ 1 ] >= cv_height_of_Mat_BaseImageData )            
          ) {
                      //can not draw this point
            System.out.println ( "***********************************" ) ;      
            System.out.println ( "Class = "
                          + cv_this_Class_name
                          +   " , Methode : " + this_methode_name ) ;
            System.out.println ( "Error" ) ;
            System.out.println ( "drawing_location_xy = "
                          +drawing_location_xy [ 0 ]
                         + " , " + drawing_location_xy [ 1 ] ) ;
            System.out.println ( "cv_width_of_Mat_BaseImageData = "
                         + cv_width_of_Mat_BaseImageData ) ;
            System.out.println ( "cv_height_of_Mat_BaseImageData = "
                           + cv_height_of_Mat_BaseImageData ) ;

            return return_value ;
         }

       double value_Xdash = after_rotation_cordinate [ 0 ] ;
       double w_Xdash_drawn
                  = cv_array_value_Xdash_drawn
                                 [ drawing_location_xy [ 0 ] ] [ drawing_location_xy [ 1 ]  ] ;
       if ( value_Xdash > w_Xdash_drawn ) {
                    //draw this location
           cv_ins_Mat_BaseImageData
                   .put (
                           drawing_location_xy [ 1 ]
                        ,  drawing_location_xy [ 0 ]
                         ,  drawing_color
                         ) ;
            cv_array_value_Xdash_drawn
                              [ drawing_location_xy [ 0 ] ]
                              [ drawing_location_xy [ 1 ]  ]
                   = value_Xdash ;
         }

      return_value = 'Y' ;
      return return_value ;
    } 

//---------------------------------------
//  decide_drawing_location
//---------------------------------------         
    private   int [ ] decide_drawing_location ( double [ ]  para_cordinate ) {

        int [ ] return_value = new int [ 2 ] ;

        return_value [ 0 ]
                        = ( int ) ( cv_origin_cordinate_X_of_drawing  +
                                             para_cordinate [ 1 ]
                                                   * cv_scale_of_drawing ) ;
        return_value [ 1 ]
                        = (int) ( cv_origin_cordinate_Y_of_drawing   -
                                                 para_cordinate [ 2]
                                                     * cv_scale_of_drawing ) ;

        return return_value ;
    }
//--------------------------------------------------   
   private   double [ ]  decide_drawing_color (
                             int para_x , int para_y
                              ,  Mat para_ins_Mat_for_draw_layer_image
                          ,  int para_half_width_of_Mat
                          ,  int para_half_height_of_Mat
                                                                ) {

       String this_methode_name = "decide_drawing_color" ;

       int get_X_on_Mat = para_y + para_half_width_of_Mat ;
       int get_Y_on_Mat =  para_x + para_half_height_of_Mat ;
       double [ ] get_color   
                    =  para_ins_Mat_for_draw_layer_image
                               .get (
                                       get_Y_on_Mat, get_X_on_Mat
                                        ) ;
        return get_color ;
   }

//------------------------------------------------------------------
  public   void prepare_for_rotation  (
              double  para_rotation_angle_around_Z_axis
            , double  para_rotation_angle_around_Y_axis
                                        ) {

      cv_ins_Rotation3DZY
               .prepare_RotationMatrix (
                          para_rotation_angle_around_Z_axis
                        , para_rotation_angle_around_Y_axis ) ;
     }

}


-------------------------
==============================
ContainImageDatas.java
--------------------------
import org.opencv.core.Mat ;
import org.opencv.imgcodecs.Imgcodecs ;

public class ContainImageDatas {

  private String cv_this_Class_name = "ContainImageDatas" ;

  private Mat [ ] cv_array_Mat ;
  private int cv_number_of_Mat ;

//======================
//Constructer
//======================   
  ContainImageDatas (
                    int para_number_of_Mat
                                          ) {

    String this_methode_name = "constructer" ;

    System.out.println ( "----------------------------------" ) ;
    System.out.println ( "Enter into Class = " + cv_this_Class_name +
                              " : methode = " + this_methode_name ) ;

    cv_number_of_Mat = para_number_of_Mat ;
    cv_array_Mat = new Mat [ cv_number_of_Mat ] ;

    StringBuffer  w1 = new StringBuffer () ;
    int w2 , w3 ;   

    for ( int i = 1 ; i <= para_number_of_Mat ; i ++ ) {
                         //make file path
        w1.setLength ( 0 ) ;
        w1.append ( ConstantValues.cv_path_of_dir_LayerImages ) ;
        w1.append ( "\\" ) ;
        w2 = i / 10 ;
        w3 = i % 10 ;
        w1.append ( "L" + w2 + w3 + ".png" ) ;   
                       //read the file directed by w1   
       cv_array_Mat [ i - 1 ]
                             //Using OpenCV3
                     = Imgcodecs.imread ( w1.toString () ) ;
       System.out.println ( "i = " + i ) ;
       System.out.println ( "w1 = " + w1 ) ;
       System.out.println ( "Loaded" ) ;
       System.out.println ( "width and height = "
                 + cv_array_Mat [ i - 1 ].width ()  + " , " + cv_array_Mat [ i - 1 ].height () ) ;   
      }

     System.out.println ( "Exit from Class : "
                  + cv_this_Class_name
                  +   " , Methode : " + this_methode_name ) ;
    }

//---------------------------------
  public Mat get_Mat ( int para_index_of_Mat ) {

     return cv_array_Mat [ para_index_of_Mat - 1 ] ;
    }
//---------------------------------
  public int get_number_of_Mat (  ) {

     return cv_number_of_Mat ;
    }
}


-------------------------
==============================
Rotation3DZY.java
--------------------------
public class Rotation3DZY {

  private String cv_Class_name = "Rotation3DZY" ;

             //Matrix for rotation ( 2 phase )
  private double [ ] [ ] [ ] cv_Matrix_for_rotation ;

//======================
//Constructer
//======================   
  Rotation3DZY ( ) {

    String this_methode_name = "Constructer" ;

    System.out.println ( "----------------------------------" ) ;      
    System.out.println ( "Enter into Class : "
                  + cv_Class_name
                  +   " , Methode : " + this_methode_name ) ;

    cv_Matrix_for_rotation
             = new double
                        //ration phase
                       [ 2 ]
                     //row                                     
                          [ 3 ]
                           //column
                          [ 3 ]
                     ;

    System.out.println ( "Exit from Class : "
              + cv_Class_name
              +   " , Methode : " + this_methode_name ) ;
    System.out.println ( "----------------------------------" ) ;      
  }

  //-----------------------------------------------------------------------
  public  void  prepare_RotationMatrix (
               double arg_rotation_angle_around_Z_axis
            ,  double arg_rotation_angle_around_Y_axis
                       ) {

    double cos_around_Z_axis
            = Math.cos ( Math.PI * ( arg_rotation_angle_around_Z_axis / 180.0 ) ) ;
    double sin_around_Z_axis
            = Math.sin ( Math.PI * ( arg_rotation_angle_around_Z_axis / 180.0 ) ) ;
    double cos_around_Y_axis
            = Math.cos ( Math.PI * ( arg_rotation_angle_around_Y_axis / 180.0 ) ) ;   
    double sin_around_Y_axis
            = Math.sin ( Math.PI * ( arg_rotation_angle_around_Y_axis / 180.0 ) ) ;

       //---------------------------------------------
         //phase 1 ( rotate around Z axis )
    cv_Matrix_for_rotation     [ 0 ] [ 0 ] [ 0 ] =
                    //cos ( rotation angle of phase 1 )
            cos_around_Z_axis ; 
    cv_Matrix_for_rotation [ 0 ]   [ 0 ] [ 1 ] =
                 //sin ( rotation angle of phase 1 )
            sin_around_Z_axis  ;   
    cv_Matrix_for_rotation     [ 0 ] [ 0 ] [ 2 ] = 0.0 ;

    cv_Matrix_for_rotation     [ 0 ] [ 1 ] [ 0 ] =
                  //- sin ( rotation angle of phase 1 )
                 ( 0.0 -  sin_around_Z_axis ) ;    
    cv_Matrix_for_rotation     [ 0 ] [ 1 ] [ 1 ]  =
                  //cos ( rotation angle of phase 1 )
            cos_around_Z_axis ; 
    cv_Matrix_for_rotation     [ 0 ] [ 1 ] [ 2 ] = 0.0 ;

    cv_Matrix_for_rotation     [ 0 ] [ 2 ] [ 0 ] = 0.0 ;
    cv_Matrix_for_rotation     [ 0 ] [ 2 ] [ 1 ] = 0.0 ;
    cv_Matrix_for_rotation     [ 0 ] [ 2 ] [ 2 ] = 1.0 ;

       //---------------------------------------------      
               //phase 2 ( rotate around Y axis )
    cv_Matrix_for_rotation     [ 1 ] [ 0 ] [ 0 ] =
                   //cos ( rotation angle of phase 2 )
            cos_around_Y_axis ; 
    cv_Matrix_for_rotation     [ 1 ] [ 0 ] [ 1 ] = 0.0 ; 
    cv_Matrix_for_rotation     [ 1 ] [ 0 ] [ 2 ] =
                   //- sin ( rotation angle of phase 2 )
                     ( 0.0 -  sin_around_Y_axis )  ; 

    cv_Matrix_for_rotation     [ 1 ] [ 1 ] [ 0 ] = 0.0 ; 
    cv_Matrix_for_rotation     [ 1 ] [ 1 ] [ 1 ]  = 1.0 ;
    cv_Matrix_for_rotation     [ 1 ] [ 1 ] [ 2 ] = 0.0 ;

    cv_Matrix_for_rotation [ 1 ] [ 2 ] [ 0 ] =
                   // sin ( rotation angle of phase 2 )
            sin_around_Y_axis   ;   
    cv_Matrix_for_rotation     [ 1 ] [ 2 ] [ 1 ] = 0.0 ;
    cv_Matrix_for_rotation     [ 1 ] [ 2 ] [ 2 ] =
                   //cos ( rotation angle of phase 2 )
            cos_around_Y_axis ; 
       //---------------------------------------------      

    }

  //--------------------------------------------------------------------------
   public  void  calculate (
                    double [ ] arg_vector_before_rotation
                   , double  [ ] arg_vector_after_rotation
                               ) {

                     //apply phase 1 rotation
              double [ ] ins_value_after_phase1 = new double [ 3 ] ;

              Matrix33Calc.calculate (
                               cv_Matrix_for_rotation [ 0 ]
                            ,  arg_vector_before_rotation
                            ,  ins_value_after_phase1
                                                         ) ;

                         //apply phase 2 rotation
              Matrix33Calc.calculate (
                         cv_Matrix_for_rotation [ 1 ]
                      ,  ins_value_after_phase1
                      ,  arg_vector_after_rotation
                                                   ) ;
           }
         }


-------------------------
==============================
Matrix33Calc.java
--------------------------
//----------------------------------------------
// calculate the values using 3 3 Matrix
//----------------------------------------------

public class Matrix33Calc {

  public static void  calculate (
            double [ ] [ ] arg_Matrix
         ,  double [ ] arg_vector_operation_applied
         , double  [ ] arg_vector_operation_result
                                         ) {

      for ( int index_row = 0 ; index_row <= 2 ; index_row ++ ) {

          arg_vector_operation_result [ index_row ] =
                  arg_Matrix [ index_row ] [ 0 ]
                          * arg_vector_operation_applied [ 0 ]      
             +  arg_Matrix [ index_row ] [ 1 ]
                          * arg_vector_operation_applied [ 1 ] 
             + arg_Matrix [ index_row ] [ 2 ]
                         * arg_vector_operation_applied [ 2 ]
                     ;                     
       }   
     }
}

-------------------------
==============================
JFrameShowImageData.java
--------------------------
import java.awt.Graphics ;
import java.awt.image.BufferedImage ;
import java.awt.Color ;

import javax.swing.JFrame ;
import javax.swing.JPanel ;

//-------------------------------------------------
//JFrame for showing image data
//-------------------------------------------------
class JFrameShowImageData extends JFrame {

  private String mv_this_Class_name = " JFrameShowImageData" ;

          //for display image
  private JPanelShowImageData  cv_ins_JPanelShowImageData ;

  private int cv_width_of_Frame ;
  private int cv_height_of_Frame;
  private int cv_topLeftLocation_x_of_Frame ;
  private int cv_topLeftLocation_y_of_Frame ;

//======================
//Constructer
//======================   
    JFrameShowImageData (
            String para_title
          , int para_width_of_Frame      
          , int para_height_of_Frame    
          , int para_topLeftLocation_x_of_Frame      
          , int para_topLeftLocation_y_of_Frame    
                              ) {

      String this_methode_name = "constructer" ;

      System.out.println ( "----------------------------------" ) ;
      System.out.println ( "Enter into Class = " + mv_this_Class_name +
                          " : methode = " + this_methode_name ) ;

      cv_width_of_Frame = para_width_of_Frame ;
      cv_height_of_Frame = para_height_of_Frame ;
      cv_topLeftLocation_x_of_Frame
                  = para_topLeftLocation_x_of_Frame ;
      cv_topLeftLocation_y_of_Frame
                  = para_topLeftLocation_y_of_Frame ;

      setTitle ( para_title ) ;
      setBounds (
           cv_topLeftLocation_x_of_Frame
          , cv_topLeftLocation_y_of_Frame            
          , cv_width_of_Frame
          , cv_height_of_Frame
                ) ;
      setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ) ;

      cv_ins_JPanelShowImageData
             = new JPanelShowImageData ( )  ;
      add ( cv_ins_JPanelShowImageData ) ;
    }

//=================================
//  set_display_image_BufferedImage
//=================================   
  public  void set_display_image_BufferedImage (
                                             BufferedImage para_ins_BufferedImage
                                                                                            ) {

     cv_ins_JPanelShowImageData
               .set_BufferedImage ( para_ins_BufferedImage ) ;
   }

//=================================
//do_repaint
//=================================   
  public  void do_repaint ( ) {

     cv_ins_JPanelShowImageData
                    .do_repaint ( ) ;
   }

}

//-------------------------------------------------------------------------------------
class JPanelShowImageData extends JPanel {

   private String cv_this_Class_name = "JPanelShowImageData" ;

   private BufferedImage cv_ins_BufferedImage ;
   private int  cv_width_of_Drawing ;
   private int  cv_height_of_Drawing ;
   private int cv_width_of_BufferedImage ;
   private int cv_height_of_BufferedImage ;

//=================================    
//set_BufferedImage 
//=================================      
   public void set_BufferedImage (
                                  BufferedImage para_BufferedImage             
                                                                 ) {

      String this_methode_name = "set_BufferedImage" ;

      System.out.println ( "  ----------------------------------" ) ;
      System.out.println ( "Enter into Class = " + cv_this_Class_name +
                                        " : methode = " + this_methode_name ) ;

      cv_ins_BufferedImage = para_BufferedImage ;
      cv_width_of_BufferedImage
            = cv_ins_BufferedImage.getWidth ( ) ;
      cv_height_of_BufferedImage
            = cv_ins_BufferedImage.getHeight ( ) ;

        System.out.println ( "cv_width_of_BufferedImage = "  +
             cv_width_of_BufferedImage ) ;
      System.out.println ( "cv_height_of_BufferedImage = "  +
            cv_height_of_BufferedImage ) ;

      System.out.println ( "  ----------------------------------" ) ;
      System.out.println ( "Exit from Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;
     }

//=================================   
//do_repaint
//=================================    
  public void do_repaint ( ) {

     compute_Size_of_Drawing ( ) ;
     repaint ( ) ;
    }

//======================
//paint image
//======================
  public void paint ( Graphics para_ins_Graphics ) {

                            //clear Panel      
      Color ins_Color_for_clear = new Color ( 0 , 0 , 100 ) ;
      para_ins_Graphics
               .setColor ( ins_Color_for_clear ) ;
      para_ins_Graphics
               .fillRect (
                      0, 0,
                      cv_width_of_BufferedImage
                    , cv_height_of_BufferedImage
                              ) ;
                            //draw image      
      para_ins_Graphics.drawImage (
                       cv_ins_BufferedImage
                     , 0 , 0
                     , cv_width_of_Drawing
                     , cv_height_of_Drawing
                     , this
                                                               ) ;
    }

//=================================    
//compute_Size_of_Drawing   
//=================================   
    public  void compute_Size_of_Drawing ( ) {

      String this_methode_name = "compute_Size_of_Drawing" ;

        System.out.println ( "  ----------------------------------" ) ;
        System.out.println ( "Enter into Class = " + cv_this_Class_name +
                                    " : methode = " + this_methode_name ) ;

        cv_width_of_Drawing = ( int )
                (  cv_width_of_BufferedImage
                         * Bridge.cv_Drawing_Scale_of_Showing_Image ) ;
        cv_height_of_Drawing = ( int )
                (  cv_height_of_BufferedImage
                         * Bridge.cv_Drawing_Scale_of_Showing_Image ) ;

        System.out.println ( "cv_width_of_BufferedImage = "
                     + cv_width_of_BufferedImage ) ;
        System.out.println ( " cv_height_of_BufferedImage = "
                     +  cv_height_of_BufferedImage ) ;
        System.out.println ( "Bridge.cv_Drawing_Scale_of_Showing_Image = "
             + Bridge.cv_Drawing_Scale_of_Showing_Image ) ;
        System.out.println ( "cv_width_of_Drawing = " + cv_width_of_Drawing ) ;
        System.out.println ( "cv_height_of_Drawing = " + cv_height_of_Drawing ) ;

        System.out.println ( "Exit from Class = " + cv_this_Class_name +
                                    " : methode = " + this_methode_name ) ;
        System.out.println ( "  ----------------------------------" ) ;
     }

}

-------------------------
==============================
JFrameDataInput.java
--------------------------
import java.awt.BorderLayout ;
import java.awt.Dimension ;
import java.awt.Font ;
import java.awt.event.ActionEvent ;
import java.awt.event.ActionListener ;

import javax.swing.JFrame ;
import javax.swing.JPanel ;
import javax.swing.JLabel ;
import javax.swing.JTextField ;

//-------------------------------------------------
//JFrame for intput data
//-------------------------------------------------
class JFrameDataInput extends JFrame {

    private String mv_this_Class_name = "JFrameDataInput" ;

    private final String cv_title_of_JFrame = "For Data Input" ;   

    private int cv_width_of_Frame ;
    private int cv_height_of_Frame;
    private int cv_topLeftLocation_x_of_Frame ;
    private int cv_topLeftLocation_y_of_Frame ;

    //======================
    //Constructer
    //======================   
  JFrameDataInput (
                       int para_width_of_Frame      
                     , int para_height_of_Frame    
                     , int para_topLeftLocation_x_of_Frame      
                     , int para_topLeftLocation_y_of_Frame    
          ) {

    String this_methode_name = "constructer" ;

    System.out.println ( "----------------------------------" ) ;
    System.out.println ( "Enter into Class = " + mv_this_Class_name +
                              " : methode = " + this_methode_name ) ;

    cv_width_of_Frame = para_width_of_Frame ;
    cv_height_of_Frame = para_height_of_Frame ;
    cv_topLeftLocation_x_of_Frame
                  = para_topLeftLocation_x_of_Frame ;
    cv_topLeftLocation_y_of_Frame
                  = para_topLeftLocation_y_of_Frame ;

    setTitle ( cv_title_of_JFrame ) ;
    setBounds (
               cv_topLeftLocation_x_of_Frame
              , cv_topLeftLocation_y_of_Frame            
              , cv_width_of_Frame
               , cv_height_of_Frame
                  ) ;
    setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ) ;

    JPanel ins_JPanel = new JPanel () ;

         //---------------------------      
      JLabel ins_1_JLabel = new JLabel ( "Angle around Z axis = " ) ;
      ins_1_JLabel.setFont ( new Font ( "Serif", Font.PLAIN , 25 ) ) ;
      JTextField ins_1_JTextField = new JTextField ( "30.0" ) ;
      ins_1_JTextField.setPreferredSize ( new Dimension ( 80, 40 ) ) ;
      ins_1_JTextField.setFont ( new Font ( "Serif", Font.PLAIN , 25 ) ) ;
      ActionListenerText1 ins_ActionListenerText1
                      = new ActionListenerText1 ( ) ;
      ins_1_JTextField.addActionListener ( ins_ActionListenerText1 ) ;
      ins_JPanel.add ( ins_1_JLabel ) ;
      ins_JPanel.add ( ins_1_JTextField ) ;
         //---------------------------      
      JLabel ins_2_JLabel = new JLabel ( "Angle around Y axis  = " ) ;
      ins_2_JLabel.setFont ( new Font ( "Serif", Font.PLAIN , 25 ) ) ;
       JTextField ins_2_JTextField = new JTextField ( "-15.0" ) ;
      ins_2_JTextField.setPreferredSize ( new Dimension ( 80, 40 ) ) ;
      ins_2_JTextField.setFont ( new Font ( "Serif", Font.PLAIN , 25 ) ) ;
      ActionListenerText2 ins_ActionListenerText2
                    = new ActionListenerText2 ( ) ;
      ins_2_JTextField.addActionListener ( ins_ActionListenerText2 ) ;
      ins_JPanel.add ( ins_2_JLabel ) ;
      ins_JPanel.add ( ins_2_JTextField ) ;
         //---------------------------      
      JLabel ins_3_JLabel = new JLabel ( "Drawing Scale  = " ) ;
      ins_3_JLabel.setFont ( new Font ( "Serif", Font.PLAIN , 25 ) ) ;
      JTextField ins_3_JTextField = new JTextField ( "1.0" ) ;
      ins_3_JTextField.setPreferredSize ( new Dimension ( 80, 40 ) ) ;
      ins_3_JTextField.setFont ( new Font ( "Serif", Font.PLAIN , 25 ) ) ;
      ActionListenerText3 ins_ActionListenerText3
                    = new ActionListenerText3 ( ) ;
      ins_3_JTextField.addActionListener ( ins_ActionListenerText3 ) ;
      ins_JPanel.add ( ins_3_JLabel ) ;
      ins_JPanel.add ( ins_3_JTextField ) ;
//---------------------------      
      add ( ins_JPanel , BorderLayout.CENTER ) ;
    }
}

//-------------------------------------------------------
class ActionListenerText1 implements ActionListener {

  private String mv_this_Class_name = "ActionListenerText1" ;

  public void actionPerformed ( ActionEvent para_ins_ActionEvent ) {

    String this_methode_name = "actionPerformed" ;

    System.out.println ( "----------------------------------" ) ;
    System.out.println ( "Enter into Class = " + mv_this_Class_name +
                          " : methode = " + this_methode_name ) ;

               //get JTextField instance related
    JTextField ins_JTextField
           = ( JTextField ) ( para_ins_ActionEvent.getSource () ) ;
              //set value to related variety
    Bridge.cv_angle_around_Z
             = Double.parseDouble ( ins_JTextField.getText () ) ;
             //request process to Mediater
    Mediater.do_repaint_process ( ) ;

    System.out.println ( "Exit from Class = " + mv_this_Class_name +
                          " : methode = " + this_methode_name ) ;
    System.out.println ( "----------------------------------" ) ;
   }
}
//-------------------------------------------------------
class ActionListenerText2 implements ActionListener {

private String mv_this_Class_name = "ActionListenerText2" ;

public void actionPerformed ( ActionEvent para_ins_ActionEvent ) {

  String this_methode_name = "actionPerformed" ;

  System.out.println ( "----------------------------------" ) ;
  System.out.println ( "Enter into Class = " + mv_this_Class_name +
                                " : methode = " + this_methode_name ) ;

                        //get JTextField instance related
  JTextField ins_JTextField
                = ( JTextField ) ( para_ins_ActionEvent.getSource () ) ;
                       //set value to related variety
  Bridge.cv_angle_around_Y
               = Double.parseDouble ( ins_JTextField.getText () ) ;
                      //request process to Mediater
  Mediater.do_repaint_process ( ) ;

  System.out.println ( "Exit from Class = " + mv_this_Class_name +
                 " : methode = " + this_methode_name ) ;
  System.out.println ( "----------------------------------" ) ;
}
}

//-------------------------------------------------------
class ActionListenerText3 implements ActionListener {

  private String mv_this_Class_name = "ActionListenerText3" ;

  public void actionPerformed ( ActionEvent para_ins_ActionEvent ) {

    String this_methode_name = "actionPerformed" ;

    System.out.println ( "----------------------------------" ) ;
    System.out.println ( "Enter into Class = " + mv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;

                          //get JTextField instance related
    JTextField ins_JTextField
                  = ( JTextField ) ( para_ins_ActionEvent.getSource () ) ;
                         //set value to related variety
    Bridge.cv_Drawing_Scale_of_Showing_Image
                 = Double.parseDouble ( ins_JTextField.getText () ) ;
                        //request process to Mediater
    Mediater.do_repaint_process ( ) ;

    System.out.println ( "Exit from Class = " + mv_this_Class_name +
                   " : methode = " + this_methode_name ) ;
    System.out.println ( "----------------------------------" ) ;
   }
}

------------------------------------------------

コンピューター・プログラム 制作 インデックス

Java プログラム 制作 関数(数学の)形を表示する

コンピューター・プログラム 制作 インデックス

関数(数学の)形を表示する、というコンピューター・プログラムを制作しました、Java言語で。

以下に、その様を記述しますが、その記述内容は、このようなコンピューター・プログラムを制作した、それを動かしたら、このような結果になった、というような事を、ただ、淡々と述べているに過ぎません。

下記の記述をお読みになった方が、それを単に参考にする、というのであれば、問題は無いと思われます。

しかし、記述されている内容に沿って、その方がそこに記されているのと同様の制作や作業を行われた際に、その制作や作業の結果、使用されたコンピューター等、様々な方面において、何らかの問題が発生しない、という保証は、全くありません。

その作業の結果、その方や、その方が使用された様々な器機、インフラ等の身の上にどのような事が起ころうとも、私は一切、責任を負いません。

------------
1 できたもの

制作作業の結果、できたのが、下記のようなコンピューター・プログラムです。

起動すると、下記のような2つの画面が、コンピューターのディスプレイ上に表示されます。

Fig1

Fig1

これは、

 y = sin ( π × ( x / 6 ) )

という関数の、x と y の値を、プロットしたものです。

このコンピューター・プログラム中のある場所(後で詳しく述べます)に、Java言語で下記のように記述が行われているので、このように、その関数の形が表示されているのです。

       double y_value
             = Math.sin ( Math.PI * ( para_x_value / 6.0 ) ) ;

[For Data Input] 画面は、プログラムに対する操作の指示や、データ入力を行うためのものです。ここから様々な値を入力することにより、表示される関数の形を変えることができます。

例えば、下図のように、[ To X ]の値を変えることにより、関数の値が表示されるx値の範囲を変更することができます。

Fig2

Fig2

更に、下図のように、[ Interval X ]の値を変えることにより、関数の値が表示されるx値を、更にきめ細かく設定することができます。

Fig3

Fig3

表示対象となる関数の定義式を書いておく場所は、プログラム中の、下記の場所です:

  (このプログラムのソースリストが、後の方にあります)

Procc.java ファイル中の
 Procc クラス の記述の中の
  defined_function メソッドの記述

そこに、下記のように書いておいたのです。

//=================================
//defined_function
//=================================
    private double defined_function ( double para_x_value ) {

//***************************************************
       double y_value
             = Math.sin ( Math.PI * ( para_x_value / 6.0 ) ) ;
//***************************************************

        return y_value ;
     }

この部分を、下記のように書き直してみました。関数の定義を書き直したのです。

//=================================
//defined_function
//=================================
    private double defined_function ( double para_x_value ) {

//***************************************************
        double y_value
              = 0.3 * Math.sin ( Math.PI * ( para_x_value / 6.0 ) )
                 +
                 0.7 * Math.sin ( Math.PI * ( para_x_value / 3.0 ) )
                 ;
//***************************************************

        return y_value ;
     }

書き直しを行った後のプログラムを起動すると、下記のようになりました。

Fig4

Fig4

更に、この部分を、下記のように書き直してみました。関数の定義を書き直したのです。

//=================================
//defined_function
//=================================
    private double defined_function ( double para_x_value ) {

//***************************************************
        double y_value = 0.0 ;

        if ( para_x_value <= 8.0 ) {
            y_value = para_x_value * para_x_value ;      
          }
        else {
            y_value = 64.0 + ( para_x_value - 8.0 ) * 0.5 ;      
          }
//***************************************************

        return y_value ;
     }

書き直しを行った後のプログラムを起動すると、下記のようになりました。

Fig5

Fig5

------------
2 使用したコンピューターとソフトウェア

この、コンピューター・プログラムを制作・実行するために使用したものは、下記の通りです。

コンピューター

 CPU : Core(TM) i7-7700HQ
 メモリー : 16 GB
 Operating System : Windows 10 Home, 64ビットオペレーティングシステム

Java

 jdk-8u181-windows-x64.exe

------------
3 ソースリスト

このコンピューター・プログラムのソースリストを、以下に記します。

複数個のファイルに分割して記述しました。

==============================
Test3.java
----------------------
public class Test3 {

  private static String cv_this_Class_name = "Test3" ;

  public static void main ( String[] args ) {

    String this_methode_name = "main" ;

    System.out.println ( "----------------------------------" ) ;
    System.out.println ( "Enter into Class = " + cv_this_Class_name +
                      " : methode = " + this_methode_name ) ;

                  //initialize value
    Bridge.cv_From_X = 0.0 ;
    Bridge.cv_To_X = 20.0 ;
    Bridge.cv_Interval_X = 0.2 ;
    Bridge.cv_Magnification_X = 1.0 ;
    Bridge.cv_Magnification_Y = 1.0 ;
    Bridge.cv_Length_Side_of_DrawingSquare = 8 ;

    Bridge.cv_Number_of_X_values_String = 6 ;
    Bridge.cv_Number_of_Y_values_String = 5 ;

                  //make instance of  data processing
    Procc ins_Procc
        = new Procc ( ) ;
                 //set the instance into Mediater class
    Mediater.set_Procc ( ins_Procc ) ;

                 //make instance for data input
    JFrameDataInput  ins_JFrameDataInput
                                      = new JFrameDataInput (
                                     //width of Frame
                              1500
                                     //height of Frame
                           ,  150
                                    //topLeft Location x of Frame
                           ,  1
                                    //topLeft Location y of Frame
                           ,  1
                                             ) ;
    ins_JFrameDataInput.setVisible ( true ) ;
                //set the instance into Mediater class
    Mediater.set_JFrameDataInput ( ins_JFrameDataInput ) ;

                //make instance for display
    JFrameDisplay ins_JFrameDisplay
                = new JFrameDisplay (
                                   //title of frame
                                     "For Display"
                                  //width of Frame
                                      ,  1500
                                  //height of Frame
                                     ,  900
                                  //topLeft Location x of Frame
                                     ,  1
                                  //topLeft Location y of Frame
                                     ,  144
                        ) ;
    ins_JFrameDisplay.setVisible ( true ) ;

                //set the instance into Mediater class
    Mediater.set_JFrameDisplay (
                    ins_JFrameDisplay
                                        ) ;

                //let Mediater to draw
    Mediater.draw_shape_of_function ( ) ;

    System.out.println ( "Exit from Class = " + cv_this_Class_name +
                      " : methode = " + this_methode_name ) ;
    System.out.println ( "----------------------------------" ) ;
  }

}

==============================
Bridge.java
----------------------
public class Bridge {

    public static double cv_From_X ;
    public static double cv_To_X ;
    public static double cv_Interval_X ;
    public static double cv_Magnification_X ;
    public static double cv_Magnification_Y ;
    public static int cv_Length_Side_of_DrawingSquare ;
    public static int cv_Number_of_X_values_String ;
    public static int cv_Number_of_Y_values_String ;
  }
==============================
Mediater.java
----------------------
//-------------------------------------------------
//Mediater
//-------------------------------------------------
class Mediater {   

  public static JFrameDataInput cv_ins_JFrameDataInput ;
  public static JFrameDisplay cv_ins_JFrameDisplay ;
  public static Procc cv_ins_Procc ;

//----------------------------------------
  public static void set_JFrameDataInput (
          JFrameDataInput para_ins_JFrameDataInput
                     ) {

     cv_ins_JFrameDataInput = para_ins_JFrameDataInput ;
    }
//----------------------------------------
  public static void set_JFrameDisplay (
           JFrameDisplay para_ins_JFrameDisplay
                   ) {

    cv_ins_JFrameDisplay
             = para_ins_JFrameDisplay ;
   }
//----------------------------------------
  public static void set_Procc  (
          Procc para_ins_Procc
                       ) {

     cv_ins_Procc = para_ins_Procc ;
   }

//-------------------------------------
  public static void draw_shape_of_function ( ) {

      cv_ins_Procc
                   .calculate_function_value ( ) ;

      cv_ins_JFrameDisplay
            .set_display_information (
                 cv_ins_Procc.get_array_X_values ()
              ,  cv_ins_Procc.get_array_Y_values ()
              ,  cv_ins_Procc.get_number_of_values ()
                    ) ;

      cv_ins_JFrameDisplay
                    .do_repaint ( ) ;
   }
}

==============================
Procc.java
----------------------
//==========================
// Procc
//==========================
public class Procc {

  private String cv_this_Class_name = "Procc" ;

  private double [ ] cv_array_X_values ;
  private double [ ] cv_array_Y_values ;
  private int cv_number_of_values ;

//----------------------------
   public double [ ] get_array_X_values () {
       return cv_array_X_values ;
    }
//----------------------------
   public double [ ] get_array_Y_values () {
       return cv_array_Y_values ;
    }
//---------------------------- 
   public int get_number_of_values () {
       return cv_number_of_values ;
    }

//=================================
//calculate  function value
//=================================
  public void calculate_function_value ( )  {

      String this_methode_name = "calculate_function_value" ;

      System.out.println ( "----------------------------------" ) ;
      System.out.println ( "Enter into Class = " + cv_this_Class_name +
                          " : methode = " + this_methode_name ) ;

      int w1 = ( int ) ( ( Bridge.cv_To_X - Bridge.cv_From_X )
                                           / Bridge.cv_Interval_X
                                  ) ;
      cv_number_of_values = w1 + 1 ;
      cv_array_X_values = null ;
      cv_array_X_values = new double [ cv_number_of_values ] ;
      cv_array_Y_values = null ;
      cv_array_Y_values = new double [ cv_number_of_values ] ;

      double x_value = Bridge.cv_From_X ;
      double y_value = 0.0 ;

       for ( int i = 0 ; i < cv_number_of_values ; i ++ ) {
          y_value = defined_function ( x_value ) ;
          cv_array_X_values [ i ] = x_value ;
          cv_array_Y_values [ i ] = y_value  ;
          x_value += Bridge.cv_Interval_X ;
        }

      System.out.println ( "Exit from Class = " + cv_this_Class_name +
                    " : methode = " + this_methode_name ) ;
      System.out.println ( "----------------------------------" ) ;
    }

//=================================
//defined_function
//=================================
    private double defined_function ( double para_x_value ) {

//***************************************************
       double y_value
             = Math.sin ( Math.PI * ( para_x_value / 6.0 ) ) ;
//***************************************************

        return y_value ;
     }

}

==============================
JFrameDisplay.java
----------------------
      import java.awt.Graphics ;
      import java.awt.image.BufferedImage ;
      import java.awt.Color ;

      import javax.swing.JFrame ;
      import javax.swing.JPanel ;

//-------------------------------------------------
//JFrame for Display
//-------------------------------------------------
class JFrameDisplay extends JFrame {

  private String cv_this_Class_name = " JFrameDisplay" ;

                //for display image
  private JPanelDisplay cv_ins_JPanelDisplay ;

  private int cv_width_of_Frame ;
  private int cv_height_of_Frame;
  private int cv_topLeftLocation_x_of_Frame ;
  private int cv_topLeftLocation_y_of_Frame ;

//======================
//Constructer
//======================   
  JFrameDisplay (
                    String para_title
                 ,  int para_width_of_Frame      
                , int para_height_of_Frame    
                , int para_topLeftLocation_x_of_Frame      
                , int para_topLeftLocation_y_of_Frame    
                                    ) {

    String this_methode_name = "constructer" ;

      System.out.println ( "----------------------------------" ) ;
    System.out.println ( "Enter into Class = " + cv_this_Class_name +
                                " : methode = " + this_methode_name ) ;

    cv_width_of_Frame = para_width_of_Frame ;
    cv_height_of_Frame = para_height_of_Frame ;
     cv_topLeftLocation_x_of_Frame
                        = para_topLeftLocation_x_of_Frame ;
    cv_topLeftLocation_y_of_Frame
                        = para_topLeftLocation_y_of_Frame ;

    setTitle ( para_title ) ;
    setBounds (
                 cv_topLeftLocation_x_of_Frame
                , cv_topLeftLocation_y_of_Frame            
                , cv_width_of_Frame
                , cv_height_of_Frame
                      ) ;
    setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ) ;

     cv_ins_JPanelDisplay
                   = new JPanelDisplay ( )  ;
    add ( cv_ins_JPanelDisplay ) ;

    System.out.println ( "  ----------------------------------" ) ;
    System.out.println ( "Exit from Class = " + cv_this_Class_name +
                                    " : methode = " + this_methode_name ) ;
   }

//=================================
//  set_display_information
//=================================   
  public  void  set_display_information (
                            double [ ] para_array_X_values
                         ,  double [ ] para_array_Y_values
                         ,  int para_number_of_values
                                                        ) {

    cv_ins_JPanelDisplay
                        .set_display_information (
                                 para_array_X_values
                              ,  para_array_Y_values
                              ,  para_number_of_values
                              ,  cv_width_of_Frame
                              ,  cv_height_of_Frame
                                                          ) ;
   }

//=================================
//do_repaint
//=================================   
  public  void do_repaint ( ) {

    cv_ins_JPanelDisplay
                .do_repaint ( ) ;
   }

}

//---------------------------------------------------------------------
class JPanelDisplay extends JPanel {

  private String cv_this_Class_name = "JPanelDisplay" ;

         //for contain calculated values      
  private double [ ] cv_array_X_values ;
  private double [ ] cv_array_Y_values ;
  private int cv_number_of_values ;

  private int cv_width_of_Frame ;
  private int cv_height_of_Frame  ;

//=================================
// set_display_information
//=================================   
  public  void  set_display_information (
                        double [ ] para_array_X_values
                     ,  double [ ] para_array_Y_values
                     ,  int para_number_of_values
                     ,  int para_width_of_Frame
                       ,  int para_height_of_Frame
                                                    ) {

    String this_methode_name = "set_display_information" ;

    System.out.println ( "  ----------------------------------" ) ;
    System.out.println ( "Enter into Class = " + cv_this_Class_name +
                                       " : methode = " + this_methode_name ) ;

    cv_array_X_values = para_array_X_values ;
    cv_array_Y_values = para_array_Y_values ;
    cv_number_of_values = para_number_of_values ;
    cv_width_of_Frame = para_width_of_Frame ;
    cv_height_of_Frame = para_height_of_Frame ;

    System.out.println ( "  ----------------------------------" ) ;
    System.out.println ( "Exit from Class = " + cv_this_Class_name +
                                       " : methode = " + this_methode_name ) ;
   }

//=================================   
//do_repaint
//=================================    
  public void do_repaint ( ) {

    repaint ( ) ;
   }

//======================
//paint image
//======================
  public void paint ( Graphics para_ins_Graphics ) {

    PaintProcess.
               paint (
                          para_ins_Graphics
                        ,  cv_array_X_values
                          ,  cv_array_Y_values
                        ,  cv_number_of_values
                        ,  cv_width_of_Frame
                        ,  cv_height_of_Frame
                                                      ) ;

   }      
}

==============================
PaintProcess.java
----------------------
import java.awt.Graphics ;
import java.awt.Font ;
import java.awt.Color;

class PaintProcess {

  private static String cv_this_Class_name = "PaintProcess" ;

  private static Graphics cv_ins_Graphics ;
  private static int  cv_width_of_Frame  ;
   private static int  cv_height_of_Frame ;

   private static int  cv_width_of_drawingArea ;
   private static int  cv_height_of_drawingArea ;

   private static int cv_drawing_begin_x  ;
   private static int cv_drawing_begin_y  ;

   private static double cv_interval_X ;   
   private static double cv_interval_Y  ;

   private static double cv_Min_X ;   
   private static double cv_Max_X  ;         
   private static double cv_Min_Y ;   
   private static double cv_Max_Y  ;

    private static double cv_scale_X ;
    private static double cv_scale_Y ;

//======================
//paint
//======================
    public static void paint (
                   Graphics para_ins_Graphics
                ,  double [ ] para_array_X_values
                ,  double [ ] para_array_Y_values
                ,  int para_number_of_values
                ,  int para_width_of_Frame
                ,  int para_height_of_Frame
               ) {

    String this_methode_name = "paint" ;

    System.out.println ( "----------------------------------" ) ;
    System.out.println ( "Enter into Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;

    decide_Min_and_Max (
                    para_array_X_values
                  , para_array_Y_values
                  , para_number_of_values
                                             ) ;

    cv_width_of_Frame = para_width_of_Frame ;
    cv_width_of_drawingArea
            = ( int ) ( ( cv_width_of_Frame - 100 )
                                        * Bridge.cv_Magnification_X ) ;
    cv_height_of_Frame = para_height_of_Frame ;
    cv_height_of_drawingArea
            = ( int ) ( ( cv_height_of_Frame - 100 )
                                        * Bridge.cv_Magnification_Y ) ;

    cv_drawing_begin_x = 300 ;
    cv_drawing_begin_y  = 200 ;

    cv_scale_X
          = ( (double)( cv_width_of_drawingArea - cv_drawing_begin_x ) )
                                             / (  cv_Max_X - cv_Min_X )
                                             ;
    double very_small_value = 0.00000001 ;
    if ( (  cv_Max_Y - cv_Min_Y ) < very_small_value ) {
        cv_scale_Y
            = ( (double)( cv_height_of_drawingArea - cv_drawing_begin_y ) )
                        / very_small_value
                        ;               
      }
    else {
        cv_scale_Y = ( (double)( cv_height_of_drawingArea - cv_drawing_begin_y ) )
                        / (  cv_Max_Y - cv_Min_Y )
                        ;
      }

    System.out.println ( "cv_Min_X = " + cv_Min_X ) ;
    System.out.println ( "cv_Max_X = " + cv_Max_X ) ;
    System.out.println ( "cv_Min_Y = " + cv_Min_Y ) ;
    System.out.println ( "cv_Max_Y = " + cv_Max_Y ) ;
    System.out.println ( "cv_scale_X = " + cv_scale_X ) ;
    System.out.println ( "cv_scale_Y = " + cv_scale_Y ) ;

    cv_ins_Graphics = para_ins_Graphics ;

                                         //draw background       
    Color ins_Color_BG
               = new Color ( 255 , 255 , 255 ) ;
    cv_ins_Graphics
                          .setColor ( ins_Color_BG ) ;
    cv_ins_Graphics
                     .fillRect (
                                 0 , 0
                               , cv_width_of_Frame  ,  cv_height_of_Frame
                                    ) ;

                                   //draw function value
    Color ins_Color_1
                   = new Color ( 200 , 0 , 0 ) ;

     draw_X_and_Y_location (
                                 para_array_X_values
                               , para_array_Y_values
                               , para_number_of_values
                                                     ) ;

     draw_values ( 'X' ) ;
     draw_values ( 'Y' ) ;

     System.out.println ( "  ----------------------------------" ) ;
     System.out.println ( "Exit from Class = " + cv_this_Class_name +
                                            " : methode = " + this_methode_name ) ;
    }   
//------------------------------------      
  private static void draw_X_and_Y_location (
               double [ ] para_array_X_values
             , double [ ] para_array_Y_values
             , int para_number_of_values
                                      ) {

    Color ins_Color_1
                           = new Color ( 200 , 0 , 0 ) ;
    cv_ins_Graphics
                         .setColor ( ins_Color_1 ) ;

    int [ ] paint_location = new int [ 2 ] ;

    for ( int i  = 0 ; i < para_number_of_values
                         ; i ++  ) {

        paint_location
                  = decide_paint_location_X_and_Y (
                               para_array_X_values [ i ]                  
                             , para_array_Y_values [ i ]      
                                                    ) ;   
                     //draw mark at the location x value and y value
        cv_ins_Graphics
                        .fillRect (
                       paint_location [ 0 ]
                     , paint_location [ 1 ]
                       ,  Bridge.cv_Length_Side_of_DrawingSquare
                    ,  Bridge.cv_Length_Side_of_DrawingSquare
                                              ) ;
       }
    }
//----------------------------------      
  private static void draw_values ( char para_X_or_Y ) {

    Color ins_Color
                                = new Color ( 0 , 0 , 200 ) ;
    cv_ins_Graphics
                     .setColor ( ins_Color ) ;
    Font ins_Font
                             = new Font ( "Serif" , Font.BOLD , 30 );
     cv_ins_Graphics
                       .setFont( ins_Font ) ;

     double w1 = 0.0 ;
     int w2 = 0 ;
     double x = 0.0 ;
     double y = 0.0 ;

     if ( para_X_or_Y == 'X' ) {
                              //draw X-value Strings
        w1 = ( cv_Max_X - cv_Min_X )
                          / ( Bridge.cv_Number_of_X_values_String - 1 ) ;
        w2 = Bridge.cv_Number_of_X_values_String ;
        x = 0.0 ;
        y = cv_Min_Y ;
       }
     else {
                             //draw Y-value Strings
         w1 = ( cv_Max_Y - cv_Min_Y )
                          / ( Bridge.cv_Number_of_Y_values_String - 1 ) ;
         w2 = Bridge.cv_Number_of_Y_values_String ;
         x = cv_Min_X ;
         y = 0.0 ;
        }               

    int [ ] paint_location = new int [ 2 ] ;
    int location_offset = 0 ;
    double value_drawed = 0.0 ;

    for ( int i = 0 ; i < w2  ; i ++ ) {

        if ( para_X_or_Y == 'X' ) {
                              //draw X-value Strings
            x = cv_Min_X + w1 * i ;
            value_drawed = x ;
            paint_location
                      = decide_paint_location_X_and_Y ( x , y    ) ;    
           }
        else {
                           //draw Y-value Strings
            y = cv_Min_Y + w1 * i ;
            value_drawed = y ;
            paint_location
                      = decide_paint_location_X_and_Y ( x , y    ) ;    
           }

        if ( para_X_or_Y == 'X' ) {
                           //draw X-value Strings
            if ( ( i % 2) == 0 ) {
                location_offset = 58 ;
               }
            else {
                  location_offset = 82 ;
               }
            cv_ins_Graphics
                       .drawString (
                            ( Double
                                       .toString ( value_drawed )  )
                          , paint_location [ 0 ]
                            ,  ( paint_location [ 1 ] + location_offset )
                                        ) ;
           }
        else {
                           //draw Y-value Strings
            location_offset = -260 ;
            cv_ins_Graphics
                       .drawString (
                            ( Double
                                       .toString ( value_drawed ) )
                              , ( paint_location [ 0 ] + location_offset )
                             ,  paint_location [ 1 ]
                                        ) ;                  
          }

       }
    }

//------------------------------------------      
  private static void decide_Min_and_Max (
                                  double [ ] para_array_X_values
                                , double [ ] para_array_Y_values
                                , int para_number_of_values
                                                           )     {

     cv_Min_X = Bridge.cv_From_X ;   
     cv_Max_X  = Bridge.cv_To_X ;            
     cv_Min_Y = para_array_Y_values [ 0 ] ;   
     cv_Max_Y  = para_array_Y_values [ 0 ] ;

     double w1 = 0.0 ;
     double w2 = 0.0 ;

     for ( int i  = 1 ; i < para_number_of_values ; i ++  ) {
         w1 = cv_Min_X ;
         w2 = cv_Max_X ;
         if ( para_array_X_values [ i ] < w1 ) {
             cv_Min_X = para_array_X_values [ i ] ;
           }
         if ( para_array_X_values [ i ] > w2 ) {
             cv_Max_X = para_array_X_values [ i ] ;
            } 

         w1 = cv_Min_Y ;
         w2 = cv_Max_Y ;
         if ( para_array_Y_values [ i ] < w1 ) {
             cv_Min_Y = para_array_Y_values [ i ] ;
            }
         if ( para_array_Y_values [ i ] > w2 ) {
             cv_Max_Y = para_array_Y_values [ i ] ;
            } 
        }
     }

//------------------------------------------      
  private static int [ ] decide_paint_location_X_and_Y (
                                  double para_X_value
                               ,  double para_Y_value
                                                           )     {

    int [ ] return_value = new int [ 2 ] ;
    return_value [ 0 ]
                     = ( int ) (
                             cv_drawing_begin_x
                         +
                        ( para_X_value -  cv_Min_X )
                            * cv_scale_X
                         )   ;
    return_value [ 1 ]
                     = cv_height_of_Frame
                       - ( int ) (
                             cv_drawing_begin_y
                         +
                        ( para_Y_value -  cv_Min_Y )
                            * cv_scale_Y
                            ) ;
    return return_value ;
   }      
}


==============================
JFrameDataInput.java
----------------------
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

//-------------------------------------------------
//JFrame for intput data
//-------------------------------------------------
class JFrameDataInput extends JFrame {

    private String cv_this_Class_name = "JFrameDataInput" ;

    private final String cv_title_of_JFrame = "For Data Input" ;   

    private int cv_width_of_Frame ;
    private int cv_height_of_Frame;
    private int cv_topLeftLocation_x_of_Frame ;
    private int cv_topLeftLocation_y_of_Frame ;

    //======================
    //Constructer
    //======================   
  JFrameDataInput (
                       int para_width_of_Frame      
                     , int para_height_of_Frame    
                     , int para_topLeftLocation_x_of_Frame      
                     , int para_topLeftLocation_y_of_Frame    
          ) {

    String this_methode_name = "constructer" ;

    System.out.println ( "----------------------------------" ) ;
    System.out.println ( "Enter into Class = " + cv_this_Class_name +
                              " : methode = " + this_methode_name ) ;

    cv_width_of_Frame = para_width_of_Frame ;
    cv_height_of_Frame = para_height_of_Frame ;
    cv_topLeftLocation_x_of_Frame
                  = para_topLeftLocation_x_of_Frame ;
    cv_topLeftLocation_y_of_Frame
                  = para_topLeftLocation_y_of_Frame ;

    setTitle ( cv_title_of_JFrame ) ;
    setBounds (
                cv_topLeftLocation_x_of_Frame
              , cv_topLeftLocation_y_of_Frame            
              , cv_width_of_Frame
              , cv_height_of_Frame
                  ) ;
    setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ) ;

    JPanel ins_JPanel = new JPanel () ;

          //-------------------------------
          //  From_X
    JLabel ins_1_JLabel = new JLabel ( "From X = " ) ;
    ins_1_JLabel.setFont ( new Font ( "Serif", Font.PLAIN , 30 ) ) ;

    JTextField ins_1_JTextField = new JTextField ( "0.0" ) ;
    ins_1_JTextField.setPreferredSize ( new Dimension ( 100, 40 ) ) ;
    ins_1_JTextField.setFont ( new Font ( "Serif", Font.PLAIN , 30 ) ) ;
    ActionListenerText1 ins_ActionListenerText1
              = new ActionListenerText1 ( ) ;
    ins_1_JTextField.addActionListener ( ins_ActionListenerText1 ) ;

    ins_JPanel.add ( ins_1_JLabel ) ;
    ins_JPanel.add ( ins_1_JTextField ) ;
            //-------------------------------
            //  To_X
    JLabel ins_2_JLabel = new JLabel ( "To X = " ) ;
    ins_2_JLabel.setFont ( new Font ( "Serif", Font.PLAIN , 30 ) ) ;

    JTextField ins_2_JTextField = new JTextField ( "20.0" ) ;
    ins_2_JTextField.setPreferredSize ( new Dimension ( 100, 40 ) ) ;
    ins_2_JTextField.setFont ( new Font ( "Serif", Font.PLAIN , 30 ) ) ;
    ActionListenerText2 ins_ActionListenerText2
            = new ActionListenerText2 ( ) ;
    ins_2_JTextField.addActionListener ( ins_ActionListenerText2 ) ;

    ins_JPanel.add ( ins_2_JLabel ) ;
    ins_JPanel.add ( ins_2_JTextField ) ;
           //-------------------------------
           //Interval_X
    JLabel ins_3_JLabel = new JLabel ( "Interval X = " ) ;
    ins_3_JLabel.setFont ( new Font ( "Serif", Font.PLAIN , 30 ) ) ;

    JTextField ins_3_JTextField = new JTextField ( "0.2" ) ;
    ins_3_JTextField.setPreferredSize ( new Dimension ( 100, 40 ) ) ;
    ins_3_JTextField.setFont ( new Font ( "Serif", Font.PLAIN , 30 ) ) ;
    ActionListenerText3 ins_ActionListenerText3
               = new ActionListenerText3 ( ) ;
    ins_3_JTextField.addActionListener ( ins_ActionListenerText3 ) ;

    ins_JPanel.add ( ins_3_JLabel ) ;
    ins_JPanel.add ( ins_3_JTextField ) ;
                   //-------------------------------
                   //Magnification_X
    JLabel ins_4_JLabel = new JLabel ( "Magnification X = " ) ;
    ins_4_JLabel.setFont ( new Font ( "Serif", Font.PLAIN , 30 ) ) ;

    JTextField ins_4_JTextField = new JTextField ( "1.0" ) ;
    ins_4_JTextField.setPreferredSize ( new Dimension ( 100, 40 ) ) ;
    ins_4_JTextField.setFont ( new Font ( "Serif", Font.PLAIN , 30 ) ) ;
    ActionListenerText4 ins_ActionListenerText4
                = new ActionListenerText4 ( ) ;
    ins_4_JTextField.addActionListener ( ins_ActionListenerText4 ) ;

    ins_JPanel.add ( ins_4_JLabel ) ;
    ins_JPanel.add ( ins_4_JTextField ) ;
                   //-------------------------------
                  //    Magnification_Y
    JLabel ins_5_JLabel = new JLabel ( "Magnification Y = " ) ;
    ins_5_JLabel.setFont ( new Font ( "Serif", Font.PLAIN , 30 ) ) ;

    JTextField ins_5_JTextField = new JTextField ( "1.0" ) ;
    ins_5_JTextField.setPreferredSize ( new Dimension ( 100, 40 ) ) ;
    ins_5_JTextField.setFont ( new Font ( "Serif", Font.PLAIN , 30 ) ) ;
    ActionListenerText5 ins_ActionListenerText5
                  = new ActionListenerText5 ( ) ;
    ins_5_JTextField.addActionListener ( ins_ActionListenerText5 ) ;

    ins_JPanel.add ( ins_5_JLabel ) ;
    ins_JPanel.add ( ins_5_JTextField ) ;
               //-------------------------------
               //Length of DrawingSquare Side
    JLabel ins_6_JLabel = new JLabel ( "Length of DrawingSquare Side = " ) ;
    ins_6_JLabel.setFont ( new Font ( "Serif", Font.PLAIN , 30 ) ) ;

    JTextField ins_6_JTextField = new JTextField ( "8" ) ;
    ins_6_JTextField.setPreferredSize ( new Dimension ( 100, 40 ) ) ;
    ins_6_JTextField.setFont ( new Font ( "Serif", Font.PLAIN , 30 ) ) ;
    ActionListenerText6 ins_ActionListenerText6
                 = new ActionListenerText6 ( ) ;
    ins_6_JTextField.addActionListener ( ins_ActionListenerText6 ) ;

    ins_JPanel.add ( ins_6_JLabel ) ;
    ins_JPanel.add ( ins_6_JTextField ) ;
             //-------------------------------
             //Number of X values String
    JLabel ins_7_JLabel = new JLabel ( "Number of X value String = " ) ;
    ins_7_JLabel.setFont ( new Font ( "Serif", Font.PLAIN , 30 ) ) ;

    JTextField ins_7_JTextField = new JTextField ( "6" ) ;
    ins_7_JTextField.setPreferredSize ( new Dimension ( 100, 40 ) ) ;
    ins_7_JTextField.setFont ( new Font ( "Serif", Font.PLAIN , 30 ) ) ;
    ActionListenerText7 ins_ActionListenerText7
             = new ActionListenerText7 ( ) ;
    ins_7_JTextField.addActionListener ( ins_ActionListenerText7 ) ;

    ins_JPanel.add ( ins_7_JLabel ) ;
    ins_JPanel.add ( ins_7_JTextField ) ;
        //-------------------------------
        //Number of  Y values String
    JLabel ins_8_JLabel = new JLabel ( "Number of  Y value String = " ) ;
    ins_8_JLabel.setFont ( new Font ( "Serif", Font.PLAIN , 30 ) ) ;

    JTextField ins_8_JTextField = new JTextField ( "5" ) ;
    ins_8_JTextField.setPreferredSize ( new Dimension ( 100, 40 ) ) ;
    ins_8_JTextField.setFont ( new Font ( "Serif", Font.PLAIN , 30 ) ) ;
    ActionListenerText8 ins_ActionListenerText8
        = new ActionListenerText8 ( ) ;
    ins_8_JTextField.addActionListener ( ins_ActionListenerText8 ) ;

    ins_JPanel.add ( ins_8_JLabel ) ;
    ins_JPanel.add ( ins_8_JTextField ) ;

               //-------------------------------
    add ( ins_JPanel , BorderLayout.CENTER ) ;   

    System.out.println ( "  ----------------------------------" ) ;
    System.out.println ( "Exit from Class = " + cv_this_Class_name +
                              " : methode = " + this_methode_name ) ;
   }
}

//-------------------------------------------------------
class ActionListenerText1 implements ActionListener {

    private String cv_this_Class_name = "ActionListenerText1" ;

    public void actionPerformed ( ActionEvent para_ins_ActionEvent ) {

        String this_methode_name = "actionPerformed" ;

        System.out.println ( "----------------------------------" ) ;
        System.out.println ( "Enter into Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;

               //get JTextField instance related
        JTextField ins_JTextField
          = ( JTextField ) ( para_ins_ActionEvent.getSource () ) ;
               //set value to related variety
        Bridge.cv_From_X
            = Double.parseDouble ( ins_JTextField.getText () ) ;
               //request process to Mediater
        Mediater.draw_shape_of_function ( ) ;

        System.out.println ( "Exit from Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;
        System.out.println ( "----------------------------------" ) ;
    }
}
//-------------------------------------------------------
class ActionListenerText2 implements ActionListener {

    private String cv_this_Class_name = "ActionListenerText2" ;

    public void actionPerformed ( ActionEvent para_ins_ActionEvent ) {

        String this_methode_name = "actionPerformed" ;

        System.out.println ( "----------------------------------" ) ;
        System.out.println ( "Enter into Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;

               //get JTextField instance related
        JTextField ins_JTextField
          = ( JTextField ) ( para_ins_ActionEvent.getSource () ) ;
               //set value to related variety
        Bridge.cv_To_X
            = Double.parseDouble ( ins_JTextField.getText () ) ;
             //request process to Mediater
        Mediater.draw_shape_of_function ( ) ;

        System.out.println ( "Exit from Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;
        System.out.println ( "----------------------------------" ) ;
  }
}
//-------------------------------------------------------
class ActionListenerText3 implements ActionListener {

    private String cv_this_Class_name = "ActionListenerText3" ;

    public void actionPerformed ( ActionEvent para_ins_ActionEvent ) {

        String this_methode_name = "actionPerformed" ;

        System.out.println ( "----------------------------------" ) ;
        System.out.println ( "Enter into Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;

               //get JTextField instance related
        JTextField ins_JTextField
          = ( JTextField ) ( para_ins_ActionEvent.getSource () ) ;
               //set value to related variety
        Bridge.cv_Interval_X
            = Double.parseDouble ( ins_JTextField.getText () ) ;
             //request process to Mediater
        Mediater.draw_shape_of_function ( ) ;

        System.out.println ( "Exit from Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;
        System.out.println ( "----------------------------------" ) ;
  }
}

//-------------------------------------------------------
class ActionListenerText4 implements ActionListener {

    private String cv_this_Class_name = "ActionListenerText4" ;

    public void actionPerformed ( ActionEvent para_ins_ActionEvent ) {

        String this_methode_name = "actionPerformed" ;

        System.out.println ( "----------------------------------" ) ;
        System.out.println ( "Enter into Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;

               //get JTextField instance related
        JTextField ins_JTextField
          = ( JTextField ) ( para_ins_ActionEvent.getSource () ) ;
               //set value to related variety
        Bridge.cv_Magnification_X
            = Double.parseDouble ( ins_JTextField.getText () ) ;
             //request process to Mediater
        Mediater.draw_shape_of_function ( ) ;

        System.out.println ( "Exit from Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;
        System.out.println ( "----------------------------------" ) ;
  }
}
//-------------------------------------------------------
class ActionListenerText5 implements ActionListener {

    private String cv_this_Class_name = "ActionListenerText5" ;

    public void actionPerformed ( ActionEvent para_ins_ActionEvent ) {

        String this_methode_name = "actionPerformed" ;

        System.out.println ( "----------------------------------" ) ;
        System.out.println ( "Enter into Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;

               //get JTextField instance related
        JTextField ins_JTextField
          = ( JTextField ) ( para_ins_ActionEvent.getSource () ) ;
               //set value to related variety
        Bridge.cv_Magnification_Y
        = Double.parseDouble ( ins_JTextField.getText () ) ;
             //request process to Mediater
        Mediater.draw_shape_of_function ( ) ;

        System.out.println ( "Exit from Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;
        System.out.println ( "----------------------------------" ) ;
  }
}

//-------------------------------------------------------
class ActionListenerText6 implements ActionListener {

    private String cv_this_Class_name = "ActionListenerText6" ;

    public void actionPerformed ( ActionEvent para_ins_ActionEvent ) {

        String this_methode_name = "actionPerformed" ;

        System.out.println ( "----------------------------------" ) ;
        System.out.println ( "Enter into Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;

               //get JTextField instance related
        JTextField ins_JTextField
          = ( JTextField ) ( para_ins_ActionEvent.getSource () ) ;
               //set value to related variety
        Bridge.cv_Length_Side_of_DrawingSquare
                    = Integer.parseInt ( ins_JTextField.getText () ) ;
           //request process to Mediater
        Mediater.draw_shape_of_function ( ) ;

        System.out.println ( "Exit from Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;
        System.out.println ( "----------------------------------" ) ;
     }
}

//-------------------------------------------------------
class ActionListenerText7 implements ActionListener {

    private String cv_this_Class_name = "ActionListenerText7" ;

    public void actionPerformed ( ActionEvent para_ins_ActionEvent ) {

        String this_methode_name = "actionPerformed" ;

        System.out.println ( "----------------------------------" ) ;
        System.out.println ( "Enter into Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;

               //get JTextField instance related
        JTextField ins_JTextField
          = ( JTextField ) ( para_ins_ActionEvent.getSource () ) ;
               //set value to related variety
        Bridge.cv_Number_of_X_values_String
                       = Integer.parseInt ( ins_JTextField.getText () ) ;
           //request process to Mediater
        Mediater.draw_shape_of_function ( ) ;

        System.out.println ( "Exit from Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;
        System.out.println ( "----------------------------------" ) ;
     }
}

//-------------------------------------------------------
class ActionListenerText8 implements ActionListener {

    private String cv_this_Class_name = "ActionListenerText8" ;

    public void actionPerformed ( ActionEvent para_ins_ActionEvent ) {

        String this_methode_name = "actionPerformed" ;

        System.out.println ( "----------------------------------" ) ;
        System.out.println ( "Enter into Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;

               //get JTextField instance related
        JTextField ins_JTextField
          = ( JTextField ) ( para_ins_ActionEvent.getSource () ) ;
               //set value to related variety
        Bridge.cv_Number_of_Y_values_String
                  = Integer.parseInt ( ins_JTextField.getText () ) ;
           //request process to Mediater
        Mediater.draw_shape_of_function ( ) ;

        System.out.println ( "Exit from Class = " + cv_this_Class_name +
                                  " : methode = " + this_methode_name ) ;
        System.out.println ( "----------------------------------" ) ;
     }
}

======================================================

コンピューター・プログラム 制作 インデックス

«箱のイメージ 画像貼り付け コンピューター・グラフィックス 動画制作 Java と OpenCV3 を使って

フォト
無料ブログはココログ