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(パイソン) ,ソースプログラムリスト あり ,プログラム作ってみた ,[指定された曲線を、指定された値で、近似的に等分割し、その結果を画面上に表示する] を 行う へ

この記事が気に入ったらサポートをしてみませんか?