exponenta event banner

checkCollision

Проверить, находятся ли две геометрии в столкновении

Описание

collisionStatus = checkCollision(geom1,geom2) возвращает статус столкновения между двумя выпуклыми геометриями geom1 и geom2. Если две геометрии сталкиваются в заданных позах, checkCollision равно 1. Если коллизия не обнаружена, collisionStatus равно 0.

пример

[collisionStatus,sepdist,witnesspts] = checkCollision(geom1,geom2) также возвращает минимальное расстояние и выносные точки каждой геометрии, sepdist и witnessptsсоответственно, если между двумя геометрическими объектами не обнаружено никакого столкновения.

Примеры

свернуть все

В этом примере показано, как проверить статус столкновения двух геометрий столкновения.

Создание геометрии столкновения боксов.

bx = collisionBox(1,2,3);

Создание геометрии столкновения цилиндров.

cy = collisionCylinder(3,1);

Переместите цилиндр вдоль оси X на 2.

T = trvec2tform([2 0 0]);
cy.Pose = T;

Постройте график двух геометрий.

show(cy)
hold on
show(bx)
xlim([-5 5])
ylim([-5 5])
zlim([-5 5])
hold off

Figure contains an axes. The axes contains 2 objects of type patch.

Проверьте состояние столкновения. Подтвердите, что статус соответствует графику.

[areIntersecting,dist,witnessPoints] = checkCollision(bx,cy)
areIntersecting = 1
dist = NaN
witnessPoints = 3×2

   NaN   NaN
   NaN   NaN
   NaN   NaN

Переместите рамку вдоль оси X на 3 и вниз по оси Z на 4. Убедитесь, что коробка и цилиндр не столкнулись.

T = trvec2tform([0 3 -4]);
bx.Pose = T;
[areIntersecting,dist,witnessPoints] = checkCollision(bx,cy)
areIntersecting = 0
dist = 2
witnessPoints = 3×2

    0.4286    0.4286
    2.0000    2.0000
   -2.5000   -0.5000

Постройте график поля, цилиндра и сегмента линии, представляющего минимальное расстояние между двумя геометрическими объектами.

show(cy)
hold on
show(bx)
wp = witnessPoints;
plot3([wp(1,1) wp(1,2)], [wp(2,1) wp(2,2)], [wp(3,1) wp(3,2)], 'bo-')
xlim([-5 5])
ylim([-5 5])
zlim([-5 5])
hold off

Figure contains an axes. The axes contains 3 objects of type patch, line.

Входные аргументы

свернуть все

Геометрия столкновения, заданная как одно из следующих:

Геометрия столкновения, заданная как одно из следующих:

Выходные аргументы

свернуть все

Состояние столкновения, возвращено как 0 или 1. Если две геометрии находятся в состоянии столкновения, collisionStatus равно 1. В противном случае значение равно 0.

Типы данных: double

Минимальное расстояние между двумя геометриями столкновения, возвращаемое в виде вещественного числа или NaN. Отрезок линии, соединяющий выносные точки (witnesspts) реализует минимальное расстояние между двумя геометриями. Когда две геометрии находятся в столкновении, sepdist имеет значение NaN.

Типы данных: double | NaN

Выносные точки на каждой геометрии, возвращаемые в виде матрицы 3 на 2. Каждый столбец соответствует следящей точке на geom1 и geom2соответственно. Отрезок, соединяющий две выносные точки, имеет длину septdist. Когда две геометрии находятся в столкновении, witnesspts имеет значение nan(3,2).

Типы данных: double | NaN

Ограничения

  • Результаты проверки на столкновение более не достоверны, когда минимальное расстояние опускается ниже 10-5 м.

Расширенные возможности

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2019b