| 赞 | 95  | 
 
| VIP | 77 | 
 
| 好人卡 | 113 | 
 
| 积分 | 69 | 
 
| 经验 | 147345 | 
 
| 最后登录 | 2025-2-12 | 
 
| 在线时间 | 7027 小时 | 
 
 
 
 
 
Lv4.逐梦者 (版主) 
	- 梦石
 - 0 
 
        - 星屑
 - 6891 
 
        - 在线时间
 - 7027 小时
 
        - 注册时间
 - 2013-11-2
 
        - 帖子
 - 1344
 
 
   
 
 | 
	
class Bitmap           def draw_ring(x,y,diameter,thickness,color)                 outer_radius = diameter / 2                 inner_radius = outer_radius - thickness + 1                 draw_circle_w_thickness(x,y,inner_radius,outer_radius,color)         end           def xLine(x1,x2,y,color)                 while x1 <= x2                          self.set_pixel(x1,y,color)                         x1 += 1                 end         end           def yLine(x,y1,y2,color)                 while y1 <= y2                          self.set_pixel(x,y1,color)                         y1 += 1                 end         end           def draw_circle_w_thickness(xc,yc,inner,outer,color)                   xo = outer                 xi = inner                 y = 0                 erro = 1 - xo                 erri = 1 - xi                   while(xo >= y)                          xLine(xc + xi, xc + xo, yc + y,  color)                         yLine(xc + y,  yc + xi, yc + xo, color)                         xLine(xc - xo, xc - xi, yc + y,  color)                         yLine(xc - y,  yc + xi, yc + xo, color)                         xLine(xc - xo, xc - xi, yc - y,  color)                         yLine(xc - y,  yc - xo, yc - xi, color)                         xLine(xc + xi, xc + xo, yc - y,  color)                         yLine(xc + y,  yc - xo, yc - xi, color)                                           y += 1                           if erro < 0                                 erro += 2 * y + 1                         else                                  xo -= 1                                 erro += 2 * (y - xo + 1)                         end                           if y > inner                                  xi = y                         else                                  if erri < 0                                         erri += 2 * y + 1                                 else                                         xi -= 1                                         erri += 2 * (y - xi + 1)                                 end                         end                   end                         end   end 
 
 class Bitmap  
   
        def draw_ring(x,y,diameter,thickness,color)  
                outer_radius = diameter / 2  
                inner_radius = outer_radius - thickness + 1  
                draw_circle_w_thickness(x,y,inner_radius,outer_radius,color)  
        end  
   
        def xLine(x1,x2,y,color)  
                while x1 <= x2   
                        self.set_pixel(x1,y,color)  
                        x1 += 1  
                end  
        end  
   
        def yLine(x,y1,y2,color)  
                while y1 <= y2   
                        self.set_pixel(x,y1,color)  
                        y1 += 1  
                end  
        end  
   
        def draw_circle_w_thickness(xc,yc,inner,outer,color)  
   
                xo = outer  
                xi = inner  
                y = 0  
                erro = 1 - xo  
                erri = 1 - xi  
   
                while(xo >= y)   
                        xLine(xc + xi, xc + xo, yc + y,  color)  
                        yLine(xc + y,  yc + xi, yc + xo, color)  
                        xLine(xc - xo, xc - xi, yc + y,  color)  
                        yLine(xc - y,  yc + xi, yc + xo, color)  
                        xLine(xc - xo, xc - xi, yc - y,  color)  
                        yLine(xc - y,  yc - xo, yc - xi, color)  
                        xLine(xc + xi, xc + xo, yc - y,  color)  
                        yLine(xc + y,  yc - xo, yc - xi, color)                  
   
                        y += 1  
   
                        if erro < 0  
                                erro += 2 * y + 1  
                        else   
                                xo -= 1  
                                erro += 2 * (y - xo + 1)  
                        end  
   
                        if y > inner   
                                xi = y  
                        else   
                                if erri < 0  
                                        erri += 2 * y + 1  
                                else  
                                        xi -= 1  
                                        erri += 2 * (y - xi + 1)  
                                end  
                        end  
   
                end                  
        end  
   
end  
 
  
 
draw_ring(绘制环)的参数:X位置,Y位置,直径,粗度,颜色 
draw_circle_w_thickness(绘制空心圆)的参数:X位置,Y位置,内圈半径,外圈半径,颜色 
 
效率不保证,毕竟2年前的玩意儿。记得是从C++移植到Ruby的吧。C++码来源:https://stackoverflow.com/questi ... s-drawing-algorithm |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |