社区
数据结构与算法
帖子详情
★算法高手们:粒子碰撞检测
mngzilin
2010-07-23 08:12:11
问题:
http://topic.csdn.net/u/20100723/19/47b03f81-c82c-48f6-8868-a729fe0ac5a7.html
只要方法可行,分数都归你!~~
谢谢
...全文
399
17
打赏
收藏
★算法高手们:粒子碰撞检测
问题: http://topic.csdn.net/u/20100723/19/47b03f81-c82c-48f6-8868-a729fe0ac5a7.html 只要方法可行,分数都归你!~~ 谢谢
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mngzilin
2010-07-25
打赏
举报
回复
[Quote=引用 12 楼 mngzilin 的回复:]
引用 11 楼 zmshy2128 的回复:
已经很优化了,建议好好读我的那段文字
for (k = 1:5000) //循环每个粒子
进行更新粒子k的坐标x、y
在大数组中,以坐标(x,y)为中心,检测半径r内的所有点的值,如果存在点的值不为0(假设有值为k2的点),则该点与其他点相撞(与第k2个粒子相撞),处理方法LZ自己解决;否则半径r内的所有点的值全部 设为值k。
end
……
[/Quote]
这个不如划分网格效率高,但是划分网格我还没有解决粒子大小不一问题
mngzilin
2010-07-25
打赏
举报
回复
[Quote=引用 13 楼 ljia0 的回复:]
可以换个思路,不要取中心点,可以检测边界点,当某点属于两粒子以上就说明他碰撞(前提是粒子碰撞不变形)。
[/Quote]
主要是检测“某点属于两粒子”需要遍历其5000个点
ljia0
2010-07-24
打赏
举报
回复
可以换个思路,不要取中心点,可以检测边界点,当某点属于两粒子以上就说明他碰撞(前提是粒子碰撞不变形)。
mngzilin
2010-07-24
打赏
举报
回复
哎,要是能在不降低精度前提下,减少运算次数最好了。否则每一帧都要检测
5000x5000
次,这太庞大了。
Arucart
2010-07-24
打赏
举报
回复
6楼的意思是说整个平面分成一个个微元
然后每个球也相对于圆心表示成一系列微元的集合
然后每一帧对每一个球检查是否有微元被重复覆盖..
是个O(n)的算法,不过这个占用空间也太大了吧.....
mngzilin
2010-07-23
打赏
举报
回复
[Quote=引用 11 楼 zmshy2128 的回复:]
已经很优化了,建议好好读我的那段文字
for (k = 1:5000) //循环每个粒子
进行更新粒子k的坐标x、y
在大数组中,以坐标(x,y)为中心,检测半径r内的所有点的值,如果存在点的值不为0(假设有值为k2的点),则该点与其他点相撞(与第k2个粒子相撞),处理方法LZ自己解决;否则半径r内的所有点的值全部 设为值k。
end
而且可以解决不同尺寸粒子的问题
[/Quote]
你的办法我再缕一缕,测试下
zmshy2128
2010-07-23
打赏
举报
回复
已经很优化了,建议好好读我的那段文字
for (k = 1:5000) //循环每个粒子
进行更新粒子k的坐标x、y
在大数组中,以坐标(x,y)为中心,检测半径r内的所有点的值,如果存在点的值不为0(假设有值为k2的点),则该点与其他点相撞(与第k2个粒子相撞),处理方法LZ自己解决;否则半径r内的所有点的值全部 设为值k。
end
而且可以解决不同尺寸粒子的问题
mngzilin
2010-07-23
打赏
举报
回复
回复6楼:
这个算法仍然有问题,当你判断半径为r的圆形区域有无粒子时候要遍历5000个点才能知道。这样同样复杂。耗时。
和划分网格也不一样
mngzilin
2010-07-23
打赏
举报
回复
[Quote=引用 6 楼 zmshy2128 的回复:]
分给我吧,我知道怎么做
思想
1、将水平平面 数字化,用一个大数组表示(每个点的精度自己去估计)。
每个圆形粒子的面积也数字化表示,每个固定时刻在 大数组中 只占用一定数目的点(圆形分布)。
2、定义表示粒子的类,需要中心坐标 x、y、和半径r表示,不同的半径r,对应不同的圆形分布点数(这是个固定值,预先求好)。定义5000个粒子变量,并初始化
3、设置定时器,在每个周期内,需要……
[/Quote]
谢谢这位朋友,
你的方法类似于划分网格,也就是我所提到的算法四。这样次数确实少了很多。但是5000个点的位置的标记过程可否优化?期待.....
winton_adlsy
2010-07-23
打赏
举报
回复
mark
GResume
2010-07-23
打赏
举报
回复
楼上的我怎么没看懂 悲剧
zmshy2128
2010-07-23
打赏
举报
回复
分给我吧,我知道怎么做
思想
1、将水平平面 数字化,用一个大数组表示(每个点的精度自己去估计)。
每个圆形粒子的面积也数字化表示,每个固定时刻在 大数组中 只占用一定数目的点(圆形分布)。
2、定义表示粒子的类,需要中心坐标 x、y、和半径r表示,不同的半径r,对应不同的圆形分布点数(这是个固定值,预先求好)。定义5000个粒子变量,并初始化
3、设置定时器,在每个周期内,需要定义一个大数组(表示整个水平平面),并全部初始化为0
for (k = 1:5000) //循环每个粒子
进行更新粒子k的坐标x、y
在大数组中,以坐标(x,y)为中心,检测半径r内的所有点的值,如果存在点的值不为0(假设有值为k2的点),则该点与其他点相撞(与第k2个粒子相撞),处理方法LZ自己解决;否则半径r内的所有点的值全部 设为值k。
end
注意,该方法不是两两检测粒子间的距离,典型的以空间换时间的技巧 O(∩_∩)O
mngzilin
2010-07-23
打赏
举报
回复
满三天结贴
renjianxin520
2010-07-23
打赏
举报
回复
mark
ayw215
2010-07-23
打赏
举报
回复
围观。。
mngzilin
2010-07-23
打赏
举报
回复
期待
healer_kx
2010-07-23
打赏
举报
回复
mark~~~
类塔防游戏(iPhone源代码)
来源:Licence:Unspecified平台:iOS设备:iPhone作者:charmoon 模仿游戏Atomic Creep Spawner所制作的,类似于PSP上的勇者别嚣张游戏。环境xcode4.5,cocos2d-iphone-2.0。地图使用tiled map制作,有涉及到A*
算法
,简单的
碰撞检测
,
粒子
系统等,游戏只有2关。 作者说:游戏数值设定较差,美工一塌糊涂。一边学习一边制作,大量自己的中文注释,新手多少可以借鉴一下,
高手
勿喷。在这最难就业年里把毕设共享一下就为了找份工作。在下邮箱vstarmoon#(将#替换为@)。 小编注:感谢作者@charmoo
国际程序大赛优秀作品
大牛们的程序,相当的XX,虽然小,但是实现效果实在震撼,不用太多解说,世界顶级水平!另外,附上其中一个源代码与代码解说!
Tricks.of.the.3D.Game.Programming.Gurus-Advanced.3D.Graphics.and.Rasterization.pdf
Tricks.of.the.3D.Game.Programming.Gurus-Advanced.3D.Graphics.and.Rasterization.pdf
算法
之冒泡排序:最直观的排序哲学与优化智慧
冒泡排序教会我们: 耐心观察:通过多轮遍历逐步解决问题 简单力量:最基础的
算法
也能蕴含深刻思想 优化智慧:提前终止机制体现效率意识 当你能在面试白板上5分钟写出优化版冒泡排序时,说明掌握了
算法
工程师的基本功——在简单中见真章。记住:
算法
优化的本质是在理解问题特征后做针对性改进,就像这个优化版本通过检测交换状态提前终止不必要的遍历。
编程书单
觉得前面写的不错,转载而已,估计不会全部都读,甚至只会读其中的一两本,留着也罢。一、书籍:
算法
与数据结构:《数据结构(C语言版)》--严蔚敏、吴伟民 清华出版社我觉得其配套习题集甚至比原书更有价值,每个较难的题都值得做一下。《Introduction to Algorithms》第二版 中文名《
算法
导论》关 于
算法
的标准学习教材与工程参考手册,在去年CSDN网站上其翻译版竟然评为年度二十大技术畅销
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章