[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) のように。
作製したプログラムを消去してしまうのは、あまりにもおしいので、上記プログラムに、クラスを追加したり、一部を修正する、という方法をとった。
以下、順に、修正、追加について、記述する。
ここに記述されている内容は、このようなコンピューター・プログラムを制作した、それを動かしたら、このような結果になった、というような事を、ただ、述べているに過ぎない。
以下の記述を読んだ人が、それを単に参考にする、というのであれば、問題は無いと、思われる。
しかし、記述されている内容に沿って、その人が、そこに記されているのと同様の制作や作業を行った際に、その制作、作業、コンピューターの作動の結果、使用されたコンピューター等、様々な方面において、何らかの問題が発生しない、という保証は、全くない。
その制作、作業、コンピューターの作動の結果、その人や、その人が所属している組織、その人が使用した様々な機器、インフラストラクチャー等の、身の上にどのような事が起ころうとも、私は一切、責任を負わない。
このプログラムは、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 ;
}
}
//=========================================