首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

怎么用api画圆,并用弦截断,两块涂上不同的颜色

2012-01-26 
如何用api画圆,并用弦截断,两块涂上不同的颜色?就是用vb画出这样的图形?不是在form上面绘图,我是写一个控

如何用api画圆,并用弦截断,两块涂上不同的颜色?


就是用vb画出这样的图形?

不是在form上面绘图,我是写一个控件,也就是在usercontrol上面绘制,怎么办呢?

[解决办法]

VB code
'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

热点排行
Bad Request.