win32下写的小球碰撞算法,但似乎会因为系统计时器的延迟造成有时候失灵?

weize_chen weize_chen 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
				double lenX = ball1->x + ball1->vx - ball2->x - ball2->vx;					//计算下一时刻两小球位置,判断是否相撞
double lenY = ball1->y + ball1->vy - ball2->y - ball2->vy;
double dirX = ball1->x - ball2->x; //用于计算球1与球2位置的向量
double dirY = ball1->y - ball2->y;
double std_len = pow(dirX, 2) + pow(dirY, 2);
double monster_len = pow(lenX, 2) + pow(lenY, 2);
if(monster_len <= pow(MONSTER_SIZE_X, 2))
{
double cos = dirX / sqrt(std_len); //向量长度标准化
double sin = dirY / sqrt(std_len); // 接触面法向量n(cos,sin), 切向向量t(sin, -cos)
double v1t = ball1->vx * sin - ball1->vy * cos;
double v2t = ball2->vx * sin - ball2->vy * cos;
double v1n = ball1->vx * cos + ball1->vy * sin;
double v2n = ball2->vx * cos + ball2->vy * sin;
while(abs(v1n - v2n) <= 1) //希望能防止由于碰撞后速度小于1,造成(int)后速度变为0,不发生碰撞
{
v1n *= 1.1;
}

ball1->vx = v1t * sin + v2n * cos;
ball2->vx = v2t * sin + v1n * cos;
ball1->vy = v1t * -1 * cos + v2n * sin;
ball2->vy = v2t * -1 * cos + v1n * sin;


前面还有一个循环,因为有好几个小球,ball1和ball2指其中某两个。循环检测所有的小球。
算法中涉及的弹性碰撞方程我验算过了应该没错
但是有时候碰撞后能弹开,有时候碰撞后会粘连,一起朝某一方向移动,或者干脆就重叠,甚至有可能互相绕着对方转,一起飞到其他地方
猜想是计时器延迟,造成monster_len<=pow(MONSTER_SIZE_X, 2)条件在刚成立时没能及时反应,造成之后每一次循环条件都成立,于是代码不断执行,法向速度不断交换,最终无法实现碰撞弹开的效果
缩短计时器时间没有明显作用
有什么办法解决?
...全文

相关推荐

文件夹文件清单一键导出Excel工具

这是一款文件夹文件清单一键导出 Excel 工具,选一个文件夹点一下,整棵目录树就列成一张 Excel 表。自带中文图形界面,双击启动.bat 即用。交付物包含主程序脚本、启动批处理、README 说明文档(md、html、pdf 三种版本)、示例目录和界面截图,解压即用。 功能上覆盖目录盘点的完整流程:选一个文件夹递归扫描所有子目录,文件按相对路径列进 Excel;每行带相对路径、文件名、类型、大小、创建时间和修改时间六项信息;末尾自动合计文件总数和总大小;可按扩展名过滤只保留指定类型的文件,可限制递归深度只扫顶层或指定层数。 几个实用细节:只读文件元数据不动你的原始文件,输出进独立目录同名自动加序号不覆盖;自动跳过隐藏文件和常见缓存目录如 git、node_modules;按钮运行时变灰防重复点击;同时保留命令行模式,脚本党也能直接用。 适合做交接盘点、资料报审、目录整理的行政、IT 和办公族,不用写代码。使用时双击启动.bat,选好要盘点的文件夹,按需填扩展名过滤和递归深度,点导出 Excel 清单,几秒钟后结果就在旁边的输出文件夹里,打开就能直接使用查看。第一次用建议先拿自带的示例目录跑一遍熟悉流程,再扫自己的正式文件夹。

小鹿( ﹡ˆoˆ﹡ )

政府科技管理者在推动科技成果转化时,如何解决技术供需匹配低效的问题?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

科技中介服务机构如何提升技术需求挖掘与服务推荐能力?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

Python3 json序列化常见报错

json只能序列化字符串、数字、列表、字典、布尔、空值。无法序列化datetime、bytes、自定义类对象,直接dumps会抛出类型错误。解决方案:自定义序列化函数,通过default参数传入,手动转换特殊对象。中文乱码:默认ensure_ascii=True会转义中文,改为False直接输出原生中文。反序列化loads注意:json字符串要求双引号,Python字典单引号字符串无法解析,需要提前替换引号。 bfqcjn.com bg-wifi.cn bjqhjy.com bjqhfs.com bddongao.cn

2601_97326364

科技成果转化项目进场交易前,评估备案环节需要准备哪些材料?_1.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN
评论 1
收藏 已收藏
分享
返回顶部
weize_chen
VC/MFC 16,550 成员 421,606 内容