Post by 8XenoTrogdor8 on Nov 22, 2004 21:44:52 GMT -5
Ever have those long, boring trigonometry homework assignments where all you do is find angles and sides of triangles? well, then this program is for you!
Happy Triangle solving! ;D
P.S - any feedback on what does/doesn't work or questions about how this works, or ideas to make this better would be appreciated! Thnx!
'From the labs of XenoTrogdor,
'THE TRIANGLE SOLVING PROGRAM!!!
'V 1.05.ha-ha-ha.
Struc SInput
dim Side_a#
dim Side_b#
dim Side_c#
dim Angle_A#
dim Angle_B#
dim Angle_C#
EndStruc
Struc SResult
dim Angle_A#
dim Angle_B#
dim Angle_C#
dim CosAngle_A#
dim CosAngle_B#
dim CosAngle_C#
dim Side_a#
dim Side_b#
dim Side_c#
EndStruc
Dim SResult Result
Dim SInput Input
Dim a
'---------------------Begin---------------------'
'XXXXXXXXXXXXXXXXXXXXX-----XXXXXXXXXXXXXXXXXXXXX'
Start:
TextMode (TEXT_OVERLAID)
GlClear (GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT)
glClearColor(.7, .7, .3, 0)
Cls
Color (0, 0, 0)
Printr "Enter Selection"
Printr "1 = You know side a, b, and c"
Printr "2 = You know side a, b, and angle C"
Printr "3 = You know side a, b, and Angle A"
Print "Selection :"
a = Val (InPut$ ())
if a = 1 then
gosub AllSides
endif
if a = 2 then
gosub TwoSides
endif
if a = 3 then
gosub OneAngle
endif
Printr
Printr "Angle A = " + Result.Angle_A#
Printr "Angle B = " + Result.Angle_B#
Printr "Angle C = " + Result.Angle_C#
Printr "Side a = " + Result.Side_a#
Printr "Side b = " + Result.Side_b#
Printr "Side c = " + Result.Side_c#
Printr
Printr "Enter Selection"
Printr "1 = Graph triangle"
Printr "2 = Solve another triangle"
Print "Selection :"
a = Val (InPut$ ())
if a = 2 then
goto start
endif
if a = 1 then
Printr
Print "Press Space to solve another triangle"
DrawText ()
gosub graph
endif
goto start
'---------------------Choice 1---------------------'
'XXXXXXXXXXXXXXXXXXXXX--------XXXXXXXXXXXXXXXXXXXXX'
AllSides:
Printr
print "Enter Side a :"
Input.Side_a# = Val (Input$ ())
Print "Enter Side b :"
Input.Side_b# = Val (Input$ ())
Print "Enter Side c :"
Input.Side_c# = Val (Input$ ())
Result.Side_a# = Input.Side_a#
Result.Side_b# = Input.Side_b#
Result.Side_c# = Input.Side_c#
KnowAngles:
Result.CosAngle_A# = -((Result.Side_a#*Result.Side_a#) - ((Result.Side_b#*Result.Side_b#) + (Result.Side_c#*Result.Side_c#))) / (2*Result.Side_b#*Result.Side_c#)
Result.CosAngle_B# = -((Result.Side_b#*Result.Side_b#) - ((Result.Side_a#*Result.Side_a#) + (Result.Side_c#*Result.Side_c#))) / (2*Result.Side_a#*Result.Side_c#)
Result.CosAngle_C# = -((Result.Side_c#*Result.Side_c#) - ((Result.Side_b#*Result.Side_b#) + (Result.Side_a#*Result.Side_a#))) / (2*Result.Side_b#*Result.Side_a#)
'57.2957795785523 is 180 / Pi, if your wondering.
Result.Angle_A# = 57.2957795785523 * Atn(-Result.CosAngle_A# / Sqr(-Result.CosAngle_A# * Result.CosAngle_A# + 1)) + 2 * 57.2957795785523 * Atn (1)
Result.Angle_B# = 57.2957795785523 * Atn(-Result.CosAngle_B# / Sqr(-Result.CosAngle_B# * Result.CosAngle_B# + 1)) + 2 * 57.2957795785523 * Atn (1)
Result.Angle_C# = 57.2957795785523 * Atn(-Result.CosAngle_C# / Sqr(-Result.CosAngle_C# * Result.CosAngle_C# + 1)) + 2 * 57.2957795785523 * Atn (1)
return
'---------------------Choice 2---------------------'
'XXXXXXXXXXXXXXXXXXXXX--------XXXXXXXXXXXXXXXXXXXXX'
TwoSides:
Printr
print "Enter Side a :"
Input.Side_a# = Val (Input$ ())
Print "Enter Side b :"
Input.Side_b# = Val (Input$ ())
Print "Enter Angle C :"
Input.Angle_C# = Val (Input$ ())
Result.Side_a# = Input.Side_a#
Result.Side_b# = Input.Side_b#
Result.Side_c# = Sqrt ((Input.Side_a#*Input.Side_a# + Input.Side_b#*Input.Side_b#) - (2*Input.Side_a#*Input.Side_b#*Cosd(Input.Angle_C#)))
Gosub KnowAngles
return
'---------------------Choice 3---------------------'
'XXXXXXXXXXXXXXXXXXXXX--------XXXXXXXXXXXXXXXXXXXXX'
OneAngle:
Printr
print "Enter Side a :"
Input.Side_a# = Val (Input$ ())
Print "Enter Side b :"
Input.Side_b# = Val (Input$ ())
Print "Enter Angle A :"
Input.Angle_A# = Val (Input$ ())
Result.CosAngle_B# = (Input.Side_b# * Sind (Input.Angle_A#)) / Input.Side_a#
Result.Angle_A# = Input.Angle_A#
Result.Angle_B# = 57.2957795785523 * Atn (Result.CosAngle_B# / Sqr (-Result.CosAngle_B# * Result.CosAngle_B# + 1))
Result.Angle_C# = 180 - Result.Angle_A# - Result.Angle_B#
Result.Side_a# = Input.Side_a#
Result.Side_b# = Input.Side_b#
Result.Side_c# = (Result.Side_a# * Sind (Result.Angle_C#)) / Sind (Result.Angle_A#)
Return
'---------------------Graph---------------------'
'XXXXXXXXXXXXXXXXXXXXX-----XXXXXXXXXXXXXXXXXXXXX'
Graph:
GlLoadIdentity ()
GlTranslatef (0, 0, -20)
GlColor3f (0, 0, 0)
GlLineWidth (2)
GlBegin (GL_LINES)
GlVertex2f (0, 0)
GlVertex2f (Result.Side_a#, 0)
GlEnd ()
GlRotatef (Result.Angle_C#, 0, 0, 1)
GlBegin (GL_LINES)
GlVertex2f (0, 0)
GlVertex2f (Result.Side_b#, 0)
GlEnd ()
GlRotatef (-Result.Angle_C#, 0, 0, 1)
GlTranslatef (Result.Side_a#, 0, 0)
GlRotatef (180 - Result.Angle_B#, 0, 0, 1)
GlBegin (GL_LINES)
GlVertex2f (0, 0)
GlVertex2f (Result.Side_c#, 0)
GlEnd ()
GlTranslatef (-Result.Side_a#, 0, 0)
GlRotatef (180 + Result.Angle_B#, 0, 0, 1)
SwapBuffers ()
notyet:
if not scankeydown (VK_SPACE) then
goto notyet
endif
Return
Happy Triangle solving! ;D
P.S - any feedback on what does/doesn't work or questions about how this works, or ideas to make this better would be appreciated! Thnx!