1# JStrack: copyright 1997/2010 by Jim Graham, N5IAL, all rights reserved. 2# 3 4# This procedure accepts a latitude (dec.) and returns the y coordinate. 5 6proc set_latt {latt} { 7 global min_long max_long min_latt max_latt 8 global ybase 9 10 if {$latt <= $min_latt} { return $ybase($min_latt) } 11 if {$latt >= $max_latt} { return $ybase($max_latt) } 12 13 for {set low $min_latt} {$low < $max_latt} {incr low 2} { 14 set high [expr {$low + 2}] 15 if {$latt >= $low && $latt < $high} { 16 set base_latt $low 17 set next_latt $high 18 break 19 } 20 } 21 22 set vary [expr {($ybase($base_latt) - $ybase($next_latt)) / 2}] 23 return [expr {$ybase($base_latt) - (($latt - $base_latt) * $vary)}] 24} 25 26 27# This procedure accepts a y coordinate and returns the latitude (dec.). 28 29proc get_latt {y} { 30 global min_long max_long min_latt max_latt 31 global ybase 32 33 set base_latt -1 ; set next_latt -1 34 35 for {set low $min_latt} {$low < $max_latt} {incr low 2} { 36 set high [expr {$low + 2}] 37 if {$y > $ybase($high)} { 38 set base_latt $low 39 set next_latt $high 40 break 41 } 42 } 43 44 if {$base_latt < 0 || $next_latt < 0} { return -1 } 45 46 set vary [expr {($ybase($base_latt) - $ybase($next_latt)) / 2}] 47 return [format %0.2f [expr {(($ybase($base_latt) - $y) / $vary) + $base_latt}]] 48} 49 50# This procedure accepts a longitude (dec.) and returns the x coordinate. 51 52proc set_long {long} { 53 global min_long max_long min_latt max_latt 54 global xbase 55 56 if {$long <= $min_long} { return $xbase($min_long) } 57 if {$long >= $max_long} { return $xbase($max_long) } 58 59 for {set low $min_long} {$low < $max_long} {incr low 2} { 60 set high [expr {$low + 2}] 61 if {$long >= $low && $long < $high} { 62 set base_long $low 63 set next_long $high 64 break 65 } 66 } 67 68 set varx [expr {($xbase($base_long) - $xbase($next_long)) / 2}] 69 return [expr {$xbase($base_long) - (($long - $base_long) * $varx)}] 70} 71 72# This procedure accepts an x coordinate and returns the longitude (dec.). 73 74proc get_long {x} { 75 global min_long max_long min_latt max_latt 76 global xbase 77 78 set base_long -1 ; set next_long -1 79 80 for {set low $min_long} {$low < $max_long} {incr low 2} { 81 set high [expr {$low + 2}] 82 if {$x > $xbase($high)} { 83 set base_long $low 84 set next_long $high 85 break 86 } 87 } 88 89 if {$base_long < 0 || $next_long < 0} { return -1 } 90 91 set varx [expr {($xbase($base_long) - $xbase($next_long)) / 2}] 92 return [format %0.2f [expr {(($xbase($base_long) - $x) / $varx) + $base_long}]] 93} 94 95 96# This procedure determines whether or not the coordinates are on the 97# tracking chart. Returns 1 if they are, 0 if they aren't. 98 99proc valid_coords {latt long} { 100 global min_long max_long min_latt max_latt 101 global plot_err 102 103 if {$latt < $min_latt && $long < $min_long} { set plot_err 11 ; return 0 } 104 if {$latt < $min_latt && $long > $max_long} { set plot_err 12 ; return 0 } 105 if {$latt > $max_latt && $long < $min_long} { set plot_err 13 ; return 0 } 106 if {$latt > $max_latt && $long > $max_long} { set plot_err 14 ; return 0 } 107 if {$latt < $min_latt} { set plot_err 1 ; return 0 } 108 if {$latt > $max_latt} { set plot_err 2 ; return 0 } 109 if {$long < $min_long} { set plot_err 3 ; return 0 } 110 if {$long > $max_long} { set plot_err 4 ; return 0 } 111 set plot_err 0 112 return 1 113} 114 115