设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1296|回复: 4
打印 上一主题 下一主题

[已经解决] 伸手求2个算法

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
40 小时
注册时间
2011-5-3
帖子
28
跳转到指定楼层
1
发表于 2011-11-23 15:52:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 恋百里 于 2011-11-23 15:52 编辑

给出半径和中心点两个参数填充圆的算法和给出两个圆的中心点和半径判断两圆是否相交,要高效率的。
麻烦各位大大了、自己想了挺久没想出高效率的。想做一个塔防游戏 :'(

Lv1.梦旅人

梦石
0
星屑
50
在线时间
40 小时
注册时间
2011-5-3
帖子
28
2
 楼主| 发表于 2011-11-23 16:00:42 | 只看该作者
主要还是填充圆的算法- -那个把我弄糊涂了 谢谢楼上了
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
40 小时
注册时间
2011-5-3
帖子
28
3
 楼主| 发表于 2011-11-23 16:11:13 | 只看该作者
因为我需要控制Color类来做一些事情- -描点圆就是用bitmap类set_pixel方法来描- -不同状况下攻击范围随颜色改变之类的事情

点评

set_pixel是種悲劇= =  发表于 2011-11-23 17:16
可以缩小一圈改个色调再描绘一层啊,描边不就是两个大小不同的同心圆叠加么  发表于 2011-11-23 16:50
回复

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
4 小时
注册时间
2011-10-16
帖子
81
4
发表于 2011-11-23 16:48:59 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
40 小时
注册时间
2011-5-3
帖子
28
5
 楼主| 发表于 2011-11-23 18:11:09 | 只看该作者
本帖最后由 恋百里 于 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
复制代码

点评

谢谢关心。最后偶还是决定不研究了- -超级懒得 复刻了一个c语言版的- -  发表于 2011-11-23 23:44
你要先说下你现在用的算法,要是撞车俺就不用想了啊.....你什么都不说怎么知道是不是还有更高效的啊......条件不足啊....  发表于 2011-11-23 18:16
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-2 01:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表