Public Class Form1
Private Const Pi As Single = 3.1415926
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDrawing.Click
'Debug.Print("tttt")
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
With PicShow
'.Top = 10
'.Left = 10
'.Width = 300
'.Height = 300
.Dock = DockStyle.Fill
End With
Me.Controls.Add(PicShow)
End Sub
Private Sub Mypaint(ByVal e As PaintEventArgs)
Dim MyCircle As Graphics = e.Graphics
Dim Myline As Graphics = e.Graphics
Dim MyPen As New Pen(Color.Black)
Dim myRect As New Rectangle(50, 50, 200, 200)
'MyCircle.DrawEllipse(MyPen, myRect) '边框,被覆盖
Myline.DrawLine(MyPen, 50, 150, 150, 150)
'划分区间
Dim sRectPer(2) As Single, x1(2) As Single, y1(2) As Single '定义的数组数为区间数-1
sRectPer(0) = Radian("30", "30", "30", "40")
x1(0) = 150 - Math.Cos(sRectPer(0)) * 100 '半径为100
y1(0) = 150 - Math.Sin(sRectPer(0)) * 100
Myline.DrawLine(MyPen, x1(0), y1(0), 150, 150)
sRectPer(1) = Radian("60", "30", "30", "40") 'srectPer(n)的radian函数的第一个参数为前n+1个参数的和
x1(1) = 150 - Math.Cos(sRectPer(1)) * 100
y1(1) = 150 - Math.Sin(sRectPer(1)) * 100
Myline.DrawLine(MyPen, x1(1), y1(1), 150, 150)
'填充区间
Dim x2(3) As Single, y2(3) As Single '数组大小等于区间数
For i As Double = 0 To sRectPer(0) Step 0.0001
x2(0) = 150 - Math.Cos(i) * 100
y2(0) = 150 - Math.Sin(i) * 100
Myline.DrawLine(Pens.Magenta, x2(0), y2(0), 150, 150)
Next
For j As Double = sRectPer(0) To sRectPer(1) Step 0.0001
x2(1) = 150 - Math.Cos(j) * 100
y2(1) = 150 - Math.Sin(j) * 100
Myline.DrawLine(Pens.SeaGreen, x2(1), y2(1), 150, 150)
Next
Dim newline As Graphics = e.Graphics
For k As Double = sRectPer(1) To Pi * 2 Step 0.0001
x2(2) = 150 - Math.Cos(k) * 100
y2(2) = 150 - Math.Sin(k) * 100
newline.DrawLine(Pens.Orange, x2(2), y2(2), 150, 150)
Next
'Dim a As Single = percentage("30", "30", "30", "40")
'Debug.Print(a.ToString)
'标示区间
With lblrectA
.Top = (150 + y1(0)) * 0.5
.Left = (50 + x1(0)) * 0.3
.Text = "组分A比例:" & percentage("30", "30", "30", "40")
.BackColor = Color.Magenta
.ForeColor = Color.White
End With
With lblrectB
.Top = (y1(0) + y1(1)) * 0.5
.Left = (x1(0) + x1(1)) * 0.4
.Text = "组分B比例:" & percentage("30", "30", "30", "40")
.BackColor = Color.SeaGreen
.ForeColor = Color.White
End With
With lblrectC
.Top = (150 + y1(1)) * 0.5
.Left = (50 + x1(1)) * 0.3
.Text = "组分C比例:" & percentage("40", "30", "30", "40")
.BackColor = Color.Orange
.ForeColor = Color.White
End With
MyPen.Dispose()
End Sub
Private Sub PicShow_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PicShow.Paint
Mypaint(e)
End Sub
Private Function percentage(ByVal rect As Integer, ByVal ParamArray rectall() As Integer) As Single
Dim sum As Int64
For i As Integer = 0 To UBound(rectall, 1)
sum += rectall(i)
Next
percentage = rect / sum
End Function
Private Function Radian(ByVal rect As Integer, ByVal ParamArray rectall() As Integer) As Double
radian = percentage(rect, rectall) * Pi * 2
End Function
End Class