求助,怎么获取任意封闭图形所占面积百分比
vb吧
全部回复
仅看楼主
level 6
求助,怎么获取任意封闭图形所占面积百分比
2021年02月02日 04点02分 1
level 11
方法很多。
主要看你这个“封闭图形”是怎么来的
你已经掌握了什么数据
如果你只有一张jpg或者bmp图片,那就不要追求效率,
2021年02月02日 06点02分 2
已有围成封闭图形曲线的轨迹坐标
2021年02月02日 13点02分
@泛维度生物 那就简单多了。设x(i)、y(i)一一对应,且按线型顺序排好。
2021年02月03日 00点02分
level 11
我想的蠢方法是背景色和前景色,纯色。
2021年02月02日 12点02分 3
level 11
设x(i)、y(i)一一对应,且按线型顺序排好,一共有n个点,i从1到n。
s=(x(1)-x(n))*(y(1)+y(n))
for i=2 to n
s=s+(x(i)-x(i-1)))*(y(i)+y(i-1))
next i
s=abs(s/2)
原理很简单,就是从一段斜线两端向X轴做垂线,斜线、垂线、X轴形成直角梯形。两垂线为上下底,X的差值为高,梯形面积面积=(x2-x1)*(y1+y2)/2.
数学原理上有两点特别提示:①x2小于x1,面积记为负值。②斜线跨越X轴,y1和y2不同号。这两种情况都不影响结果。
编程上有四点,要注意:
①s的初值,实际是闭合轮廓线。
②轮廓的每段构成梯形总和时,会自动扣除或弥补对面线段的影响(实际就是上面说的学术原理的问题)。
③因为轮廓线的方向问题,可能导致最终结果为负值,所以最后取绝对值。
④梯形面积的÷2,放在最后一次计算,没有放在循环内分别计算。
2021年02月03日 00点02分 4
这样,一个封闭图形的面积出来了。总面积也可以这样算,如果是矩形更简单。最后求比例,就不用说了吧
2021年02月03日 00点02分
2021年02月03日 07点02分
level 8
辛普森积分qwq
2021年02月03日 03点02分 5
辛普森积分使用函数类型的,他这个是数据类型的
2021年02月03日 03点02分
@璐村惂鐢ㄦ埛_0748V5Z馃惥 如果是多边形直接极角排序+向量叉积就行qwq
2021年02月03日 03点02分
@冰之源___ 你这个方法,我没有学过。我觉得我的楼上的比较好理解,编写也容易。
2021年02月03日 03点02分
level 12
蒙特卡洛
2021年02月03日 05点02分 6
level 5
找每个点的颜色,比如500*400个点,20万个点,算符合个数除以总个数。应该不难。。
2021年02月03日 10点02分 7
这样效率太低了
2021年02月03日 14点02分
level 6
曲线轨迹坐标存到a(),b()里了,判断是否封闭,总是返回TRUE值
Private Function chk(e() As Variant, l() As Variant) As Boolean
Dim f, k As Variant
chk = False
f = 0
k = 0
For f = 0 To UBound(e()) - 2
For k = f + 1 To UBound(e()) - 1
If e(f) - e(k) = 0 And l(f) - l(k) = 0 Then
chk = True
Exit For
Else
chk = False
End If
Next
Next
End Function
Private Sub Command1_Click()
If chk(a, b) = True Then
Dim m, n As Variant
Dim s As Variant
s = 0
For m = 2 To UBound(a())
s = s + (a(m) - a(m - 1)) * (b(m) + b(m - 1))
Next
Print s
Else
MsgBox "不是闭合曲线"
End If
End Sub
2021年02月04日 01点02分 8
不要检测“封闭性”。强令第一个和最后一个点连起来就自然封闭了。点,必须的顺边界排序的,不能东一榔头西一棒槌。
2021年02月05日 01点02分
1