Python(パイソン) ,ソースプログラムリスト あり ,[指定された曲線を、指定された値で、近似的に等分割し、その結果を画面上に表示する] 処理の , [バックヤード処理・サブグループ]
Python(パイソン) ,ソースプログラムリスト あり ,プログラム作ってみた ,[指定された曲線を、指定された値で、近似的に等分割し、その結果を画面上に表示する] を 行う へ
-----
2024.8.17 presented in [note] ( //note.com/runningWater/ )
2024.8.24 rewritten
----------
1 はじめに
これ以降に記述されている内容は、このようなコンピューター・プログラムを制作した、というような事を、ただ、述べているに過ぎない。
以下の記述を読んだ人が、それを単に参考にする、というのであれば、問題は無いと、思われる。
しかし、記述されている内容に沿って、その人が、そこに記されているのと同様の制作や作業を行った際に、その制作、作業、コンピューターの作動の結果、使用されたコンピューター等、様々な方面において、何らかの問題が発生しない、という保証は、全くない。
その制作、作業、コンピューターの作動の結果、その人や、その人が所属している組織、その人が使用した様々な機器、インフラストラクチャー等の、身の上にどのような事が起ころうとも、私は一切、責任を負わない。
このプログラムは、Python(パイソン) 言語を使って、記述されている。
----------
2 バックヤード処理・サブグループ
これは、動作の様が、画面上に現れないような処理を担当する、という機能を果たす、サブルグループである。
これを構成しているモジュールは、以下の通りである。
BackYardProcess
MakeImageData
DrawImageOnBase
Curve
WriteImageToOuterMedia
上記のモジュールたちは、下記のモジュールを適宜、使用する。
-----
Python(パイソン) ,ソースプログラムリスト あり ,プログラム作ってみた ,[エラー処理] を 行う
-----
Python(パイソン) ,OpenCV2 ,ソースプログラムリスト あり ,プログラム作ってみた ,[画像処理, OpenCV2 使用] を 行う
-----
Python(パイソン) ,ソースプログラムリスト あり ,プログラム作ってみた ,[指定された曲線を、指定された値で、近似的に等分割するような、点の位置を求める] を 行う
-----
Python(パイソン) ,ソースプログラムリスト あり ,[指定された曲線を、指定された値で、近似的に等分割し、その結果を画面上に表示する] 処理の , [パラメーター値・保持用・サブグループ]
-----
----------
3 BackYardProcess モジュール
ファイル名 [BackYardProcess.py]
----------
import MakeImageData
import WriteImageToOuterMedia
MODULE_NAME = "BackYardProcess"
global_ins_ImageDataTwoDimensionHandling = " "
#----------------------------------------
def make_image_data ( arg_string_get ) :
function_name = "make_image_data"
print ( "==================================" )
print ( "Enter into Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "==================================" )
global global_ins_ImageDataTwoDimensionHandling
global_ins_ImageDataTwoDimensionHandling \
= MakeImageData.make_image_data ( arg_string_get )
width_of_ImageData \
= global_ins_ImageDataTwoDimensionHandling \
.get_width_of_ImageData ()
height_of_ImageData \
= global_ins_ImageDataTwoDimensionHandling \
.get_height_of_ImageData ()
print ( "==================================" )
print ( "Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "passed phase 1" )
print ( "width_of_ImageData = " + str ( width_of_ImageData ) )
print ( "height_of_ImageData = " + str ( height_of_ImageData ) )
print ( "==================================" )
print ( "==================================" )
print ( "Exit from Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "==================================" )
return global_ins_ImageDataTwoDimensionHandling
#----------------------------------------
def write_image_to_OuterMedia ( ) :
function_name = "write_image_to_OuterMedia"
print ( "==================================" )
print ( "Enter into Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "==================================" )
WriteImageToOuterMedia \
.write_image_to_OuterMedia (
global_ins_ImageDataTwoDimensionHandling
)
print ( "==================================" )
print ( "Exit from Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "==================================" )
return
----------
4 MakeImageData モジュール
ファイル名 [MakeImageData.py]
----------
import ImageDataTwoDimensionHandling
import ParametersContainer
import DrawImageOnBase
MODULE_NAME = "MakeImageData"
# -------------------------------------
def make_image_data ( arg_string_get ) :
function_name = "make_image_data"
print ( "==================================" )
print ( "Enter into Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "==================================" )
abs_path_of_ImageDataFile_ForDisplay \
= ParametersContainer.global_par_abs_path_of_base_directory \
+ ParametersContainer.global_par_path_of_input_directory \
+ ParametersContainer.global_par_path_of_BaseImageDataForDisplay_directory \
+ ParametersContainer.global_par_file_name_part_1_of_BaseImageDataForDisplay \
+ ParametersContainer.global_par_file_name_ending_part_of_BaseImageDataForDisplay
print ( "==================================" )
print ( "abs_path_of_ImageDataFile_ForDisplay = " \
+ abs_path_of_ImageDataFile_ForDisplay )
print ( "==================================" )
# make base image
ins_ImageDataTwoDimensionHandling \
= ImageDataTwoDimensionHandling \
.ImageDataTwoDimensionHandling (
MODULE_NAME
, function_name
)
ins_ImageDataTwoDimensionHandling \
.load_image_data (
MODULE_NAME
, function_name
, abs_path_of_ImageDataFile_ForDisplay
)
width_1 = ins_ImageDataTwoDimensionHandling.get_width_of_ImageData ()
height_1 = ins_ImageDataTwoDimensionHandling.get_height_of_ImageData ()
print ( "==================================" )
print ( "Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "width_1 = " + str ( width_1 ) )
print ( "height_1 = " + str ( height_1 ) )
print ( "==================================" )
DrawImageOnBase \
.draw_image_on_base ( ins_ImageDataTwoDimensionHandling
, arg_string_get
)
print ( "==================================" )
print ( "Exit from Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "==================================" )
return ins_ImageDataTwoDimensionHandling
----------
5 DrawImageOnBase モジュール
ファイル名 [DrawImageOnBase.py]
----------
import cv2
import ImageDataTwoDimensionHandling
import DecideAproximateEquallySpacedPointsOnCurve
import Curve
MODULE_NAME = "DrawImageOnBase"
# -------------------------------------
def draw_image_on_base ( arg_ins_ImageDataTwoDimensionHandling
, arg_string_get
) :
function_name = "draw_image_on_base"
print ( "==================================" )
print ( "Enter into Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "==================================" )
number_of_section = int ( arg_string_get)
print ( "==================================" )
print ( "Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "number_of_section = " , number_of_section )
print ( "==================================" )
incliment_value_of_s = 0.005
ins_Curve = Curve.Curve ( "Test Eclipse + Line" )
#------- draw Curve image ------------
process_continue = "Y"
s_value = 0.0
x_and_y = [ 0 , 0 ]
while ( process_continue == "Y" ) :
x_and_y = ins_Curve \
.decide_x_and_y_by_s_value (
s_value
)
adjusted_x_and_y = adjust_x_and_y ( x_and_y )
from_x_on_ImageData_space = int ( adjusted_x_and_y [ 0 ] - 1 )
from_y_on_ImageData_space = int ( adjusted_x_and_y [ 1 ] + 1 )
to_x_on_ImageData_space = int ( adjusted_x_and_y [ 0 ] + 1 )
to_y_on_ImageData_space = int ( adjusted_x_and_y [ 1 ] - 1 )
arg_ins_ImageDataTwoDimensionHandling \
.insert_rectangle_figure_into_ImageData (
MODULE_NAME # arg_requester_module
, function_name # arg_requester_function
# in the commonly used mathematical XY cordinates
, from_x_on_ImageData_space
, from_y_on_ImageData_space
, to_x_on_ImageData_space
, to_y_on_ImageData_space
, 3 # arg_thickness_of_figure
, 'Y' # arg_fill_inside_Y_or_N
, 50 # arg_color_Blue
, 40 # arg_color_Green
, 120 # arg_color_Red
)
s_value += incliment_value_of_s
print ( "s_value = " + str ( s_value ) )
if ( s_value > 0.99 ) :
process_continue == "N"
break
# ------- draw Equally Spaced Points --------
DecideAproximateEquallySpacedPointsOnCurve \
.decide_values_of_EquallySpacedPointsOnCurve (
ins_Curve
, number_of_section
, incliment_value_of_s
)
number_of_section \
= DecideAproximateEquallySpacedPointsOnCurve \
.get_number_of_section ( )
print ( "number_of_section = " \
+ str ( number_of_section ) )
#--------------------------------------------
for i in range ( 1 , ( number_of_section + 0 ) , 1 ) :
#----------------------------------
x_and_y = DecideAproximateEquallySpacedPointsOnCurve \
.get_x_and_y_value_at_section_end ( i )
adjusted_x_and_y = adjust_x_and_y ( x_and_y )
# in the commonly used mathematical XY cordinates
from_x_on_ImageData_space = int ( adjusted_x_and_y [ 0 ] - 7 )
from_y_on_ImageData_space = int ( adjusted_x_and_y [ 1 ] + 7 )
to_x_on_ImageData_space = int ( adjusted_x_and_y [ 0 ] + 7 )
to_y_on_ImageData_space = int ( adjusted_x_and_y [ 1 ] - 7 )
#------------------------------------
arg_ins_ImageDataTwoDimensionHandling \
.insert_rectangle_figure_into_ImageData (
MODULE_NAME # arg_requester_module
, function_name # arg_requester_function
# in the commonly used mathematical XY cordinates
, from_x_on_ImageData_space
, from_y_on_ImageData_space
, to_x_on_ImageData_space
, to_y_on_ImageData_space
, 3 # arg_thickness_of_figure
, 'Y' # arg_fill_inside_Y_or_N
, 150 # arg_color_Blue
, 40 # arg_color_Green
, 20 # arg_color_Red
)
print ( "==================================" )
print ( "Exit from Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "==================================" )
return arg_ins_ImageDataTwoDimensionHandling
#------------------------------------------
def adjust_x_and_y ( arg_x_and_y ) :
x_adjusted = 270 + ( arg_x_and_y [ 0 ] * 2.0 )
y_adjusted = 150 + ( arg_x_and_y [ 1 ] * 2.0 )
return_value = [ x_adjusted , y_adjusted ]
return return_value
----------
6 Curve モジュール
等分割処理の対象となる曲線の形状を、このモジュールを使って、定義する。
このモジュールの記述内容を変更することにより、これとは異なる曲線に対しての処理が可能となる。
ファイル名 [Curve.py]
----------
import math
#===========================================
class Curve :
CV_CLASS_NAME = "Curve"
#------------------------------------------------------------
# definition of constructer
def __init__( self
, arg_Curve_ID
):
methode_name = "constructer"
self.iv_Curve_ID = arg_Curve_ID
#------------------------------------------------------------
# definition of figure of this Curve
# x and y is decided by parameter s_value
# s_value must be in range , from 0.0 to 1.0
def decide_x_and_y_by_s_value ( self
, arg_s_value
):
methode_name = "decide_x_and_y_by_s_value"
# ellipse figure
horizontal_direction_radius = 80
vertical_direction_radius = 50
#-------------------------------
if ( arg_s_value < 0.5 ) :
#-------------- vertical line ------
x_value = horizontal_direction_radius \
* ( arg_s_value * 2 )
y_value = 0
else :
#------------- ellipse figure curve ------
t_value = ( arg_s_value - 0.5 ) * ( 2 * math.pi )
x_value = horizontal_direction_radius * math.cos ( t_value )
y_value = vertical_direction_radius * math.sin ( t_value )
#--------- return decided value
return_value = [ x_value , y_value ]
return return_value
----------
6 WriteImageToOuterMedia モジュール
ファイル名 [WriteImageToOuterMedia.py]
----------
import datetime
import MakeImageData
import ParametersContainer
MODULE_NAME = "WriteImageToOuterMedia"
#----------------------------------------
def write_image_to_OuterMedia (
arg_ins_ImageDataTwoDimensionHandling
) :
function_name = "write_image_to_OuterMedia"
print ( "==================================" )
print ( "Enter into Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "==================================" )
#get date and time value
date_now = datetime.date.today()
time_now = datetime.datetime.now() \
.time()
date_now_string = str ( date_now )
date_now_string_rewritten = \
date_now_string \
.translate ( \
str.maketrans ( \
{ '.' : '_' \
, '-' : '_' \
} \
) \
)
print ( "date_now_string = " + date_now_string )
print ( "date_now_string_rewritten = " + date_now_string_rewritten )
time_now_string = str ( time_now )
time_now_string_rewritten = \
time_now_string \
.translate ( \
str.maketrans ( \
{ '.' : '_' \
, '-' : '_' \
, ':' : '_' \
} \
) \
)
print ( "time_now_string = " + time_now_string )
print ( "time_now_string_rewritten = " + time_now_string_rewritten )
print ( "date_now = " + str ( date_now ) )
print ( "time_now = " + str ( time_now ) )
if ( ParametersContainer \
.global_par_insert_date_and_time_Y_N == "Y" ) :
#insert date and time into ImageData
arg_ins_ImageDataTwoDimensionHandling \
.insert_text_into_ImageData (
MODULE_NAME
, function_name
# in the commonly used mathematical XY cordinates
, 50 #arg_x_on_ImageData_space
, 30 #arg_y_on_ImageData_space
, #insert String
( str ( date_now ) + " , " + str ( time_now ) )
, 60 # arg_font_color_Blue
, 20 # arg_font_color_Green
, 150 # arg_font_color_Red
)
#-------------------------------------
abs_path_of_output_file \
= ParametersContainer.global_par_abs_path_of_base_directory \
+ ParametersContainer.global_par_path_of_output_directory \
+ ParametersContainer.global_par_path_of_CopyOfDisplayingImageData_directory \
+ ParametersContainer.global_par_file_name_part_1_of_CopyOfDisplayingImageData \
+ "_" \
+ date_now_string_rewritten \
+ "_" \
+ time_now_string_rewritten \
+ ParametersContainer.global_par_file_name_ending_part_of_CopyOfDisplayingImageData
arg_ins_ImageDataTwoDimensionHandling \
.write_loaded_image_data_to_directed_path (
MODULE_NAME #requester module name
, function_name #requester function name
, abs_path_of_output_file )
print ( "==================================" )
print ( "Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "Image Data have been written into directed media" )
print ( "abs_path_of_output_file = " \
+ abs_path_of_output_file )
print ( "==================================" )
print ( "==================================" )
print ( "Exit from Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "==================================" )
return
----------
Python(パイソン) ,ソースプログラムリスト あり ,プログラム作ってみた ,[指定された曲線を、指定された値で、近似的に等分割し、その結果を画面上に表示する] を 行う へ