【发布时间】:2014-04-15 22:37:38
【问题描述】:
我有一个由多个点组成的地面,其中一些是平坦的,而另一些是倾斜的,我正在尝试检查倾斜点之间是否存在碰撞(非轴对齐)。
我有一个向量数组,每个点由两个浮点组成 - 这是地面的每个点。
这是地面外观的图像表示。 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/归一化 = -0.496 ny/归一化 = -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
此信息对于计算两点之间的法线和点积是否正确。
如何检查是否与这条线发生碰撞,然后按正常反映。
谢谢 :) 欢迎任何和所有更改。
【问题讨论】:
-
我的建议是你拿起一本关于线性代数的书(甚至游戏数学也可以)。如果您遇到这些问题之一,那么您可能会遇到更多类似的问题。首先,研究一下矢量投影或en.wikipedia.org/wiki/Distance_from_a_point_to_a_line。
标签: c++ vector collision-detection normals