Microsoft Small Basic

Program Listing: bjw864
' Challenge of the month November 2012 Triangle area by NaochanON
' X^2+y^2=a^2 ........... ①
' (c-x)^2+y^2=b^2 .......... ②
' ② - ① = (c-x)^2 - x^2 = b^2 - a^2 therefore 2cX=(a^2 -b^2+c^2) ---> X= (a^2 -b^2+c^2) /2c
' Y = sqr(a^2 - x^2)

GraphicsWindow.BackgroundColor="lightcyan"
GraphicsWindow.PenColor="Red"
GraphicsWindow.FontSize=16
GraphicsWindow.Title=" Mark 3 points by using mouse "
GraphicsWindow.MouseDown=mousedown

Sub mousedown
For j=1 To 6
Shapes.Remove(shape[j])
EndFor
MM=MM+1
mxy[MM]="X="+(GraphicsWindow.MouseX)+";Y="+(GraphicsWindow.MouseY) ' mouse X,Y
el[MM]=shapes.AddEllipse(4,4)
shapes.move(el[mm],mxy[mm]["X"]-2,mxy[mm]["Y"]-2) ' point marks
If MM=3 Then
Calc_area()
MM=0
For i=1 To 3
Shapes.Remove(el[i]) ' remove marks
Endfor
EndIf
EndSub

Sub Calc_area
'--------------- 3 points -----------------------------
msg= "Points X1,Y1="+mxy[1]["X"]+" , "+ mxy[1]["Y"]+" X2,Y2="+mxy[2]["X"]+" , "+ mxy[2]["Y"]+" X3,Y3="+mxy[3]["X"]+" , "+ mxy[3]["Y"]
GraphicsWindow.Title=msg
'--------------- shape triangle -----------------------------
GraphicsWindow.BrushColor="Yellow"
Shape[1]= Shapes.AddTriangle(mxy[1]["X"],mxy[1]["Y"],mxy[2]["X"],mxy[2]["Y"],mxy[3]["X"],mxy[3]["Y"])
Shapes.SetOpacity(Shape[1],50)
'--------------- triangle length area -----------------------------
a2=Math.Power((mxy[1]["X"]-mxy[2]["X"]),2) + Math.Power((mxy[1]["Y"]-mxy[2]["Y"]),2)
b2=Math.Power((mxy[2]["X"]-mxy[3]["X"]),2) + Math.Power((mxy[2]["Y"]-mxy[3]["Y"]),2)
c2=Math.Power((mxy[3]["X"]-mxy[1]["X"]),2) + Math.Power((mxy[3]["Y"]-mxy[1]["Y"]),2)
a=math.Floor(math.SquareRoot(a2)*100)/100
b=math.Floor(math.SquareRoot(b2)*100)/100
c=math.Floor(math.SquareRoot(c2)*100)/100
X=(a2-b2+c2)/2/c
Y=math.SquareRoot(a2-X*X)
cx=mxy[3]["X"]+(c-x)/c*(mxy[1]["X"]-mxy[3]["X"])
cY=mxy[3]["Y"]+(c-x)/c*(mxy[1]["Y"]-mxy[3]["Y"])
Shape[2]=Shapes.AddLine(mxy[2]["X"],mxy[2]["Y"],CX,CY) ' height line
S=c*Y/2 ' Area
'--------------- marks -----------------------------------------------
GraphicsWindow.BrushColor="Navy"
shape[3]= Shapes.AddText("a")
Shapes.Move(shape[3],(mxy[1]["X"]+mxy[2]["X"])/2,(mxy[1]["Y"]+mxy[2]["Y"])/2-10)
shape[4]= Shapes.AddText("b")
Shapes.Move(shape[4],(mxy[2]["X"]+mxy[3]["X"])/2-10,(mxy[2]["Y"]+mxy[3]["Y"])/2)
shape[5]= Shapes.AddText("c")
Shapes.Move(shape[5],(mxy[1]["X"]+mxy[3]["X"])/2+5,(mxy[1]["Y"]+mxy[3]["Y"])/2-5)
shape[6]= Shapes.AddText("Y")
Shapes.Move(shape[6],(mxy[2]["X"]+cx)/2-10,(mxy[2]["Y"]+cy)/2)
'--------------- results ---------------------------------------------------
msg2=" Length a:(X1y1 - X2y2) = "+a+Text.GetCharacter(10)+ " Length b:(X2y2 - X3y3) = "+b+Text.GetCharacter(10)+ " Length c:(X1y1 - X3y3) = "+c+Text.GetCharacter(10)
msg2=msg2+ " Y= "+math.Floor(Y*10)/10 +Text.GetCharacter(10)+"Area S = Y*C/2= "+math.Floor(S*10)/10
Shapes.Remove(Shapes[7])
Shapes[7]=Shapes.AddText(msg2)
Shapes.Move(shape[7],-100,300)
Shapes.Animate(shape[7],20,5,2000)
EndSub