Parametric Equation Model Vaporware TCL calculator




This page is under development. Constructive comments are welcome, but please load any constructive comments in the comments section at the bottom of the page. Please include your wiki MONIKER and date in your comment with the same courtesy that I will give you. Aside from your courtesy, your wiki MONIKER and date as a signature and minimal good faith of any internet post are the rules of this TCL-WIKI. Its very hard to reply reasonably without some background of the correspondent on his WIKI bio page. Thanks, gold 3/9/2024



Title: Parametric Equation Model Vaporware TCL Calculator


Preface


gold Here are some TCL calculations for Parametric Equation Model Vaporware in calculator shell. This is a display mock up or vaporware program with dummy parametric calculations for an Ellipse.



gold Update 3/7/2024. The author is retired engineer on Windows 10 and no longer has proofing access to Unix machines. Unix is respected after use of so many decades in engineering, but my wings are lost. I did find a useful online IDE, jdoodle. I can paste from a text file, edit, and run an output using this online IDE.



Not a Replacement for TCL Core


This page on developing pseudocode examples and one line procedures is not a replacement for the current Tcl core and Tcllib, which is much improved since Tcl version 4, and other <faster> language constructs. math ops, Tcllib routines, and other compiled routines can reduce the cost of big-data tasks by about 1/3. The time savings of the core are not always obvious on small quantities of data, like 4 or 5 numbers. Performance of one-line programs may suffer degradation due to lengthy recursion calls, and may be limited by constraints on recursion. Dependence on math operator notation, helper procedures, math check examples, degradation due to lengthy recursion calls, and special library functions should be noted in the comment lines.



Introduction


gold 10/3/2020 Forwarding offline request to Ask13 page. Will take me some time to find references, but maybe our other members have something to say.


9/29/2020. X-Non >>> Hi everyone, I should apply to at my parametric model a list of values (w_list) with cycle for. In each step the code must set 3 coefficients (k1,k2,k3)

set w_list [list {0.12} {0.14} {0.16} {0.18} {0.20}];
set k1_list [list {1.080} {1.101} {1.123} {1.144} {1.166}];
set k2_list [list {1.116} {1.213} {1.260} {1.309} {1.360}];
set k3_list [list {1.915} {2.157} {2.402} {2.649} {2.898}];
At the moment I put only this string:
for {set index4 0} {$index4<[llength $w_list]} {incr index4} {
set w [lindex $w_list $index4]

X-Non >>> How can I continue?


gold 10/01/2020. Look up model program on Timing Equivalent One Liners V2 at the bottom of the file One Liners Programs Compendium and TCL demo examples calculations, numerical analysis. I do not load braces around elements for computations, set k1_list {list 1.080 1.101 1.123 1.144 1.166 }, but there are many possible list formats, I guess. Suggest morf this parametric equation into graphical user interface gui that one could use. equation+of+rotated+ellipse from GS is maybe simple. But rotated-ellipse code looks fairly robust here and the display might be a step up. Not sure what your >> application<< is, but one could probably use a slot calculator 1) window for numeric entries controlling the calculation proc and the 2) graphics display windows. Data transfer in vaporware uses global variables. The slot calculators have 8 slots. The calculation proc supplies 5 parameters from dummy number calculations to the ellipsoidal parametric equations. The calculation proc uses a for loop, as you requested. Suggest check out pages or websites of GS and uniquename.


gold 10/02/2020 sic. Forwarded your query to the TCL Wiki on ASK 13 page . This TCL Wiki on ASK 13 page is easier <for me> to type and format an answer.


gold 10/03/2020. What is your application? What system are you trying to model, bio, engr design, geometry, or physics? Check below link uniquename. This uniquename website seems crack beyond what I have done.


gold 10/7/2020, Individual could not be contacted and/or answer for further feedback. Loaded available contributions on new wiki page. Further wiki contributions are welcomed on new page, but believe the abundant references on tcl wiki are suitable, if applied.


References.




Discussion



Conclusions


The TCL calculator seems to be working as it stands.



ScreenShot Section


Figure 1 , Parametric Model Mockup Display


new page ask13


Figure 2 , Sample of plain calculator


bablylonian_trapezoid_cal


Appendix Code

appendix TCL programs and scripts


        # pretty print from autoindent and ased editor
        # Parametric Model Vaporware   V2
        # written on Windows 10 on TCL
        # working under TCL version 8.6
        # Code may have dependencies on W10 & ActiveState TCL 8.6 
        # and Tcllib libraries. Uses W10 & ActiveState TCL console
        # uses mathop statements
        # gold on  TCL Club, 4Oct2020
        # charting based on rotated ellipse by Gerard Sookahet
        # gold added push buttons calculatorand housekeeping 
        # using dummy calculations for parametric eq. calc.    
        package require Tk
        package require math::numtheory
        # added statements for TCLLIB library
        package require math::numtheory
        package require math::constants
        package require math::trig
        package require math
        namespace path {::tcl::mathop ::tcl::mathfunc math::numtheory math::trig math::constants }
        # Tried to keep clean GS  code in upper section
        set tcl_precision 17
        proc pie {} {expr acos(-1)} ;# AMG
        # Section EllipseRotate  
        # Section proc EllipseRotate Author:Gerard Sookahet
        # Description: Simple graphical example of parametric equation of rotated ellipse
        #
        # xo,yo : center of the ellipse
        # angle : rotation angle from 0 to 7 with the scalebar
        # a : major radius
        # b : minor radius
        # t : parameter
        bind all <Escape> {exit}
        #  proc Author       Gerard Sookahet
        proc EllipseRotate {xo yo a b angle t} {
            global side1 side2 side3 side4 side5
            global side6 side7 side8
            set cosa [expr {cos($angle)}]
            set sina [expr {sin($angle)}]
            set cost [expr {cos($t)}]
            set sint [expr {sin($t)}]
            set x [expr {$xo + $a*$cosa*$cost - $b*$sina*$sint}]
            set y [expr {$yo + $a*$sina*$cost + $b*$cosa*$sint}]
            return [list $x $y]
        }
        proc EllipsePlot {w xo yo a b pi angle} {
            $w delete all
            lassign [EllipseRotate $xo $yo $a $b $angle 0] x2 y2
            for {set p 0} {$p <= 720} {incr p} {
                set t [expr {$pi*$p/360}]
                lassign [EllipseRotate $xo $yo $a $b $angle $t] x1 y1
                .c create line $x1 $y1 $x2 $y2 -fill blue -width 3
                set x2 $x1
                set y2 $y1
            }
        }
        # fallback settings
        #set width 600
        #set height 400
        set width 800
        set height 500
        set pi 3.1415926
        set xo [expr {$width/2}]
        set yo [expr {$height/2}]
        set a 200
        set b 100
        set angle [expr {$pi/6}]
        #pack [canvas .c -width $width -height $height -background black]
        #pack [scale .sc -from 0 -to 7 -length 240 -resolution .1 \
                -orient horiz -bd 1 -showvalue true -variable angle \
                -command {EllipsePlot .c $::xo $::yo $::a $::b $::pi}]
        package require Tk
        package require math::numtheory
        namespace path {::tcl::mathop ::tcl::mathfunc math::numtheory }
        set tcl_precision 17
        frame .frame -relief flat -bg aquamarine4
        pack .frame -side top -fill y -anchor center
        set names {{} {parameter 1:} }
        lappend names {parameter 2:}
        lappend names {parameter 3:}
        lappend names {parameter 4:}
        lappend names {parameter 5:}
        lappend names {parameter 6:}
        lappend names {parameter 7:}
        lappend names {parameter 8:}
        foreach i {1 2 3 4 5 6 7 8} {
            label .frame.label$i -text [lindex $names $i] -anchor e
            entry .frame.entry$i -width 35 -textvariable side$i
            grid .frame.label$i .frame.entry$i -sticky ew -pady 2 -padx 1 }
        proc about {} {
            set msg "Calculator for Parametric Model Vaporware   V2
            from TCL ,
            # gold on  TCL Club, 10Jul2020 "
            tk_messageBox -title "About" -message $msg }
        proc self_help {} {
            set msg "Calculator for Parametric Model Vaporware V2
            from TCL ,
            # self help listing
            # 4 givens follow.
            # 1) parameter 1:
            # 2) parameter 1:
            # 3) parameter 1: 
            # 4) parameter 1:
            # Recommended procedure is push testcase and fill frame,
            # change first three entries etc, push solve,
            # and then push report. Report allows copy and paste
            # from console to conventional texteditor. For testcases
            # testcase number is internal to the calculator and
            # will not be printed until the report button is pushed
            # for the current result numbers.
            # gold on  TCL Club, 2Oct2020 "
            tk_messageBox -title "About" -message $msg }
        #  uses join, but computer time on some?
        proc mean_1  list {expr double([join $list +])/[llength $list]}
        # math operators exposed as commands, and the expand operator
        # math operators exposed as commands, and the expand operator
        proc mean_2  list {expr {[tcl::mathop::+ {*}$list]/double([llength $list])}}
        #  import the tcl::mathop operators
        proc mean_3 list {expr {[+ {*}$list]/double([llength $list])}}
        #  import the tcl::mathop operators from <Summing a list>
        proc table_calc {value} {
        # computer drag time sensitive on limit variable
        set limit 3
        # should apply to at my parametric model
        # a list of values (w_list) with cycle for.
        # In each step the code must set 3 coefficients (k1,k2,k3)
        # copy original format internet query
        set w_list [list  0.12   0.14   0.16   0.18   0.20 ];
        set k1_list [list {1.080} {1.101} {1.123} {1.144} {1.166}];
        set k2_list [list {1.116} {1.213} {1.260} {1.309} {1.360}];
        set k3_list [list {1.915} {2.157} {2.402} {2.649} {2.898}];
        # gold does not use braces around list elements, left as original 
        # copy of original format in internet query
        # setting table of dummy calculations
        # with data supplied in internet query
        puts "%|table| | printed in|TCL format |% "
        puts "&| session| proc &  mean value| elements in list  | comment, if any|& "
        for { set i 0 } { $i <= $limit }  { incr i } {
            # may leave redundant or fallback statements in draft program
            # set lister { 1 2 4 5 6 7 8 9 10 }
            set lister { 0.12   0.14   0.16   0.18   0.20 }
            lappend lister  [* $i [pie]]
            puts "&|$i | mean_1   [ mean_1  $lister ]| $lister |  $k1_list |   [ mean_1  $k1_list ]  |&"
            puts "&|$i | mean_2   [ mean_2  $lister ]| $lister |  $k2_list |   [ mean_2  $k2_list ]  |&"
            puts "&|$i | mean_3   [ mean_3  $lister ]| $lister |  $k2_list |   [ mean_3  $k3_list ]  |&"
        }}
        proc calculate {     } {
            global side1 side2 side3 side4 side5
            global side6 side7 side8
            global testcase_number
            incr testcase_number
            set side1 [* $side1 1. ]
            set side2 [* $side2 1. ]
            set side3 [* $side3 1. ]
            set side4 [* $side4 1. ]
            set side5 [* $side5 1. ]
            set side6 [* $side6 1. ]
            set side7 [* $side7 1. ]
            set side8 [* $side8 1. ]
            set side5 1.
            set side6 1.
            set side7 1.
            set side8 1.
            table_calc 1
            set w_list [list  0.12   0.14   0.16   0.18   0.20 ] 
            set velocity_0 $side1
            set velocity_1 $side2
            set base_line [ expr { abs (  $side4 - $side3 )} ]
            set calculation_1 [ expr { .5 * ( $side1 + $side2 ) * 60. } ]
            set bisection_1 [ expr { .5 * $calculation_1 } ]
            set bisection_velocity_c [ expr {  ((($velocity_0)**2 +($velocity_1)**2)/2.)**.5 }]
            set bisection_time_c [ expr { $base_line * (  $velocity_0 -  $bisection_velocity_c  ) /  ( $velocity_0 -  $velocity_1  )  }]
            set side5 $bisection_velocity_c
            set side6 $bisection_1
            set side7 $bisection_time_c
            set side8 $calculation_1
            set side1 [* $side1 100. ]
            set side2 [* $side2 100. ]
            set side3 [* $side3 100. ]
            set side4 [* $side4 100. ]
            set side5 [* $side5 100. ]
            set side6 [* $side6 100. ]
            set side7 [* $side7 100. ]
            set side8 [* $side8 100. ]
        }
        proc fillup {aa bb cc dd ee ff gg hh} {
            .frame.entry1 insert 0 "$aa"
            .frame.entry2 insert 0 "$bb"
            .frame.entry3 insert 0 "$cc"
            .frame.entry4 insert 0 "$dd"
            .frame.entry5 insert 0 "$ee"
            .frame.entry6 insert 0 "$ff"
            .frame.entry7 insert 0 "$gg"
            .frame.entry8 insert 0 "$hh"
        }
        proc clearx {} {
            foreach i {1 2 3 4 5 6 7 8 } {
                .frame.entry$i delete 0 end } }
        proc reportx {} {
            global side1 side2 side3 side4 side5
            global side6 side7 side8
            global testcase_number
            console show;
            console eval {.console config -bg palegreen}
            console eval {.console config -font {fixed 20 bold}}
            console eval {wm geometry . 40x20}
            console eval {wm title . " Parametric Model Vaporware  V2 Report , screen grab and paste from console 2 to texteditor"}
            console eval {. configure -background orange -highlightcolor brown -relief raised -border 30}
            puts "%|table $testcase_number|printed in| tcl format|% "
            puts "&| quantity| value| comment, if any|& "
            puts "&| $testcase_number:|testcase_number | |&"
            puts "&| $side1 :|parameter 1: |   |&"
            puts "&| $side2 :|parameter 2: | |& "
            puts "&| $side3 :|parameter 3: | |& "
            puts "&| $side4 :|parameter 4: | |&"
            puts "&| $side5 :|parameter 5:| |  |&"
            puts "&| $side6 :|parameter 6:| |  |&"
            puts "&| $side7 :|parameter 7:| |  |&"
            puts "&| $side8 :|parameter 8:| |  |&"
            
        }
        frame .buttons -bg aquamarine4
        ::ttk::button .calculator -text "Solve" -command { calculate   }
        ::ttk::button .test2 -text "Testcase1" -command {clearx;fillup 1.080 1.101 1.123  1.144  1.116 1.0  1.0  1.0 }
        ::ttk::button .test3 -text "Testcase2" -command {clearx;fillup 1.116 1.213  1.260  1.309  1.360 1.0  1.0  1.0 }
        ::ttk::button .test4 -text "Testcase3" -command {clearx;fillup 1.915 2.157 2.402  2.649  2.649 1.0  1.0  1.00  }
        ::ttk::button .clearallx -text clear -command {clearx }
        ::ttk::button .about -text about -command {about}
        ::ttk::button .self_help -text self_help -command {self_help}
        ::ttk::button .console2 -text report -command { reportx }
        ::ttk::button .exit -text exit -command {exit}
        canvas .c -width $width -height $height -background black
        scale .sc -from 0 -to 7 -length 240 -resolution .1 \
                -orient horiz -bd 1 -showvalue true -variable angle \
                -command {puts " display scale $side1 $side2 $side3 $side4 [pie]"; EllipsePlot .c $side1 $side2 $side3 $side4 [pie]}
        pack .c .sc .calculator -in .buttons -side top -padx 10 -pady 5 
        pack  .clearallx .console2 .self_help .about .exit .test4 .test3 .test2   -side left -in .buttons
        grid .frame .buttons -sticky ns -pady {0 10}
        . configure -background aquamarine4 -highlightcolor brown -relief raised -border 30
        wm title . " Parametric Model Vaporware V2"
        # gold on TCL Club, 8Jul2020
        # end of file


Pushbutton Operation

For the push buttons, the recommended procedure is push testcase and fill frame, change first three entries etc, push solve, and then push report. Report allows copy and paste from console.

For testcases in a computer session, the eTCL calculator increments a new testcase number internally, eg. TC(1), TC(2) , TC(3) , TC(N). The testcase number is internal to the calculator and will not be printed until the report button is pushed for the current result numbers. The current result numbers will be cleared on the next solve button. The command { calculate; reportx } or { calculate ; reportx; clearx } can be added or changed to report automatically. Another wrinkle would be to print out the current text, delimiters, and numbers in a TCL wiki style table as

  puts " %| testcase $testcase_number | value| units |comment |%"
  puts " &| volume| $volume| cubic meters |based on length $side1 and width $side2   |&"  

Partial Pseudocode for Main Functions


gold 3/9/2024 update.


# Pseudocode
 
Pseudocode for the main procedures:

1.  `EllipseRotate`:

    Procedure EllipseRotate(xo, yo, a, b, angle, t)
        Calculate cosa = cos(angle)
        Calculate sina = sin(angle)
        Calculate cost = cos(t)
        Calculate sint = sin(t)
        Calculate x = xo + a * cosa * cost - b * sina * sint
        Calculate y = yo + a * sina * cost + b * cosa * sint
        Return [x, y]
    

2.  `EllipsePlot`:

    Procedure EllipsePlot(window, xo, yo, a, b, pi, angle)
        Clear the window
        Calculate initial x2, y2 using EllipseRotate
        For p from 0 to 720
            Calculate t = pi * p / 360
            Calculate x1, y1 using EllipseRotate
            Create a blue line in the window connecting x1, y1 to x2, y2
            Update x2, y2 to x1, y1
    

3.  `table_calc`:

    Procedure table_calc(value)
        Set w_list as a list of values
        Set k1_list, k2_list, k3_list as lists of coefficients
        For i from 0 to limit
            Create list lister with value and pi*i/360
            Calculate mean_1, mean_2, mean_3 of lister and k1_list, k2_list, k3_list
            Print the results in a table format
    

4.  `calculate`:

    Procedure calculate()
        Global variables side1 to side8
        Increment testcase_number
        Multiply side1 to side8 by 1.
        Call the calculate function with the updated variables and testcase_number

These pseudocode procedures provide a simplified representation of the original Tcl code, highlighting the main steps and calculations performed within each procedure. The original code is written in Tcl (Tool Control language), a high-level programming language often used in scripting and system administration tasks. These pseudocode listing contain several procedures, including pieEllipseRotateEllipsePlottable_calc, and calculate.


Pseudocode for Housekeeping Functions



gold 3/9/2024 update.


# Pseudocode
procedure about():
  Display message box with information about the calculator

procedure self_help():
  Display message box with a list of self-help items

procedure mean_1(list):
  Compute the mean of the list using the join and llength commands

procedure mean_2(list):
  Compute the mean of the list using the tcl::mathop::+ command

procedure mean_3(list):
  Compute the mean of the list using the + and llength commands

procedure table_calc():
  Print a table with various calculations using the mean_1, mean_2, and mean_3 procedures

procedure fillup(aa, bb, cc, dd, ee, ff, gg, hh):
  Fill input fields with given values

procedure clearx():
  Clear all input fields

procedure reportx():
  Generate a report with the results of the calculations and print it in a console window

The TCL code contains procedures and functions related to a calculator for a parametric model. The code uses various commands and functions from the TCL library, including joinllength, and tcl::mathop::+. The procedures perform different calculations and operations, such as computing the mean of a list of values and generating a report with the results. The code also includes message boxes for displaying information and input fields for user interaction. Overall, the TCL code is designed to perform specific calculations and operations related to a parametric model.


Change List


gold 3/9/2024. removed copyright notices


gold 3/9/2024. added some pseudocode sections.


Hidden Comments Section

Please place any comments here, Thanks.