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++ с помощью Coder™ MATLAB ®

.
Введенный в R2019b