2012-03-27 3 views
1

Я пытаюсь создать систему столкновений с сеткой и кругом для своей игры. Я видел несколько примеров, когда вы перебираете все вершины сетки и проверяете, находятся ли они внутри круга. Но проблема в том, что иногда вершины находятся не внутри круга, а линии, которые есть в этой форме вершин. В этом случае проверка столкновения оценивается как false, когда она должна оцениваться как истина. Как я могу сделать хорошее обнаружение столкновения этого типа? (в c/C++)Как сделать правильное обнаружение столкновений с сеткой 2 круга

ответ

1

Просто перебирайте все края. И не волнуйтесь о вершинах: если вершина находится внутри круга, какое-то ребро связано с ней (если вся сетка внутри круга, что я предполагаю, вряд ли).

+0

И как я итерацию по краю? Я могу просто знать положение конкретной точки, но не о краю, не так ли? – XaitormanX

+0

Итак, ваш вопрос заключается в том, как определить, пересекает ли отрезок прямой между двумя заданными точками данный круг? – Beta

+0

Да точно. Потому что, если я этого не сделаю, это не сработает правильно – XaitormanX

3

Если вы хотите, вы можете рассчитать расстояние от линии до центра круга. Но я думаю, что это будет слишком дорого. Если расстояние меньше радио, у вас может быть столкновение. Вам нужно будет проверить, находится ли эта часть линии между точками. Distance line to point

+0

Но мне нужно использовать конкретную точку для проверки расстояния, потому что она может столкнуться в середине линии, но не в конце. Как я узнаю, в какой точке строки я должен использовать? – XaitormanX

+1

Математика даст вам кратчайшее расстояние между точкой (центром вашего круга) и линией (каждая вершина вашей сетки). Вы также можете прочитать http://www.intmath.com/plane-analytic-geometry/perpendicular-distance-point-line.php, http://tog.acm.org/resources/GraphicsGems/index.html, http: //forums.codeguru.com/showthread.php?t=194400 и http://www.merl.com/projects/vclip/ – j4x

Смежные вопросы