| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4605 人关注过本帖
标题:VB中给圆填充颜色的算法怎么写
只看楼主 加入收藏
落日幻影
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2013-10-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:14 
VB中给圆填充颜色的算法怎么写
这是我画的一个圆  
   Dim a As Single
   Dim b As Single

Private Sub picdraw_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
   a = X
   b = Y
End Sub

Private Sub picdraw_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 1 Then
    Picdraw.Cls
    Picdraw.Circle ((a + X) / 2, (b + Y) / 2), (((a - X) ^ 2 + (b - Y) ^ 2) ^ 0.5) / 2, RGB(0, 0, 0)
    End If
  
End Sub
2013-10-23 11:45
Artless
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:4211
专家分:28888
注 册:2009-4-8
收藏
得分:0 
picdraw.FillStyle = 0

无知
2013-10-23 12:01
落日幻影
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2013-10-10
收藏
得分:0 
回复 2楼 Artless
不是这样的,是要通过在画好的这个圆内画无数条给定颜色的直径,最终填满这个圆
2013-10-23 12:05
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
收藏
得分:0 
你确定那效率爆表的程序你也会使用么?
2013-10-23 13:34
落日幻影
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2013-10-10
收藏
得分:0 
回复 4楼 bczgvip
我没有办法呀,大哥,师傅叫我这样写的,主要是为了教学,能提点一下小弟吗
2013-10-23 13:46
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:0 
Dim a As Single
Dim b As Single
Dim r As Single    '增加一个半径暂存变量
Private Sub picdraw_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  a = X
  b = Y
End Sub

Private Sub picdraw_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  Dim i As Single
  If Button = 1 Then
    picdraw.Cls
    r = Sqr((X - a) ^ 2 + (Y - b) ^ 2)    '计算半径
    picdraw.Circle (a, b), r, vbBlack
  End If
End Sub

Private Sub picdraw_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  '用红色填充圆
  Dim x1 As Single, x2 As Single, y1 As Single, y2 As Single, i As Single
  r = r - 15
  For i = 0 To 180 Step 15 / r
    x1 = a + r * Cos(i * 3.1415926 / 180)
    y1 = b + r * Sin(i * 3.1415926 / 180)
    x2 = a - r * Cos(i * 3.1415926 / 180)
    y2 = b - r * Sin(i * 3.1415926 / 180)
    picdraw.Line (x1, y1)-(x2, y2), vbRed
  Next
End Sub


[ 本帖最后由 lowxiong 于 2013-10-23 15:11 编辑 ]
2013-10-23 15:09
落日幻影
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2013-10-10
收藏
得分:0 
回复 6楼 lowxiong
感谢前辈,但是这样有一个问题就是,圆画好后,触发mouseUp事件会重复的做画线动作

[ 本帖最后由 落日幻影 于 2013-10-23 16:25 编辑 ]
2013-10-23 15:45
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
那你再做一个标记变量,
MouseMove 事件里,IF 里设置 这个变量为真。
然后 在
MouseUp 事件中,这个变量为真是,填充一个,然后设为假。
如果是假,不动作。

就不会有你说的,单击鼠标,不移动也会画一个圆 的情况。

lowxiong兄的代码是 画了第一个圆后,再单击鼠标是依次缩小画圆。

授人于鱼,不如授人于渔
早已停用QQ了
2013-10-23 16:43
落日幻影
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2013-10-10
收藏
得分:0 
回复 8楼 风吹过b
mousedown,跟mousemove是我自己写的,后面的mouseup是lowxiong前辈帮我补的。前辈能不能就是说:在画好圆之后,在这个圆内点一下,然后由这个点发散画线到颜色与线的颜色不一样的圆周位置,也是找两个点的坐标,我实在不知道怎么来写

[ 本帖最后由 落日幻影 于 2013-10-23 17:03 编辑 ]
2013-10-23 16:56
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:20 
需要使用函数嵌套完成你的要求,但vb堆栈空间比较小,嵌套不到6000次后会溢出,因此运行下面代码你要画个半径比较小的圆可完成你的要求,半径一大就溢出出错了。

Const vec = "-1,0,1,0,0,-1,0,1"
Dim a As Single
Dim b As Single
Dim r As Single         '增加一个半径暂存变量
Dim f As Boolean        '增加一个状态变量,false:画圆 true:填充
Dim d(3, 1) As Integer  '步进矢量,从常量vec中获取,用于判断指点周围颜色,共4个方向,即左右上下

Private Sub fillPic(X As Single, Y As Single, C As Long, FC As Long)
  '填充图形,这是一个函数嵌套调用
  Dim i As Integer, x1 As Single, y1 As Single
  If picdraw.Point(X, Y) = C Then
    picdraw.PSet (X, Y), FC
    For i = 0 To 3
      x1 = X + d(i, 0) * 15
      y1 = Y + d(i, 1) * 15
      fillPic x1, y1, C, FC
    Next
  End If
End Sub

Private Sub picdraw_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  Dim C1 As Long, C2 As Long, r1 As Single, q() As String, i As Integer
  If Button = 1 Then
    If Not f Then
      '处于画圆状态,记下圆心坐标
      a = X
      b = Y
    Else
      '处于填充状态
      r1 = Sqr((X - a) ^ 2 + (Y - b) ^ 2)     '计算到圆心的距离
      If r1 > r - 15 Then Exit Sub            '如果填充点击的点位置超过圆半径则不执行填充操作
      C1 = picdraw.Point(X, Y)                '取鼠标点击位置的颜色
      C2 = C1 Xor &HFFFFFF
      q = Split(vec, ",")
      For i = 0 To 3
        '获取4个方向步进矢量
        d(i, 0) = Val(q(i * 2))
        d(i, 1) = Val(q(i * 2 + 1))
      Next
      fillPic X, Y, C1, vbRed
    End If
  End If
End Sub

Private Sub picdraw_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  Dim i As Single
  If Button = 1 Then
    If Not f Then
      '处于画圆状态
      picdraw.Cls
      r = Sqr((X - a) ^ 2 + (Y - b) ^ 2)    '计算半径
      picdraw.Circle (a, b), r, vbBlack
    End If
  End If
End Sub

Private Sub picdraw_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If Button = 1 Then f = Not f
End Sub
2013-10-23 20:37
快速回复:VB中给圆填充颜色的算法怎么写
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041862 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved