You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 10:20:30