Below is a Tcl script (solvetriangle.tcl) for solving a triangle given its 3 sides. It will also compute the area and the circumscribed and inscribed radii of the triangle. You will need the Tcl/Tk programming language installed in order to run the script. You can download ActiveTcl, a version of Tcl/Tk for many operating systems, for free here: http://www.activestate.com/activetcl/downloads/
#!/usr/bin/tclsh
if {[llength $argv] != 3 || [lsearch -regexp -not $argv {^[0-9]*[.]?[0-9]*$}] > 0} {
puts "Error: You must pass 3 positive numbers as arguments."
exit
} else {
set a [format "%.10f" [lindex $argv 0]]
set b [format "%.10f" [lindex $argv 1]]
set c [format "%.10f" [lindex $argv 2]]
if {[expr $a + $b] <= $c || [expr $b + $c] <= $a || [expr $c + $a] <= $b} {
puts "This triangle has no solution."
exit
} else {
set r2d [expr 180 / acos(-1)]; #Conversion factor for radians to degrees
puts "Sides:\na = $a\nb = $b\nc = $c\n\nAngles:"
set A [expr acos(($b*$b + $c*$c - $a*$a)/(2*$b*$c)) * ${r2d}]
set B [expr acos(($c*$c + $a*$a - $b*$b)/(2*$c*$a)) * ${r2d}]
set C [expr acos(($a*$a + $b*$b - $c*$c)/(2*$a*$b)) * ${r2d}]
puts "A = ${A} degrees"
puts "B = ${B} degrees"
puts "C = ${C} degrees"
set s [format "%.10f" [expr ($a + $b + $c) / 2]]
puts "\ns = $s"
puts "Area (.5ab*sinC) = [expr 0.5*$a*$b*sin($C/${r2d})]"
puts "Area (.5bc*sinA) = [expr 0.5*$b*$c*sin($A/${r2d})]"
puts "Area (.5ca*sinB) = [expr 0.5*$c*$a*sin($B/${r2d})]"
set K [expr sqrt($s*($s - $a)*($s - $b)*($s - $c))]
puts "Area (Heron) = $K"
set sides [eval lsort -real -decreasing \{$a $b $c\}]
set a [lindex $sides 0]
set b [lindex $sides 1]
set c [lindex $sides 2]
puts "Area (Kahan) = [expr sqrt(($a + ($b + $c))*($c - ($a - $b))*($c + ($a - $b))*($a + ($b - $c)))/4]"
puts "Area (Jiushao) = [expr sqrt(pow($a*$c,2) - pow(($a*$a + $c*$c - $b*$b)/2,2)) / 2]"
puts "\nCircumscribed and inscribed radii:"
puts "R = [expr ($a*$b*$c)/(4*$K)]"
puts "r = [expr $K / $s]"
}
}
Copy that script to a file called solvetriangle.tcl (or download it here), then run it using the lengths of the 3 sides as command-line parameters.
For example, to solve a triangle having sides with lengths 2, 3, and 4, you would run this command:
solvetriangle.tcl 2 3 4
tclsh85 solvetriangle.tcl 2 3 4
The output will look like this:
Sides:
a = 2.0000000000
b = 3.0000000000
c = 4.0000000000
Angles:
A = 28.9550243719 degrees
B = 46.5674634422 degrees
C = 104.477512186 degrees
s = 4.5000000000
Area (.5ab*sinC) = 2.90473750966
Area (.5bc*sinA) = 2.90473750966
Area (.5ca*sinB) = 2.90473750965
Area (Heron) = 2.90473750966
Area (Kahan) = 2.90473750966
Area (Jiushao) = 2.90473750966
Circumscribed and inscribed radii:
R = 2.06559111797
r = 0.645497224369
Notice that the script shows 6 different ways of calculating the area of the triangle, using different formulas discussed in the book. As an experiment, let's see how the six area formulas compare when using sides with lengths 40, 60, and 99.9999999997:
solvetriangle.tcl 40 60 99.9999999997
Sides:
a = 40.0000000000
b = 60.0000000000
c = 99.9999999997
Angles:
A = 0.000114590291538 degrees
B = 0.000171888617868 degrees
C = 179.999713519 degrees
s = 99.9999999998
Area (.5ab*sinC) = 0.00600004519627
Area (.5bc*sinA) = 0.00599993363445
Area (.5ca*sinB) = 0.00600004465697
Area (Heron) = 0.0048990231997
Area (Kahan) = 0.00600005353866
Area (Jiushao) = 0.00600006164827
Circumscribed and inscribed radii:
R = 12247339.4295
r = 4.89902319971e-05