用VB求面积

flyseagle 2005-03-21 02:39:51
若在PictureBox中描绘一闭合区域(任意多边形或曲线圈起的图形),怎么用VB计算该闭合区域所圈的面积.
...全文
145 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
AprilSong 2005-03-21
  • 打赏
  • 举报
回复
窗体直接加这些代码看看~
可以算任意多边形面积

有曲线的部分可以用积分做

Option Explicit

Private Type Point
X As Long
Y As Long
End Type

Dim pCount As Integer '点总数
Dim P(20) As Point '点坐标

Private Sub Form_Load()
Me.AutoRedraw = True
Me.ScaleMode = 3

pCount = 0
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If pCount > 19 Then Exit Sub

If Button = vbRightButton Then pCount = 0

P(pCount).X = X
P(pCount).Y = Y
pCount = pCount + 1

DrawPolygon
xCalc
End Sub


Private Sub DrawPolygon()
Dim i As Integer

Me.Cls

'顶点
Me.ForeColor = vbBlue
Me.DrawWidth = 5
For i = 0 To pCount - 1
Me.PSet (P(i).X, P(i).Y)
Next

If pCount < 3 Then Exit Sub

'边线
Me.DrawWidth = 2
For i = 0 To pCount - 2
Me.Line (P(i).X, P(i).Y)-(P(i + 1).X, P(i + 1).Y)
Next
Me.Line (P(0).X, P(0).Y)-(P(pCount - 1).X, P(pCount - 1).Y)

'多边形的分割
Me.DrawWidth = 1
Me.ForeColor = vbRed
For i = 2 To pCount - 2
Me.Line (P(i).X, P(i).Y)-(P(0).X, P(0).Y)
Next
End Sub

'计算各块面积
Private Sub xCalc()
Dim i As Integer
Dim S As Single
Dim tS As Single

'三角形的三个顶点为ABC
'坐标分别为(a1,a2)、(b1,b2)、(c1,c2)
'那么面积
'S = (AB * BC * Sin∠ABC) / 2 = (a1b2 + b1c2 + c1a2 - a1c2 - a2b1 - b2c1) / 2
'这里始终用第一个点作B点,用相邻点作AC点
For i = 1 To pCount - 2
S = P(i).X * P(0).Y + P(0).X * P(i + 1).Y + P(i + 1).X * P(i).Y
S = S - P(i).X * P(i + 1).Y - P(i).Y * P(0).X - P(0).Y * P(i + 1).X
S = S / 2

Me.CurrentX = P(i).X
Me.CurrentY = P(i).Y
Me.Print "(" & P(i).X & "," & P(i).Y & "):"; S
tS = tS + S
Next

If tS < 0 Then tS = -tS

Me.Caption = "总面积:" & tS
End Sub
YaDa 2005-03-21
  • 打赏
  • 举报
回复
如果闭合区域是一种特定的、PictureBox中唯一的颜色。则只要计算一下这种颜色的点数就行了(精度不是很高,道理与厘米纸上数小方块是一样的)。如果不是PictureBox中唯一的颜色,可以在另外的PictureBox中复制一块,然后填充某种颜色,然后再计算。
cuoguonili 2005-03-21
  • 打赏
  • 举报
回复
gz
88391788 2005-03-21
  • 打赏
  • 举报
回复
利用多边形面积公式计算 加几个变量 用循环 做参数

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧