[subtitizing range] を測定するための、コンピューター・プログラム 作成ずみの画像をマークとして表示 (ソースプログラム・リストあり)

Cognition of Number, Index, 数に関する認知, インデックス へ
-----

2024.4.9 presented in internet World Wide Web
2024.7.5 rewritten
2024.7.5 presented in [note] ( //note.com/runningWater/]

-----

広大な草原で、羊の牧畜を行っている人々の、羊の頭数を把握する時の、[subitizing range](瞬間認知可能範囲)は、いったいどれくらいなのだろうか。もしかしたら、毎日、羊を見つめ続けてきた結果、3や4といったレベルを、はるかに上回る域にまで、達しているのではないだろうか。

下記のコンテンツにおいて、[subtitizing range] を測定するための、コンピューター・プログラムを作った事について、述べたのだが、

[subtitizing range] を測定するための、コンピューター・プログラム (ソースリストあり)

そこでは、画面上に、いくつかの長方形が表示される、という形であった。

もしかしたら、表示される対象物が、このような抽象的な図形(長方形)ではなく、自分が、ふだん、よく目にしているものの画像であるならば、[subitizing range]は、より大きい数値になるのかもしれない。

そのように考え、上記のプログラムを改造した。

改造点は、

 画面上に、長方形を表示するのではなく
 画面上に、指定された画像を表示する
 
という事でなる、下図(Fig 1.1) のように。

Fig 1.1

作製したプログラムを消去してしまうのは、あまりにもおしいので、上記プログラムに、クラスを追加したり、一部を修正する、という方法をとった。

以下、順に、修正、追加について、記述する。

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

以下の記述を読んだ人が、それを単に参考にする、というのであれば、問題は無いと、思われる。

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

その制作、作業、コンピューターの作動の結果、その人や、その人が所属している組織、その人が使用した様々な機器、インフラストラクチャー等の、身の上にどのような事が起ころうとも、私は一切、責任を負わない。

このプログラムは、Java言語を使って、記述されている。

----------
(1) import への追加

下記 (//******** を付記した箇所) のように、import を追加する

import  java.util.Calendar ;

//********************************
import java.awt.image.BufferedImage ;
import java.io.File ;
import javax.imageio.ImageIO ;
import java.io.IOException ;
//********************************

import java.awt.Graphics;
import java.awt.Graphics2D;

----------
(2) ContainParameters クラスへの追加

下記 (//******** を付記した箇所) のように、追加する。
ドライブ [D] 中の、[ImageFile] フォルダー中に、[image_data_file.JPG] という名前のファイルを格納するようにしておく。このファイル中に、表示される画像のデータ を格納しておくようにする。

        //==============================================
      class ContainParameters {
      
          //*************************************************
          public static final String cv_absolute_path_of_file_contains_mark_image
                                     = "D:\\ImageFile\\image_data_file.JPG" ;
          //*************************************************
            
	      public static final int cv_max_trial_number = 20 ;
	      public static final int cv_max_value_of_desired_range = 7 ;
	      

----------
(3) DisplayImage クラスへの追加と修正

下記 (//******** を付記した箇所) のように、追加と修正を行う。

 //==============================================
  class  DisplayImage {

        private  JFrame   cv_ins_JFrame ;
        
        //******************************************
        private  JPaneForDisplay2   cv_ins_JPaneForDisplay2  ;
        //private  JPaneForDisplay   cv_ins_JPaneForDisplay  ;
        //******************************************
    
              //-------------------------------------------------
              // constructer
              //-------------------------------------------------
	    public DisplayImage ( ) {
	
            cv_ins_JFrame = new JFrame ( "Display" ) ;
            cv_ins_JFrame
                        .setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ) ;

        //******************************************
            cv_ins_JPaneForDisplay2  = new JPaneForDisplay2  ( ) ; 
            cv_ins_JFrame.add ( cv_ins_JPaneForDisplay2 ) ;
            //cv_ins_JPaneForDisplay  = new JPaneForDisplay  ( ) ; 
            //cv_ins_JFrame.add ( cv_ins_JPaneForDisplay ) ;
        //******************************************  
            
            cv_ins_JFrame.pack();
            cv_ins_JFrame.setSize (
                                            ( ContainParameters.cv_width_of_DisplayImage + 50 )	  
	                                      , ( ContainParameters.cv_height_of_DisplayImage + 100 ) 
                                                       ) ;
            cv_ins_JFrame.setVisible ( true ) ;
	       }
	     //-------------------------------------------------
	     public void do_repaint ( ) {  

	            //***********************************
	       	    cv_ins_JPaneForDisplay2
	       	           .repaint ( ) ;
	       	    //cv_ins_JPaneForDisplay
	       	     //      .repaint ( ) ;
	       	    //***********************************
	     }
	     //---------------------------------------------
      }

----------
(4) JPaneForDisplay2 クラスを追加する

             //=============================== 
     class  JPaneForDisplay2  extends  	JPanel {

        //-----------------------------------
        public  void paintComponent ( Graphics  arg_ins_Graphics ) {
      
              super.paintComponent ( arg_ins_Graphics ) ;
              
                             //---------- draw backgound area ------------- 
              Color  ins_Color_background = new Color (
                           ContainParameters.cv_Color_background_R
                         , ContainParameters.cv_Color_background_G
                         , ContainParameters.cv_Color_background_B ) ;
               arg_ins_Graphics.setColor  ( ins_Color_background ) ;
               
               arg_ins_Graphics
                          .fillRect (  ContainParameters.cv_margin_of_DisplayImage_Frame
                                           , ContainParameters.cv_margin_of_DisplayImage_Frame
                                           , ContainParameters.cv_width_of_DisplayImage
                                           , ContainParameters.cv_height_of_DisplayImage
                                          ) ;
                           //---------- display guide message ----------------------------------------
              Color  ins_Color_display_text = new Color (
                           ContainParameters.cv_Color_display_text_R
                         , ContainParameters.cv_Color_display_text_G
                         , ContainParameters.cv_Color_display_text_B ) ;
               arg_ins_Graphics.setColor  ( ins_Color_display_text ) ;
               
               int font_size = ContainParameters.cv_height_of_message_one_line - 4 ;
               
              Font  ins_Font = new Font ( "Arial" ,  Font.PLAIN , font_size ) ;
              arg_ins_Graphics.setFont (  ins_Font ) ;
              
              int  location_x = ContainParameters.cv_margin_of_DisplayImage_Frame ;
              int  location_y = 0 ;
              
              for ( int row_of_display_message = 1
                                ; row_of_display_message <=
                                            ContainParameters.cv_number_of_lines_display_text
                                 ; row_of_display_message += 1 ) {
                                
                   location_y = ( ( ContainParameters.cv_height_of_DisplayImage / 3 )
                                                    * 2 )
                                                    +
                                                     ( ContainParameters.cv_height_of_message_one_line
                                                       * row_of_display_message
                                                       )
                                                       ; 
		           arg_ins_Graphics.drawString (
		                        AreaForTransferOfIinformation
                                               .cv_array_display_message [ row_of_display_message - 1 ]
		                     ,  location_x  ,  location_y ) ;
                  }
                           //----------------- draw marks ---------------
                int  figure_set_location_X = 0 ;
                int  figure_set_location_begin_X = 0 ;
                int  figure_set_location_Y  = 0 ;
                int  interval_X = 0 ;

                //*******************************************                
                BufferedImage  ins_BufferedImage
                           = HandleImageData
                                      .get_image_data ( ContainParameters
                                                          .cv_absolute_path_of_file_contains_mark_image ) ;
                //*******************************************
                
               if ( AreaForTransferOfIinformation.cv_phase_of_display_image == 2 ) {               
                    figure_set_location_begin_X 
                             = AreaForTransferOfIinformation
                                     .cv_array_figure_set_location_begin_X
                                            [ AreaForTransferOfIinformation
                                                                   .cv_current_trial_number - 1 ] ;
                    figure_set_location_Y  
                             = AreaForTransferOfIinformation
                                     .cv_array_figure_set_location_Y
                                            [ AreaForTransferOfIinformation
                                                                   .cv_current_trial_number - 1 ] ;
                    interval_X
                              = ContainParameters.cv_width_of_mark_display_area
                                      /  ( AreaForTransferOfIinformation
                                                  .cv_number_value_for_current_trial
                                                        + 1 ) ;		                     
                              //---------------------------
                     for ( int order_number_of_mark = 1
                                           ; order_number_of_mark
                                                   <= AreaForTransferOfIinformation
                                                                 .cv_number_value_for_current_trial
                                            ;   order_number_of_mark += 1 ) {
                                            
                           figure_set_location_X = figure_set_location_begin_X
                                                                             + interval_X * order_number_of_mark ;
                                                                             
                       //*******************************************                                                   
                            arg_ins_Graphics
                                   .drawImage ( ins_BufferedImage
                                                         , figure_set_location_X
                                                         , figure_set_location_Y
                                                         , ContainParameters.cv_width_of_mark
                                                         , ContainParameters.cv_height_of_mark
                                                         , this ) ;
                        //*******************************************    
                     } 
                }
        }       
    }
    

----------
(5) HandleImageData クラスを追加する

//==============================================
      class  HandleImageData {
     
           static String cv_this_class_name = "HandleImageData" ;
     
	      public   static BufferedImage  get_image_data (
	                                         String  arg_absolute_path_of_file_contains_image_data
	                                                                                             ) {
	          File  ins_File 
                     = new File ( arg_absolute_path_of_file_contains_image_data ) ;
                 BufferedImage  ins_BufferedImage_return = null ;
	                                                                                              
                 try {
                    ins_BufferedImage_return  = ImageIO.read ( ins_File ) ; 
                     }
                 catch (IOException e) {
                    System.out.println ( "Error,  arg_absolute_path_of_file_contains_image_data = "
                                                               + arg_absolute_path_of_file_contains_image_data ) ;
                     WaitForPushEnterKey.wait_for_push_enter_key ( )   ;
	             }
	                
	           return  ins_BufferedImage_return ;
	      }                                         
        }
//=========================================

-----

Cognition of Number, Index, 数に関する認知, インデックス へ

いいなと思ったら応援しよう!