C++检测两点之间的碰撞,并在发生碰撞时从法线上反弹
C++ Detect collision between two points and bouncing off the normal if there is a collision
我有一个由各种点组成的地面,其中一些点是平的,另一些点是成角度的,我试图检查成角度的点之间是否发生碰撞(非轴对齐)。
我有一个向量数组,每个点上有两个浮点-这是地面上的每个点。
这是地面的图像。https://i.stack.imgur.com/BZcnI.png
目前,我想检查点1和2之间的碰撞,然后转到其他点。
我将以第1点和第2点为例。
g1x = 150; g2x = 980;
g2x = 500; g2y = 780;
这个的dxdy是dx=350和dy=-200
它的法线x是dy,法线y是-dx
nx = -200;
ny = -350;
归一化它是点1和点2之间的长度,为403.11
nx/归一化=-0.496ny/归一化=-0.868
//get position of object - Don't know if its supposed to be velocity or not
float vix = object->getPosition().x;
float viy = object->getPosition().y;
//calculate dot product - unsure if vix/viy are supposed to be minused
float dot = ((-vix * nrmx) + (-viy * nrmy)) * nrmx; //= -131.692
此信息对于计算两点之间的法线和点积是否正确。
如何检查是否与这条线发生碰撞,然后根据法线进行反射。
谢谢:)欢迎任何更改。
假设在位置x有一个粒子以速度v移动,边界由a和b之间的线定义。
我们可以通过将c-a投影到b-a上,并除以长度||b-a||来找到粒子沿着边界碰撞的距离(作为分数)。也就是说,
u=((c-a) ((b-a)/||b-a||)/|b-a||=(c-a/b>) (b-a)/|b-a||2。
如果u>1,则粒子经过b侧的边界,如果u><0,则粒子经过a侧的边界。碰撞点将是
c=a+ub。
通过求解可以找到碰撞时间
x+tv=a+s(b-a)
对于t。反射矩阵可以在这里找到。但它需要旋转90°(或π/2),这样你就可以反射到与线正交的方向,而不是穿过线。
对于多个边界,计算每个边界的碰撞时间,按该时间排序(丢弃负时间),并在列表中检查碰撞。一旦你找到了将要碰撞的粒子,你就可以将粒子移动到碰撞点,反映它的速度,改变deltat,然后再次重做整个过程(忽略刚刚碰撞的那个),因为在角落的情况下,你可能会碰撞多个边界(明白吗?这是数学双关语)。
线性代数可能很有趣,你可以用它做更多的事情,掌握线性代数可以让你做一些强大的事情。祝你好运
- 落砂模拟碰撞检测C++和SFML
- SFML 中的重力和碰撞检测
- 我的碰撞检测中的奇怪行为
- 如何为球形物体和三角形地形提供高效的碰撞检测和响应
- 圆形与方形碰撞检测以及需要响应C++ |OpenGL。我的问题就是这个"I need to keep the circle outside the square"
- 在Qt3D中进行碰撞检测的预期方法(或好方法)是什么?
- 在碰撞检测方面苦苦挣扎.如何正确检测碰撞?
- 三角形-三角形碰撞检测问题
- 不同类别之间的C SFML碰撞检测
- 使用D3DXVECTOR C 的碰撞检测,发生碰撞后该怎么办
- 当我发生碰撞检测时,矢量迭代器不兼容
- 如何使用灵活的碰撞库在两个点云或点云与机器人末端执行器模型之间进行碰撞检测
- 优化碰撞检测C
- 使用碰撞检测来增加SFML 2.4中的游戏分数的问题
- 使用OnComponentHit UE4 C++进行碰撞检测
- 体素世界中的碰撞检测
- 如何在 2D 碰撞检测中正确解析碰撞的位置?
- (中广)获取AABB树生成的边界立方体进行碰撞检测
- 使用C 中的单元格 /图块 /网格进行碰撞检测的最佳数据结构
- 多维边界框碰撞检测