Visual Basic中生成无重叠圆形时出现同圆心问题的解决求助
Visual Basic中生成无重叠圆形时出现同圆心问题的解决求助
各位好,我最近在Visual Basic里做一个功能:在窗体上生成多个既不重叠、也互不包含的圆形。我写了一个检测函数来避免重叠,但它没法100%正常工作——目前圆形绝对不会出现重叠的情况,但有时候会好几个圆共用同一个圆心,这问题真的快把我搞疯了!
尤其是当生成大量圆形,或者生成超大半径(比如1000以上)的圆时,这个问题会特别严重。有意思的是,当圆的半径很大时,窗体确实会自动放大来给这些圆腾出空间,但即便如此,程序还是会选到同一个圆心!比如我让它生成10个半径1000的圆,结果居然有5个圆共用同一个圆心,窗体虽然放大了,但这些圆的位置完全重合,根本不符合需求。
下面是我写的iteration函数代码,麻烦各位帮我看看哪里出问题了,怎么才能避免多个圆出现同一个圆心的情况:
Public Function iteration() As Boolean Dim random_ As New Random Dim v1 As Single Dim v2 As Single Dim v3 As Single For Each circ1 As Circ In Circles For Each circ2 As Circ In Circles If Circles.IndexOf(circ1) <> Circles.IndexOf(circ2) Then Dim val As Single = ((circ2.y - circ1.y) ^ 2 + (circ2.x - circ1.x) ^ 2) ^ 0.5 If circ1.R + circ2.R > val Then While True v1 = (random_.Next(minValue:=300, maxValue:=860)) v2 = (random_.Next(minValue:=300, maxValue:=860)) For Each circ3 As Circ In Circles If circ2.R + circ3.R > ((v2 - circ2.y) ^ 2 + (v1 - circ2.x) ^ 2) ^ 0.5 Then Exit For End If Dim cpos As Integer = Circles.IndexOf(circ2) Circles(cpos) = New Circ(circ2.R, v1, v2) Return False Next End While End If End If Next Next Return True End Function
备注:内容来源于stack exchange,提问作者user23314623
相关产品推荐
相关产品推荐

