双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

这个CADVBA一直跳出溢出报错,请大佬帮忙看下问题出在哪儿

2401_84398080 2401_84398080 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

Sub DrawCirclesOnBoundary()
    Dim boundary As AcadLWPolyline
    Dim vertices() As Double
    Dim minX As Double, maxX As Double
    Dim minY As Double, maxY As Double
    Dim i As Integer, j As Integer
    Dim gridSize As Double
    Dim radius As Double
    Dim centerX As Double, centerY As Double
    Dim centerPoint(0 To 2) As Double
    Dim numCellsX As Integer, numCellsY As Integer
    Dim adjustedGridSizeX As Double, adjustedGridSizeY As Double
    
    ' 设置网格大小和圆的半径
    gridSize = 24
    radius = 2
    
    ' 获取用户选择的多段线作为边界
    On Error Resume Next
    ThisDrawing.Utility.GetEntity boundary, Nothing, "请选择一条多段线作为边界: "
    On Error GoTo 0
    
    If boundary Is Nothing Then
        MsgBox "未选择多段线!"
        Exit Sub
    End If
    
    ' 提取多段线的顶点
    vertices = boundary.Coordinates
    
    ' 计算边界的最小包围矩形
    minX = vertices(0)
    maxX = vertices(0)
    minY = vertices(1)
    maxY = vertices(1)
    
    For i = 0 To UBound(vertices) Step 2
        If vertices(i) < minX Then minX = vertices(i)
        If vertices(i) > maxX Then maxX = vertices(i)
        If vertices(i + 1) < minY Then minY = vertices(i + 1)
        If vertices(i + 1) > maxY Then maxY = vertices(i + 1)
    Next i
    
    ' 计算网格数量
    numCellsX = Int((maxX - minX) / gridSize)
    numCellsY = Int((maxY - minY) / gridSize)
    
    ' 如果网格数量为0,则调整为1
    If numCellsX = 0 Then numCellsX = 1
    If numCellsY = 0 Then numCellsY = 1
    
    ' 调整网格大小,确保小于或等于24米,并且平均分布
    adjustedGridSizeX = (maxX - minX) / numCellsX
    adjustedGridSizeY = (maxY - minY) / numCellsY
    
    ' 确保网格大小不超过24米
    If adjustedGridSizeX > gridSize Then
        numCellsX = numCellsX + 1
        adjustedGridSizeX = (maxX - minX) / numCellsX
    End If
    If adjustedGridSizeY > gridSize Then
        numCellsY = numCellsY + 1
        adjustedGridSizeY = (maxY - minY) / numCellsY
    End If
    
    ' 在网格点上绘制圆圈(在多边形内或边界上)
    For i = 0 To numCellsX
        For j = 0 To numCellsY
            centerX = minX + i * adjustedGridSizeX
            centerY = minY + j * adjustedGridSizeY
            
            ' 检查点是否在边界内或边界上
            If IsPointInPolygon(centerX, centerY, vertices) Or IsPointOnPolygonBoundary(centerX, centerY, vertices) Then
                ' 设置圆心坐标
                centerPoint(0) = centerX
                centerPoint(1) = centerY
                centerPoint(2) = 0 ' Z 坐标设为 0
                
                ' 画圆
                ThisDrawing.ModelSpace.AddCircle centerPoint, radius
            End If
        Next j
    Next i
    
    ' 在多段线的角点上绘制圆圈
    For i = 0 To UBound(vertices) Step 2
        centerPoint(0) = vertices(i)
        centerPoint(1) = vertices(i + 1)
        centerPoint(2) = 0 ' Z 坐标设为 0
        ThisDrawing.ModelSpace.AddCircle centerPoint, radius
    Next i
    
    MsgBox "圆已绘制完成!"
End Sub

' 判断点是否在多边形内
Function IsPointInPolygon(x As Double, y As Double, vertices() As Double) As Boolean
    Dim i As Integer, j As Integer
    Dim n As Integer
    Dim inside As Boolean
    inside = False
    
    ' 计算多边形的顶点数量
    n = (UBound(vertices) + 1) / 2 ' 每个顶点有 X 和 Y 两个值
    
    For i = 0 To n - 1
        j = (i + 1) Mod n
        
        ' 获取当前边两个顶点的坐标
        Dim x1 As Double, y1 As Double
        Dim x2 As Double, y2 As Double
        x1 = vertices(i * 2)
        y1 = vertices(i * 2 + 1)
        x2 = vertices(j * 2)
        y2 = vertices(j * 2 + 1)
        
        ' 检查点是否在两个顶点之间
        If ((y1 > y) <> (y2 > y)) Then
            ' 计算交点
            Dim intersect As Double
            intersect = (x2 - x1) * (y - y1) / (y2 - y1) + x1
            
            ' 如果交点在点的右侧,则切换 inside 状态
            If x < intersect Then
                inside = Not inside
            End If
        End If
    Next i
    
    IsPointInPolygon = inside
End Function

' 判断点是否在多边形边界上
Function IsPointOnPolygonBoundary(x As Double, y As Double, vertices() As Double) As Boolean
    Dim i As Integer, j As Integer
    Dim n As Integer
    Dim onBoundary As Boolean
    onBoundary = False
    
    ' 计算多边形的顶点数量
    n = (UBound(vertices) + 1) / 2 ' 每个顶点有 X 和 Y 两个值
    
    For i = 0 To n - 1
        j = (i + 1) Mod n
        
        ' 获取当前边两个顶点的坐标
        Dim x1 As Double, y1 As Double
        Dim x2 As Double, y2 As Double
        x1 = vertices(i * 2)
        y1 = vertices(i * 2 + 1)
        x2 = vertices(j * 2)
        y2 = vertices(j * 2 + 1)
        
        ' 检查点是否在边界上
        If IsPointOnLine(x, y, x1, y1, x2, y2) Then
            onBoundary = True
            Exit For
        End If
    Next i
    
    IsPointOnPolygonBoundary = onBoundary
End Function

' 判断点是否在直线上
Function IsPointOnLine(x As Double, y As Double, x1 As Double, y1 As Double, x2 As Double, y2 As Double) As Boolean
    Dim tolerance As Double
    tolerance = 0.0001 ' 容差值
    
    ' 计算点到直线的距离
    Dim distance As Double
    distance = Abs((y2 - y1) * x - (x2 - x1) * y + x2 * y1 - y2 * x1) / Sqr((y2 - y1) ^ 2 + (x2 - x1) ^ 2)
    
    ' 如果距离小于容差值,则认为点在直线上
    If distance < tolerance Then
        IsPointOnLine = True
    Else
        IsPointOnLine = False
    End If
End Function

 

 

这个CADVBA一直跳出溢出报错,请大佬帮忙看下问题出在哪儿

...全文

相关推荐

科技中介服务机构想要提升服务效率,需要哪些数智工具支持?.docx

科技中介服务机构想要提升服务效率,需要哪些数智工具支持?

BIZKEEN

usb 扩容盘检测修复工具源码,编译产物

usb 扩容盘检测修复工具源码,编译产物

nLif

融合UWB和IMU割草机定位EKF研究(Matlab代码实现)

内容概要:本文主要介绍了一个名为“Plecs全桥LLC谐振变换器仿真模型”的技术资源,该资源聚焦于电力电子领域中的LLC谐振变换器建模与仿真,涵盖开环、闭环控制、软启动设计及参数优化等核心内容。文档不仅提供了LLC变换器的详细建模方法与仿真案例,还系统梳理了其在高效电源转换系统中的应用,包括隔离型全桥拓扑结构的设计与性能分析。此外,资源汇总了大量Matlab/Simulink仿真模型及相关科研方向,涉及新能源并网、储能控制、电机驱动等多个前沿领域,全面展示LLC谐振变换器在现代电力系统中的关键技术实现路径。同时,文档附带多种学习资料获取途径,如网盘链接和公众号资源,便于研究人员深入实践与拓展研究。; 适合人群:具备扎实的电力电子、自动控制理论基础,从事新能源发电、开关电源设计、电力系统仿真等相关领域的研究生、工程师及科研人员。; 使用场景及目标:①深入理解LLC谐振变换器的工作原理、建模方法与控制策略;②开展电力电子变换器的仿真验证与参数优化设计;③支撑科研项目、学位论文或工程项目的系统仿真与方案验证; 阅读建议:建议结合所提供的仿真模型与参考文献,使用Plecs或Simulink软件进行动手实践,重点掌握LLC谐振变换器的建模流程、闭环控制设计、软启动机制及参数调试技巧,以全面提升在实际工程中的应用与创新能力。

荔枝科研社

基于变频控制的多相交错LLC谐振变换器闭环仿真(Simulink仿真实现)

基于变频控制的多相交错LLC谐振变换器闭环仿真(Simulink仿真实现)内容概要:本文主要介绍了基于Plecs的全桥LLC谐振变换器仿真模型,涵盖变频控制下的多相交错LLC谐振变换器闭环仿真、V2G电动汽车ACDC整流与双向CLLC谐振变换器充放电仿真、LLC谐振变换器的开环与闭环软启动设计,以及储能系统中双向Buck-Boost变换器结合模型预测电流控制和电压下垂控制的仿真研究。同时,文档列举了多种电力电子系统与控制策略的Simulink/Plecs仿真案例,涉及三相交错并联Buck变换器、三电平Buck直流变换器、单相Boost PFC电路等,展示了丰富的电力变换器建模与控制技术。此外,还包括参数设计报告、计算书及相关参考文献,适用于从事电力电子、新能源发电、电动汽车充放电系统等领域的研究人员和技术开发人员。; 适合人群:具备电力电子、自动控制理论基础,从事新能源、电动汽车、电力系统等相关领域研究的研发人员、高校研究生及高年级本科生。; 使用场景及目标:① 学习和掌握LLC谐振变换器及其他典型电力电子变换器的工作原理与建模方法;② 实现闭环控制策略如变频控制、软启动、模型预测控制、下垂控制等的仿真验证;③ 支持科研项目、毕业设计或工程开发中的系统仿真与优化设计。; 阅读建议:建议结合文中提供的仿真模型、设计报告与参考文献,逐步搭建并调试相应系统,重点关注控制策略的实现细节与参数整定过程,以深入理解系统动态响应特性与控制性能。

程序猿鑫

基于Java17、SpringBoot、vue3、antdv-next、uniapp等主流技术构建的全场景极速开发平台 MDP内置3个web端、1个移动端 重点解决用户中心、开发者平台、管理后台3个应

MDP-主数据平台,后端项目。专注于单点登录解决方案。内置用户中心、开发者平台、管理后台3个应用。包含:单点登录、Oauth2 登录、用户身份管理、应用申请、应用接入、主数据维护、主数据订阅、主数据广播、应用接口调用、接口管理管理和查看、系统配置等功能。

Java程序员-张凯
评论 2
收藏 已收藏
分享
返回顶部
2401_84398080
VBA 2,506 成员 10,830 内容