VB.NET如何在圆形上绘制均匀分布的矩形图案
实现圆形上均匀绘制矩形的VB.NET代码修改
以下是调整后的代码,实现以D1I.Text对应的半径为基准,每隔6度绘制一个固定小矩形,共60次:
Private Sub Panel2_Paint(sender As Object, e As PaintEventArgs) Handles Panel2.Paint Dim g As Graphics = e.Graphics g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias ' 开启抗锯齿,让图形更平滑 Dim centerX, centerY As Integer centerX = Panel2.Width \ 2 centerY = Panel2.Height \ 2 ' 辅助函数:安全将文本转为整数,避免格式错误 Function GetRadius(text As String) As Integer Dim val As Integer If Integer.TryParse(text, val) Then Return val \ 2 End If Return 0 End Function ' 绘制四个基础圆形 Dim radius As Integer radius = GetRadius(D1A.Text) g.DrawEllipse(Pens.Black, centerX - radius, centerY - radius, radius * 2, radius * 2) radius = GetRadius(D1I.Text) g.DrawEllipse(Pens.Black, centerX - radius, centerY - radius, radius * 2, radius * 2) ' 在D1I对应的圆上绘制60个小矩形 Dim rectWidth As Integer = 5 ' 矩形宽度 Dim rectHeight As Integer = 10 ' 矩形高度 For angle As Integer = 0 To 354 Step 6 ' 每隔6度,共60次 ' 将角度转为弧度 Dim radian As Double = angle * Math.PI / 180 ' 计算矩形中心的坐标 Dim rectCenterX As Double = centerX + radius * Math.Cos(radian) Dim rectCenterY As Double = centerY + radius * Math.Sin(radian) ' 计算矩形左上角坐标(让矩形中心落在圆周上) Dim rectX As Integer = CInt(rectCenterX - rectWidth \ 2) Dim rectY As Integer = CInt(rectCenterY - rectHeight \ 2) ' 绘制矩形 g.DrawRectangle(Pens.Red, rectX, rectY, rectWidth, rectHeight) ' 如果需要填充矩形,用下面的代码 ' g.FillRectangle(Brushes.Red, rectX, rectY, rectWidth, rectHeight) Next radius = GetRadius(D2A.Text) g.DrawEllipse(Pens.Black, centerX - radius, centerY - radius, radius * 2, radius * 2) radius = GetRadius(D2I.Text) g.DrawEllipse(Pens.Black, centerX - radius, centerY - radius, radius * 2, radius * 2) End Sub
关键说明:
- 安全文本转整数:新增
GetRadius函数,用Integer.TryParse避免输入非数字文本时程序崩溃。 - 椭圆绘制修正:原代码
DrawEllipse参数有误,最后两个参数是图形的宽和高,因此需要用radius*2才能保证圆形半径正确。 - 圆周坐标计算:通过三角函数
Cos和Sin计算每个角度对应的圆周位置,确保矩形中心精准落在圆上。 - 视觉优化:开启抗锯齿模式,让线条和图形边缘更平滑。
- 参数可调:
rectWidth和rectHeight可根据需求修改,控制小矩形的尺寸。
内容的提问来源于stack exchange,提问作者Agastya Vulugundam
相关产品推荐
相关产品推荐

