易码技术论坛

 找回密码
 加入易码
搜索
查看: 612506|回复: 22

[请教]如何做碰撞判定

[复制链接]
发表于 2006-12-21 21:20:01 | 显示全部楼层
可以预先计算出碰撞点,当坐标超过碰撞点的时候,通过时间和速度计算之后的状态.
 楼主| 发表于 2006-12-21 21:52:58 | 显示全部楼层
呃...回楼上,我觉得我LZ的贴里面表明了这个想法...而这些问题正是基于这个想法产生的...
发表于 2006-12-21 22:06:30 | 显示全部楼层
晤...
LZ是想模拟自由落体然后反弹?
那么这个x', y') = (x, y) + v
似乎就已经有问题了,因为物体做的是加速(减速)运动,除非那个v是平均速度.

如果LZ确实模拟的是匀加速物体的碰撞的话,那完全可以直接写出时间t与位移的P的函数表达式.
就是  P =P(t)        一个周期函数,
用到高中的物理知识就可以解决了.
然后只用到t =0,1,2...那些情况就OK了
发表于 2006-12-21 22:11:12 | 显示全部楼层
也就是说,先考虑实际的模型,得到函数关系.
在程序中用到时再离散化.
 楼主| 发表于 2006-12-21 22:33:48 | 显示全部楼层
呃...我的想法是完全按照物理模型来的。
一个质量为m的物体受到f力作用下,产生加速度a,即有
a = f / m, v = v + a * t, s = s + v * t.
这里的t都单位化了,所以a, v分别直接作为速度和位移的增量。
因为在程序里面f是不确定的,所以不能找到表达式。
发表于 2006-12-21 22:45:10 | 显示全部楼层
让物体一个像素一个像素的移动
 楼主| 发表于 2006-12-21 23:15:07 | 显示全部楼层
回LEE,这个全是逻辑单位,只有光栅化的时候才考虑像素单位。
不过LEE倒是给了一种思路,找一个元单位长度,所有的长度都是其整数倍,然后移动的时候一个元单位一个元单位的移动~

不过这个东西也想过,貌似有点复杂,有时间细想想。
发表于 2006-12-21 23:20:00 | 显示全部楼层
时间刻度过大了,使得碰撞时间发生在两个刻度之间,可减小时间刻度而减少误差
 楼主| 发表于 2006-12-21 23:26:45 | 显示全部楼层
也许该考虑一种不产生此类误差的算法,不过这个要处理就只有离散化,离散化就会有刻度,有刻度就会有误差,有误差就要哭...
发表于 2006-12-21 23:29:46 | 显示全部楼层
只要把误差控制在合理范围就行了
 楼主| 发表于 2006-12-21 23:36:55 | 显示全部楼层
知道反弹之后最高位置摆动的问题了,速度反向处理的问题。其他的问题继续考虑。
发表于 2006-12-30 20:37:51 | 显示全部楼层
记得我以前用BASIC模拟自由落体时,反弹是这样做的
1、计算小球下一次的位置
2、检查该坐标是否过界
3、如果过界就让小球紧靠反弹面,速度反向
    如果没有.....
 楼主| 发表于 2006-12-30 20:51:43 | 显示全部楼层
3、如果过界就让小球紧靠反弹面,速度反向
回楼上,这个的误差会很大吧...
发表于 2006-12-30 21:09:49 | 显示全部楼层
模拟量转换为数字量,误差是不可避免的
 楼主| 发表于 2006-12-30 23:01:41 | 显示全部楼层
不过这样的话,误差累计起来可以引起质变的...
发表于 2006-12-30 23:29:30 | 显示全部楼层
蝴蝶效应
 楼主| 发表于 2006-12-30 23:47:40 | 显示全部楼层
而其实是只巨大的蝴蝶...
发表于 2006-12-30 23:56:27 | 显示全部楼层
用公式算出精确位置然后数字化,这样误差永远不会累积
 楼主| 发表于 2006-12-31 08:46:25 | 显示全部楼层
呃...我的想法是完全按照物理模型来的。
一个质量为m的物体受到f力作用下,产生加速度a,即有
a = f / m, v = v + a * t, s = s + v * t.
这里的t都单位化了,所以a, v分别直接作为速度和位移的增量。
因为在程序里面f是不确定的,所以不能找到表达式。
以上...
发表于 2006-12-31 11:14:13 | 显示全部楼层
用时间&速度的绝对值,不要用增量
用增量就会累积误差
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-19 07:45 , Processed in 0.015407 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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