下面,我们来设计一个强悍的程序
嘿嘿,程序设计起码要这样才有点意思嘛
我们在Picture上画一个三角形,这下可不是Print一堆字符了
我们必须要先算出三角形的 三个顶点 然后连线
比如三角形 ABC三点 我们以A作为坐标原点,对应Picture的中心
我们用X,Y来计算坐标和Picture上坐标的偏移量,A为(0,0)
如果AB长为a 沿着X轴,那么B点的坐标是(a,0)
现在来算C点,根据余弦定理有
'c^2=a^2+b^2-2*a*b*CosC
'CosC=(a^2+b^2-c^2)/2ab
别烦恼了,我数学也马虎,余弦定理难算,我们就来个简单的
(聪明的程序员会千方百计设计出程序)
以A为圆心 AC长(c)为半径的园 X^2+Y^2 = c^2
以B为圆心 BC长(b)为半径的园 (X-a)^2+Y^2=b^2
C点为两个圆的交线,所以两个方程,两个未知数,注意有两个交点哦
(隐隐感觉到 这个就是余弦定理) 解出
2*a*X=a^2+c^2-b^2 '因为我们设AB沿着X轴,所以X只有一个值
把X代入第一个方程 得出 Y=Sqr(c^2 - X^2) ,这里Sqr为平方根
得到的是正值,也就是舍去了低于X轴的那个(程序里下面的Y坐标大)
三个标签 垂直方向对应Text1,Text2,Text3分别存放变长a,b,c
一个按钮 一个Picture
Private Sub Command1_Click() Dim a As Single, b As Single, c As Single Dim pX(2) As Single, pY(2) As Single Dim dX As Integer, dY As Integer a = CSng(Text1.Text) b = CSng(Text2.Text) c = CSng(Text3.Text) If a + b < c Or b + c < a Or a + c < b Then MsgBox "无法够成三角形!", vbExclamation End If Picture1.Cls '清除Picture上的图形 Picture1.ScaleMode = 3 '以像素为单位 Picture1.AutoRedraw = True '自动重画 dX = CInt(Picture1.ScaleWidth / 2) dY = CInt(Picture1.ScaleHeight / 2) pX(0) = 0: pY(0) = 0 pX(1) = a: pY(1) = 0 pX(2) = (a ^ 2 + c ^ 2 - b ^ 2) / (2 * a) pY(2) = Sqr(c ^ 2 - pX(2) ^ 2) Picture1.Line (dX + pX(0), dY + pY(0))-(dX + pX(1), dY + pY(1)) Picture1.Line (dX + pX(1), dY + pY(1))-(dX + pX(2), dY + pY(2)) Picture1.Line (dX + pX(2), dY + pY(2))-(dX + pX(0), dY + pY(0)) End Sub
好吧,来看看我们画出了什么球样
想给图形填充吗?嘿嘿,哪还要更复杂的算法呢,加油吧,未来的世界是我们的