2019年1月 9日 (水)

新作音楽作品の発表 言葉にならない想い・第5番

[クレオフーガ](音楽投稿サイト)に、自らが作曲した曲(ピアノ独奏曲)をアップロードしました。曲の題名は、

 I can't put the thought into words well No.5, Op.49
   (言葉にならない想い・第5番)

です。

この曲をお聴きになりたい方は、下記で聴いていただけます。(コンテンツ格納先のサイト運営・クレオフーガのサイトにアクセスして)。

-----------

下記にアクセスしていただくと、私が作曲した他の音楽作品を、聴いていただくことも可能です。

私の自作曲たち(クレオフーガ・サイト中にあり)

2018年12月26日 (水)

新作音楽作品の発表 気分よくやっています・第4番

[クレオフーガ](音楽投稿サイト)に、自らが作曲した曲(ピアノ独奏曲)をアップロードしました。曲の題名は、

 I’m feeling good No.4, Op.48
   (気分よくやっています・第4番)

です。

この曲をお聴きになりたい方は、下記で聴いていただけます。(コンテンツ格納先のサイト運営・クレオフーガのサイトにアクセスして)。

-----------

下記にアクセスしていただくと、私が作曲した他の音楽作品を、聴いていただくことも可能です。

私の自作曲たち(クレオフーガ・サイト中にあり)

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 ( "----------------------------------" ) ;
     }
}

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

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

2018年11月29日 (木)

箱のイメージ 画像貼り付け コンピューター・グラフィックス 動画制作 Java と OpenCV3 を使って

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

[箱への画像貼り付け]という制作テーマによる、コンピューター・グラフィックスによる動画制作を行いました。

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

制作作業の結果、できたのが、下記のCG動画です。(ユーチューブ上にアップロードしてあります。)

([CG]は、[コンピューター・グラフィックス]の略)。

------
仮想の箱(コンピューターグラフィックス)

この動画の格納先URLは、下記です。

https://youtu.be/w6fm_S97-0o

------------
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 箱

上記のCG動画は、[仮想の箱]の表面に、あたかも画像が貼り付けられているかのようなイメージとなるように、動画を制作した、というものです。

この[仮想の箱]は、

 2個の[部分]、すなわち、[箱の下部] と [箱の上部] により、形成される

と、いうようなイメージで、設定しました。

そして、[箱の上部] と [箱の下部] は、それぞれ、5個の [板] により、形成される

と、いうようなイメージで、設定しました。

 [箱の上部] は 上面の [板] 1個 と 側面の [板] 4個 により、形成される
 [箱の下部] は 底面の [板] 1個 と 側面の [板] 4個 により、形成される

Fig1

F1

それぞれの [板] は、2個の [表面を形成する長方形] により、形成される

と、いうようなイメージで、設定しました。

現実世界の板には、6個の面を形成する長方形があります(直方体だから)。

それらのうち、面積が広い2個の長方形だけを、コンピューターグラフィックスを描くようにしました、処理時間を短くするために。

Fig2

F2

それらの、 [表面を形成する長方形] に対して、画像を貼り付けるようなイメージで、コンピューターグラフィックスを描くようにしました。

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

2018年11月28日 (水)

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

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

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

箱のイメージ 画像貼り付け コンピューター・グラフィックス 動画制作 Java と OpenCV3 を使って

変形する 回転体 画像貼り付け コンピューター・グラフィックス 動画制作 Java と OpenCV3 を使って

仮想の器 コンピューター・グラフィックスによる動画制作 Java と OpenCV3 を使って

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

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

コンピューターグラフィックスによる動画制作をやってみました ( Python と OpenCV を使って )

2018年11月 8日 (木)

変形する 回転体 画像貼り付け コンピューター・グラフィックス 動画制作 Java と OpenCV3 を使って

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

[形が変わっていく回転体への画像貼り付け]という制作テーマによる、コンピューター・グラフィックスによる動画制作を行いました。

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

制作作業の結果、できたのが、下記のCG動画です。(ユーチューブ上にアップロードしてあります。)

([CG]は、[コンピューター・グラフィックス]の略)。

下記に記すように、[三角関数]、[対数関数]、[累乗関数]を使用して制作しました。

------
仮想の器 No.5, 変形する

この動画の格納先URLは、下記です。

https://youtu.be/6QrSV0rnJjI

------------
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 回転体

上記のCG動画は、[仮想の器]の表面に、あたかも画像が貼り付けられているかのようなイメージとなるように、動画を制作した、というものです。

この[仮想の器]は、

 まず、[回転体]を形成し、
 その後、その[回転体]の上部を、部分的に切除する

と、いうようなイメージで、設定しました。

[回転体]とは、

 平面図形を、直線のまわりに、1回転させて、形成される立体

です。

[ろくろ]を使って、陶器の原型が作られていく様を想像すれば、[回転体]をイメージしやすいと思います。

Figure 1 回転体

F1

------------
4 回転体の表面を形成

3次元空間中に、器の表面を形成するためには、表面の各部分の座標値(3次元空間中での)を設定する必要があります。

今回の制作作業の対象とする器の基本部分は、[回転体]であるとしたので、下記のように、各z座標ごとに、[回転体]のそのz座標での断面での[半径]を設定すればよい、ということになります。

Figure 2 各z座標ごとに半径を設定

F2

この、各z座標ごとの[半径]を、[log関数(対数関数)]、[pow関数(累乗関数)]、[三角関数]を使用して、算出・設定するようにしました。

[経過時間]を[三角関数]の変数として用いることにより、[回転体]の形が、時間の経過につれて変化していくように、できました。

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

2018年11月 4日 (日)

伊豆半島に行きました

伊豆半島の中部と西海岸(静岡県)に、関心がありました。

 様々の旅行関係の書物や、パンフレットで、[伊豆半島・西海岸]の美しい海の風景の紹介を見た記憶がある。

 位置関係から見て、[伊豆半島・西海岸]において、[駿河湾]の向こうに[富士山]を見れる可能性があるのではないだろうか。(気象条件にもよるのだろうが)。

 [伊豆半島・西海岸]は、地図で見ると、[修善寺]の近くにあるようだ。[修善寺]は、温泉地として、有名なようだ。[夏目漱石]も、ここに滞在していたことがあるらしい。

 [韮山]には、[運慶]が作った仏像があるという。

 [韮山]には、[反射炉]というものがあり、ユネスコ世界遺産に認定されたと、聞いている。

このような様々な想いが交錯する中に、伊豆半島への家族旅行を思い立ち、計画を立案し始めました。

思案の結果、下記のようなコース概要が定まりました。

1日目:京都 --(東海道新幹線)--> 三島 --(伊豆箱根鉄道)--> 修善寺
    修善寺 --(東海バス)--> 土肥(伊豆半島・西海岸) --(東海バス)--> 修善寺
    修善寺温泉 で 温泉旅館に宿泊

2日目:修善寺 --(伊豆箱根鉄道)--> 韮山
    韮山 で、[反射炉]を見学、[運慶の仏像]を拝観
    韮山 --(伊豆箱根鉄道)-->  三島 --(東海道新幹線)--> 京都

更に、ネットを使って、いろいろと調べていくにつれて、様々な事が分かってきて、コース計画の修正が必要になりました。

 [伊豆箱根鉄道]の[修善寺駅]と、[修善寺]の温泉街との間の距離はけっこうあるので、バスを使って移動する方がよさそうだ。

 [運慶作の仏像]があるのは、[願成就院]という寺院である。

 [韮山反射炉循環バス]というものがあり、これを利用すると、[韮山反射炉]、[願成就院]のぞれぞれの近くまで、バスで行けるようだ。このバスは、運航日が限定されているようだ。[伊豆箱根鉄道]の[伊豆長岡駅]の駅前から、このバスに乗車できるようだ。

と、いうわけで、コース概要に対して、修正を行いました。修正後のものが、下記です。

1日目:京都 --(東海道新幹線)--> 三島 --(伊豆箱根鉄道)--> 修善寺
    修善寺 --(東海バス)--> 土肥(伊豆半島・西海岸) --(東海バス)--> 修善寺
    修善寺 --(東海バス)--> 修善寺の温泉街
    修善寺の温泉街にある、温泉旅館に宿泊

2日目:修善寺の温泉街 --(東海バス)--> 修善寺 --(伊豆箱根鉄道)--> 伊豆長岡
    伊豆長岡 --(韮山反射炉循環バス)--> 韮山反射炉 --(韮山反射炉循環バス)--> 北条の里
    北条の里 --(徒歩)--> 願成就院 --(徒歩)--> 北条の里
    北条の里 --(韮山反射炉循環バス)--> 伊豆長岡
    伊豆長岡 --(伊豆箱根鉄道)-->  三島 --(東海道新幹線)--> 京都

そして、 2018年10月、伊豆に行きました。上記の計画通りに、各地を移動しました。

--------    
1.土肥へ

[伊豆箱根鉄道]の[修善寺駅]には、コインロッカーがあり、空いているコインロッカーがあったので、大きい荷物をそこに格納することができて、その後の行動が楽になりました。

そこから、[東海バス]に乗って、[土肥]へ移動。(「土肥」は「とい」と読むのだそうです。)

すごい山越えの道でした。

[地理院地図]を使って標高を調べてみると:

 [伊豆箱根鉄道]の[修善寺駅]:約50m

途中、長いトンネルをバスは通過していったのですが、ネット地図で調べてみたら、[船原峠]の下に掘られたトンネルであることが分かりました。

 トンネルの東側口付近の標高:約470m

そこからバスは、土肥の海岸(標高0m)めざして、下っていったのでした。

伊豆半島が、そして、伊豆半島のこのような険しい地形が、いったいどのようにしてできたのか、という点に関しては、下記のような説があるようです。

 [説A]:伊豆半島は、南方の海のかなたからやってきた地塊が、本州に衝突し、隆起してできた。その結果、現在見るような険しい地形ができた。

この件に関しては:

 [伊豆半島ジオパーク] というサイトがあり、その中の下記の部分
  伊豆半島ジオパークについて
   成り立ち

の中に、詳細な記述があります。

しかし、この[説A]に対しては、私としては納得が行かない点があります。

以下、現在の伊豆半島を形成している岩石の集合体の事を、[伊豆地塊]と呼ぶことにします。

[説A]によれば:

 むかしむかし、[伊豆地塊]は、[フィリピン海プレート]の上に「乗って」いた。[日本列島の本州]と離れた場所にあったのだが、徐々に、[本州]に接近していった。そして、ついに、現在のように、[本州]とくっついた。

 むかしむかしから今に至るまでの間、[日本列島の本州]は、[ユーラシアプレート]の上に「のって」いたし、(今も)「のって」いる。

 むかしむかしから今に至るまでの間、[フィリピン海プレート]は、[ユーラシアプレート]の下に、「沈み込んで」いったし、(今も)「沈み込んで」いる。

ということに、なるのでしょう。 

ならば、

 むかしむかし、[フィリピン海プレート]の上に乗りながら、[本州]の近くへやってきた[伊豆地塊]は、[フィリピン海プレート]と共に、[ユーラシアプレート]の下に、沈み込んでいった

ということに、なりはしないのだろうか? このように考えるのが、しごく自然な方向ではないかと、私には思われるのですが。

となると、[伊豆地塊]は、[ユーラシアプレート]の下に行ってしまう、よって、伊豆半島は形成されない、ということになるのでは?

しかし、[説A]によれば、分離的な地殻変動、すなわち、

 [フィリピン海プレート]は、[ユーラシアプレート]の下側に
 [伊豆地塊]は、海の上に

と、いうような事が起こった、ということになります。

私には、この点がどうしても納得いきません。いったいなぜ、このような分離的な地殻変動が起こったのか? この点を明快に説明してほしいなぁと、思います。

[伊豆地塊 フィリピン海プレート]でネット検索すると、これに関連する様々な情報を得られるかもしれません。

--------    
2.土肥で

[土肥]で、昼食時に、キンメダイを食べました。

伊豆半島・西海岸の[土肥]で撮影した動画が、下記です。残念ながら、この日、富士山を見ることは、できませんでした。(翌日の夕方、京都へ帰る途中の、東海道新幹線の車窓からは、きれいに見えました。)

この動画の格納先URLは、下記です。

https://youtu.be/kd2Q-gDDuUM

--------    
3.修善寺の温泉街

[土肥]から、[東海バス]を乗り継いで、[修善寺]の温泉街に移動しました。

[独鈷の湯]を見たり、川にかかる橋を渡ったり、[竹林の小径]を歩いたり、快適な散策をすることができました。

宿泊先にした温泉旅館に対して、[夕食無し、朝食あり、1泊]のコースを予約していたので、夕食を、宿泊先とは異なる場所でとりました。

計画立案の段階で、夕食をとる場所の選定に時間がかかりました。

[修善寺]の温泉街にある飲食店のことを、計画立案段階でいろいろと調べてみて、驚きました、閉店時間が早い店が多く、夜に食べに行けるような所が少ないのです。

[修善寺]の温泉街にある宿泊施設に泊まらない人は、夕方になったら別の場所へ移動してしまうし、[修善寺]の温泉街にある宿泊施設に泊まる人の大部分は、宿泊先で夕食をとる。だから、飲食店側は、夕方以降、店を開いていても、客は少ない、だから、夕方になったら閉店、という事情なのでしょうか。

今、[泊食分離]という言葉が、観光の世界で注目を集めているようです。

旅館の稼働率を上げるために、旅館側は、従来の[一泊二食つき]のコースの他にも、[宿泊のみ]、[夕食なし朝食あり]、[夕食あり朝食なし]など、様々な選択肢を宿泊客が選べるような方向にしていってはどうだろうか、という事のようです。

私にとっては、この、[泊食分離]の方向は、とても好ましいです。

[修善寺]の温泉街においても、この [泊食分離]の方向に変化していったら、温泉街の中で夕食をとることができる店が、増加していくかもしれません。

[観光庁 泊食分離]、[泊食分離とは]、[旅館 稼働率]でネット検索すると、これに関連する様々な情報を得られるかもしれません。

宿泊先の温泉旅館で、目がさめてしまったので、未明の時間帯に、露天ぶろに入浴しました。とても気持ちが良かったです。

--------    
4.修禅寺

翌日、宿泊先から徒歩で、[修禅寺]へ行きました。

修[善]寺の温泉街の中に、修[禅]寺は、ありました。

PA1

Pa1

PA2

Pa2

[修禅寺]の公式サイト中の記述によれば、

 正式呼称は、[福地山修禅萬安禅寺](ふくちざんしゅぜんばんなんぜんじ)。
 807年、空海によって開創。
 その後、真言宗から臨済宗に改宗。その後、臨済宗から曹洞宗に改宗。

[修禅寺]の公式サイト中の[動物たち]のコーナーに、[護摩](ゴマ)、[空](くう)の名前があります。この日、境内にいたのが、これらの動物なのでしょうか。

PA3

Pa3

PA4

Pa4

PA5

Pa5

--------    
5.指月殿

かつて読んだ、[伊賀の影丸](横山 光輝・著)の中に、[夜叉王]という忍者が登場していたのを、今になっても記憶しています。

その後、[修禅寺物語](岡本 綺堂・著)という戯曲があることを知り、その中に、

面造り夜叉王

という人物が登場する、ということを、知りました。そこで、思ったのです、

 もしかしたら、横山光輝氏は、[修禅寺物語]の中のこの登場人物の名を、[伊賀の影丸]の中の忍者の名前に転用したのでは、ないだろうか、と。 

 [修禅寺物語]の[夜叉王]と、[伊賀の影丸]の[夜叉王]との間には、共通するキーワードがあります。それはすなわち、

 [顔]

です。

  [修禅寺物語]の初演は、1911年。
  [伊賀の影丸]の連載発表は、1961年から1966年。

だから、横山光輝氏が、[修禅寺物語]と、その中の登場人物・[夜叉王]について、何らかの知識を持たれていた、という可能性は大きいと思います。

[修禅寺物語 夜叉王]、 [伊賀の影丸 夜叉王]、[青空文庫 修禅寺物語]でネット検索すると、これに関連する様々な情報を得られるかもしれません。

[修禅寺物語]の中には、[源頼家]という人も登場します。

[源頼家]は、[源頼朝]と[北条政子]の子で、鎌倉幕府・第2代将軍に就任した、歴史上実在の人です。

そのような人の墓が、幕府のあった[鎌倉]ではなく、[修善寺]にあるのです、[指月殿]の傍らに。

[指月殿]へは、[修禅寺]から徒歩で行きました。

[伊豆市 観光情報サイト] 中の解説には、

「・・・頼家の冥福を祈って母政子が修禅寺に寄進した経堂で、伊豆最古の木造建築物といわれています。」

と、あります。

 いったいなぜ、[源頼家]の墓は、[鎌倉]ではなく、[修善寺]の地にあるのか?
 [源頼家]の最期は、どのような状態であったのか?

ネットで調べてみたのですが、調べれば調べるほど、分からなくなってしまいました。

例えば、

 [吾妻鑑 明月記 愚管抄 源頼家 北条時政 阿波局 比企氏]

という、複数の言葉から成るキーワードを使用して検索して、複数個の興味深いコンテンツを読むことができたのですが、それらのコンテンツを読んで感じたのが、[関連する史料の信憑性の低さ]ということでした。

[吾妻鑑]には、[源頼家]の最期の様については、何も書かれていないのだそうです。

[愚管抄]には、それが書かれているのだそうです。

でも、[愚管抄]は、京都にいた天台宗トップ(座主)・慈円が、京都で書いたものでしょう。京都からはるか遠く隔たっている関東の地で起こった事を、慈円がどこまで正確に把握できていたのか、極めて疑問に思えます。

今でいう、[情報ソース]の問題です。[源頼家]の最期の様に関して、慈円が得た情報のソースは、いったいいかなる性質のものであったのか? [源頼家]の側近くにいて、彼の最期の様を実際に見た人が、慈円に伝えたものであったのか、それとも、単なる「関東からのうわさ話」程度のものであったのか?

とにもかくにも、[源頼家]のお墓が、そこにありました、私は、墓前に合掌し、頼家公のために祈りました。

--------    
6.韮山反射炉

ここへは、上記にも記したように、[韮山反射炉循環バス]を利用して、行きました。

PB1

Pb1

PB2

Pb2

PB3

Pb3

[伊豆の国市 のサイト]中の
 学び・文化
  文化財
   国指定史跡韮山反射炉
    韮山反射炉とは

に、解説があります。

江戸幕府の代官・[江川英龍]によって、築造が開始されたが、その完成を見ることなく、彼は世を去り、その跡を継いだ息子の[江川英敏]によって築造が継続され、1857年に完成したのだそうです。

その後、1864年までの間、鉄製や青銅製の西洋式大砲が、この炉を使って鋳造されたのだそうです。

--------    
7.願成就院

[韮山反射炉]から、再び、[韮山反射炉循環バス]に乗り、[北条の里]バス停へ移動しました、[願成就院]へ行くために。

[北条の里]バス停にある案内図が分かりにくくて、[願成就院]へ行くのに、時間を費やしてしまいました。その結果、仏像鑑賞にあてることができる時間が、短くなってしまいました。

([願成就院]から[北条の里]バス停まで戻ってきて、また、[韮山反射炉循環バス]に乗らねばなりません。)

「こっちへ行くと、[願成就院]へ行けるよ」という事を示すような、分かりやすい標識が、[北条の里]バス停に、あればいいのになぁ、と、思いました。

[願成就院]にある[運慶]作の仏像は、すばらしいと思いました、とりわけ、[矜羯羅童子(こんがらどうじ)(Kiṃkara)]と[制吒迦童子(せいたかどうじ)(Ceṭaka)]が。

[願成就院のサイト]中の、[寺宝]の部に、それらの仏像の写真があります。

これらの仏像の内部に収められていた木札の記述から、仏像制作を注文したのは、[北条時政]([北条政子]の父)であり、仏像を制作したのは[運慶]である、ということが確かめられたのだそうです。

[北条時政]は、近畿地方に、[運慶]という新進気鋭の仏師がいる、ということを、どこで、どのようにして、知ったのでしょうか?

注文主・[北条時政]と、制作者・[運慶]は、実際に対面・面談した上で、発注が行われたのでしょうか?

(「こんな仏像、つくってほしいんだよねぇ」とかいうような事を、時政が言うのを、運慶が聞いて)。

対面・面談したのだとしたら、どこで、対面・面談したのでしょうか? 関東で? それとも、近畿地方で?

その場所が、京都である可能性も、あるようなのです。下記に、それについての記述があります。

連続講演会「東京で学ぶ京大の知」シリーズ14 美術研究最前線 第1回 運慶研究の最前線 京都大学大学院 文学研究科 根立 研介・教授

[願成就院]の中に、[北条時政]の墓所がありました。

--------    
8.北条の里

「北条の里」と、バス停に名付けるだけあって、ここがまさに、鎌倉幕府の中で大きな権力を獲得した集団・北条氏のルーツの地であるようです。

付近には、[北条政子産湯の井戸]、[史跡北条氏邸跡(円成寺跡)] があるようですが、時間が足りなくて、行けませんでした。

もしも、[北条政子]が[源頼朝]と出会ってなかったら、[北条氏]の名前が日本史の教科書に記述されることは、なかったでしょうね。

人間の、あるいは、氏族の運命は、まことに不可思議、というしか、ないようです。

その付近に、もう一か所、行ってみたい場所があったのですが、そこも、時間が足りなくて、行けませんでした。それは、

 [堀越御所跡]

です。

[足利政知](第8代将軍・[足利義政]の兄弟)は、[鎌倉公方](足利幕府・鎌倉府のトップ)に任命されて関東にやってきたが、様々な事情により、鎌倉まで行くことができず、この地に館を構えた、という事なのだそうです。

[足利政知]には、[足利茶々丸]という息子がいたのだそうです。

[足利茶々丸 北条早雲]、[古河公方 堀越公方]、[結城合戦 春王 安王]、[南総里見八犬伝 里見義実 結城合戦]でネット検索すると、これに関連する様々な情報を得られるかもしれません。

2018年9月21日 (金)

新作動画の発表 [仮想の器 No.4 水 流れる 葉 動く(コンピューターグラフィックス)]

ユーチューブ上に、自らが制作した動画をアップロードしました。

下記でご覧になることができます。

------------------------------------------------------------
仮想の器 No.4 水 流れる 葉 動く(コンピューターグラフィックス)
コンピューターグラフィックス 制作者:runningWater
      ( Javaを使用して制作 )

------------------------------------------------------------
私が制作した動画を、私のユーチューブチャンネルからご覧いただけます。私のユーチューブチャンネルにアクセスしたい時は、

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

私が作曲した他の音楽作品を、クレオフーガ・サイト上の私のコーナーでお聴きいただけます。それにアクセスしたい時は、

https://creofuga.net/runw
ここをクリックしてください。

«新作動画の発表 [仮想の器 No.3 水 流れる(コンピューターグラフィックス)]

フォト
無料ブログはココログ