Project1

标题: 伸手求2个算法 [打印本页]

作者: 恋百里    时间: 2011-11-23 15:52
标题: 伸手求2个算法
本帖最后由 恋百里 于 2011-11-23 15:52 编辑

给出半径和中心点两个参数填充圆的算法和给出两个圆的中心点和半径判断两圆是否相交,要高效率的。
麻烦各位大大了、自己想了挺久没想出高效率的。想做一个塔防游戏 :'(dsu_plus_rewardpost_czw
作者: 恋百里    时间: 2011-11-23 16:00
主要还是填充圆的算法- -那个把我弄糊涂了 谢谢楼上了
作者: 恋百里    时间: 2011-11-23 16:11
因为我需要控制Color类来做一些事情- -描点圆就是用bitmap类set_pixel方法来描- -不同状况下攻击范围随颜色改变之类的事情
作者: gamedev0001    时间: 2011-11-23 16:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: 恋百里    时间: 2011-11-23 18:11
本帖最后由 恋百里 于 2011-11-23 23:43 编辑

画圆想出了一个。。但是填充圆想了半天


恋百里于2011-11-23 23:42补充以下内容:
v..解决了。。在网上找了个c语言版本的自己移植过来了。。效率baidu说是目前最快的方法了- -贴出来分享下。其实我只是移植。具体怎么算我还是半懂非懂嘛。。毕竟现在提倡解放劳动力嘛。计算机图形学不是我的研究范围,所以就补研究了主要是功能实现了(各位同样的新手勿学我)
  1. class Draw_circle
  2.     def initialize(xc,yc,r,fill,color)
  3.       #xc,yc为圆心
  4.       #fill为是否填充
  5.       #c为颜色值
  6.       @sprite=Sprite.new
  7.       @sprite.bitmap=Bitmap.new(640,480)
  8.       x=0
  9.       y=r
  10.       yi=0
  11.       d=3-2*r
  12.       if(fill)
  13.         #如果填充(画实心圆)
  14.         while(x<=y)
  15.           yi=x
  16.           for yi in yi..y
  17.             draw_circle_8(xc,yc,x,yi,color)
  18.           end
  19.           if(d<0)
  20.             d=d+4*x+6
  21.           else
  22.             d=d+4*(x-y) # 有问题
  23.             y-=1
  24.           end
  25.           x+=1
  26.         end
  27.       else
  28.         #如果不填充(空心圆)
  29.         while (x<=y)
  30.           draw_circle_8(xc,yc,x,y,color)
  31.           if (d<0)
  32.             d=d+4*x+6
  33.           else
  34.             d=d+4*(x-y)
  35.             y-=1
  36.           end
  37.           x+=1
  38.         end
  39.       end
  40.     end
  41.     def draw_circle_8(xc,yc,x,y,color)
  42.       @sprite.bitmap.set_pixel(xc+x, yc+y, color)
  43.       @sprite.bitmap.set_pixel(xc-x, yc+y, color)
  44.       @sprite.bitmap.set_pixel(xc+x, yc-y, color)
  45.       @sprite.bitmap.set_pixel(xc-x, yc-y, color)
  46.       @sprite.bitmap.set_pixel(xc+y, yc+x, color)
  47.       @sprite.bitmap.set_pixel(xc-y, yc+x, color)
  48.       @sprite.bitmap.set_pixel(xc+y, yc-x, color)
  49.       @sprite.bitmap.set_pixel(xc-y, yc-x, color)
  50.     end
  51.   end
  52.   Draw_circle.new(50,50,20,false,Color.new(123,123,123,255))
  53.    Draw_circle.new(100,100,50,true,Color.new(123,123,123,255))
  54.   loop do
  55.   Graphics.update
  56. end
复制代码





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1