我有一个不同点的地面设置,其中一些是平的,另一些是有角度的,我试图检查角度点之间是否存在碰撞(非轴对齐)。 / p>
我有一个向量数组,每个点包含两个浮点数 - 这是地面的每个点。
这是地面看起来像的图像表示。 http://i.imgur.com/cgEMqUv.png?1?4597
目前我想检查点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 / normalized = -0.496 ny / normalized = -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
这些信息是否正确,可以计算两点之间的正常和点积。
如何检查此线是否发生碰撞,然后根据正常情况进行反映。
谢谢:)欢迎任何和所有更改。
答案 0 :(得分:0)
假设您在 x 位置以 v 行进的粒子以及由 a 和 b之间的线定义的边界
我们可以通过将 c - a 投影到 b - a 并除以长度|| b - a ||。也就是说,
u =(( c - a )。(( b - A )/ || b'/ b> - A ||))/ || b'/ b> - 的一个 || ==( c - a )。( b - a )/ | | b'/ b> - A || 2
如果 u > 1然后粒子穿过 b 侧的边界,如果 u < 0然后粒子经过 a 侧的边界。碰撞点是
c = a + u b 。
通过解决
可以找到碰撞的时间x + t v = a + s ( b'/ b> - A )
代表 t 。可以找到反射矩阵here。但它需要旋转90 deg (或pi / 2),这样你才能反射与线的正交,而不是在线上。
就多个边界而言,计算每个边界的碰撞时间,按时间排序(丢弃负时间)并检查列表中的碰撞。一旦你找到了你将碰撞的那个,那么你可以将粒子移动到碰撞点,反映它的速度,改变 delta t 并重新重做整个事物(忽略你刚碰到的那个),因为你可能会在角落的情况下碰撞多个边界(得到它?它是数学双关语)。
线性代数可以很有趣,你可以用它做更多的事情,掌握线性代数可以让你做一些有力的事情。祝你好运!