我玩JTS拓扑套件看起来相当不错。 但是,我无法解决两个Geometry实例之间的冲突。我想在几何A和B之间执行一个墙滑动(见下面的截图)。
我尝试实施此评论中发布的解决方案(解决方案2): https://gamedev.stackexchange.com/questions/104099/how-to-go-about-an-intermediate-collision-resolution-system/104105#104105
然而,我无法计算光线投射,甚至无法计算A碰撞的B边界向量的法线。
有人会给我一个如何使用JTS实现墙滑动的起点吗?
编辑:Geometry类提供的方法可以帮助我“交叉”和“交叉”。如果参数几何图形与此几何图形相互作用,则“intersects”将返回true。 “intersection”返回一个Geometry,表示两个Geometries共有的点集。也许我可以用“十字路口”找到第一个碰撞点。
有人用JTS做过这个吗?也许该套件已经提供了执行此任务的算法。
提前致谢
答案 0 :(得分:1)
光线投射意味着您定义起点和方向,并以无限长度矢量(光线)计算。然后计算光线撞击物体的位置。
在您的情况下,光线方向将是您的运动矢量,起点将取决于几何体/边界形状的形状。如果是边界框,您可以从每个角落投射多条光线,并检查哪个角落首先击中障碍物。当然,如果盒子碰到障碍物的角落等,这将无法正常工作。但这可能提供一个起点。请注意,有效且正确的碰撞检测是一个非常复杂的主题。
至于你的第二个问题:IIRC,碰撞法线是运动矢量的平均值和运动矢量在碰撞表面上的投影。每个载体的重量取决于移动速度和表面性质,例如,反弹力。同样相当复杂的话题和我的记忆可能会让我觉得这里(碰撞正常也可能只是撞击点处碰撞表面的法线)
让我试着用一些ascii图来说明第二点:
O - moving object
\ - motion vector
\
\ / - collision normal
\ /
___\/__.___________ - collision surface ("average" of motion vector and vector between impact point and the "dot" projected onto the surface)
\ |
\ | - project motion vector from "inside" onto the collision surface (up in this case)
\|
请注意,我的脑袋可能会欺骗我,如果我有时间的话,我会查阅一些教程/说明。
可能有助于您入门的一些链接: