如何用api画圆,并用弦截断,两块涂上不同的颜色?
就是用vb画出这样的图形?
不是在form上面绘图,我是写一个控件,也就是在usercontrol上面绘制,怎么办呢?
[解决办法]
'form中添加一个pictureBox,一个commandButtonPrivate Declare Function ExtFloodFill Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long, ByVal wFillType As Long) As LongPrivate Sub Command1_Click()Dim w As DoubleDim h As DoubleDim a As Double, b As DoubleDim r As DoubleDim t1 As DoubleDim t2 As DoubleDim x1 As Double, y1 As DoubleDim x2 As Double, y2 As Double With Picture1 .AutoRedraw = True .ScaleMode = vbPixels .FillStyle = vbFSSolid w = Picture1.ScaleWidth h = Picture1.ScaleHeight a = w / 2 b = h / 2 r = h / 4 t1 = 0 t2 = 3 * PI / 2 '弦两点的坐标,不知道算法对了没 If t1 > PI Then x1 = a + Cos(t1) * r y1 = b + Sin(t1) * r Else x1 = a + Cos(t1) * r y1 = b - Sin(t1) * r End If If t1 > PI Then x2 = a + Cos(t2) * r y2 = b + Sin(t2) * r Else x2 = a + Cos(t2) * r y2 = b - Sin(t2) * r End If Picture1.Circle (a, b), r, vbBlue, t1, t2 Picture1.Circle (a, b), r, vbRed, t2, t1 Picture1.Line (x1, y1)-(x2, y2), vbRed Dim x3 As Double, y3 As Double '欲填充区域内的一点,我是通过MouseDown事件中随便取一点 '如果有算法能计算出一个属于目标区域的点坐标,那最好了 x3 = 283 y3 = 210 .FillColor = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255)) ExtFloodFill .hdc, x3, y3, .Point(x3, y3), 1 x3 = 244 y3 = 158 .FillColor = RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255)) ExtFloodFill .hdc, x3, y3, .Point(x3, y3), 1 End WithEnd Sub
[解决办法]
上面 If t1 > PI Then
x2 = a + Cos(t2) * r
y2 = b + Sin(t2) * r
Else
x2 = a + Cos(t2) * r
y2 = b - Sin(t2) * r
End If
写错了(好像弦交点坐标也算错了)
if t2 >PI
另:常量定义
Const PI = 3.14