matlab中进行二维平面中有向矩形相交探测计算OBB dection
来源:互联网 发布:手机淘宝上的积分在哪 编辑:程序博客网 时间:2024/05/19 11:50
项目中需要计算有向包围盒OBB相交的计算,这 是计算机图形学中的基本问题,但是我在Simulink中想实现该计算时发现网上几乎没有matlab下的代码。于是参考网上大牛们的c++和java代码,在matlab中重新写了obb相交探测方法。由于matlab先天的强大矩阵计算能力,matlab下实现其实更加简单。再结合简单的可视化方法,可以直观 的实现生动的视觉效果。
本文是本文第一次在该网站上写blog,也是第一次在网上写blog,水平不足之处还请大牛们多留情啊。
计算obb相交的算法:
obbDec.m文件:
function int = obbDec( A,B )
%UNTITLED2 Summary of this function goes here
% Detailed explanation goes here
%x y width height rotation,x,y are center point coordinates
r=A(5);
vec_A=[cos(r),sin(r);
-sin(r),cos(r)];
r=B(5);
vec_B=[cos(r),sin(r);
-sin(r),cos(r)];
disVec=[B(1)-A(1),B(2)-A(2)];
for n=1:2
if getProjectionRadius(vec_A(n,:),A,vec_A)+getProjectionRadius(vec_A(n,:),B,vec_B)<=abs(disVec*vec_A(n,:)')
int=false;
return;
end
if getProjectionRadius(vec_B(n,:),A,vec_A)+getProjectionRadius(vec_B(n,:),B,vec_B)<=abs(disVec*vec_B(n,:)')
int =false;
return;
end
end
int=true;
end
%UNTITLED2 Summary of this function goes here
% Detailed explanation goes here
%x y width height rotation,x,y are center point coordinates
r=A(5);
vec_A=[cos(r),sin(r);
-sin(r),cos(r)];
r=B(5);
vec_B=[cos(r),sin(r);
-sin(r),cos(r)];
disVec=[B(1)-A(1),B(2)-A(2)];
for n=1:2
if getProjectionRadius(vec_A(n,:),A,vec_A)+getProjectionRadius(vec_A(n,:),B,vec_B)<=abs(disVec*vec_A(n,:)')
int=false;
return;
end
if getProjectionRadius(vec_B(n,:),A,vec_A)+getProjectionRadius(vec_B(n,:),B,vec_B)<=abs(disVec*vec_B(n,:)')
int =false;
return;
end
end
int=true;
end
function r=getProjectionRadius(m,A,n)
w=A(3);
h=A(4);
r=w*abs(n(1,:)*m')/2+h*abs(n(2,:)*m')/2;
end
w=A(3);
h=A(4);
r=w*abs(n(1,:)*m')/2+h*abs(n(2,:)*m')/2;
end
画图函数:plotRec.m文件
function plotRec(A,c)
%plot rotated rectangle
w=A(3)/2;
h=A(4)/2;
x=A(1);
y=A(2);
r=A(5);
p=[x-w*cos(r)+h*sin(r),y-h*cos(r)-w*sin(r);
x+w*cos(r)+h*sin(r),y-h*cos(r)+w*sin(r);
x+w*cos(r)-h*sin(r),y+h*cos(r)+w*sin(r);
x-w*cos(r)-h*sin(r),y+h*cos(r)-w*sin(r);
x-w*cos(r)+h*sin(r),y-h*cos(r)-w*sin(r)];
plot(p(:,1),p(:,2),c)
end
%plot rotated rectangle
w=A(3)/2;
h=A(4)/2;
x=A(1);
y=A(2);
r=A(5);
p=[x-w*cos(r)+h*sin(r),y-h*cos(r)-w*sin(r);
x+w*cos(r)+h*sin(r),y-h*cos(r)+w*sin(r);
x+w*cos(r)-h*sin(r),y+h*cos(r)+w*sin(r);
x-w*cos(r)-h*sin(r),y+h*cos(r)-w*sin(r);
x-w*cos(r)+h*sin(r),y-h*cos(r)-w*sin(r)];
plot(p(:,1),p(:,2),c)
end
示例代码:
A=[2 2 3 1.5 0];%矩形一
B=[3 4 2 1 0];%矩形二
B=[3 4 2 1 0];%矩形二
for i=1:100
A(5)=i*pi/30;
B(5)=i*pi/40;
hold off;
plot(0,0);
axis([0 6 0 6]);
hold on;
if obbDec(A,B)
plotRec(A,'r');
plotRec(B,'r');
else
plotRec(A,'g');
plotRec(B,'g');
end
pause(0.2);
end
A(5)=i*pi/30;
B(5)=i*pi/40;
hold off;
plot(0,0);
axis([0 6 0 6]);
hold on;
if obbDec(A,B)
plotRec(A,'r');
plotRec(B,'r');
else
plotRec(A,'g');
plotRec(B,'g');
end
pause(0.2);
end
阅读全文
0 0
- matlab中进行二维平面中有向矩形相交探测计算OBB dection
- 二维中的OBB相交测试
- j2me中计算两矩形的相交区域算法
- OpenGL: 二维中的OBB相交测试
- matlab中二维高斯模板的计算
- 数字图象处理-在matlab中计算和观察二维DFT
- 计算有向图可达矩阵Matlab实现
- 矩形相交 判断 - 相交区域坐标计算
- 矩形相交区域的计算
- 矩形相交区域的计算
- 计算两个矩形是否相交以及相交的矩形
- matlab中实现RANSAC平面拟合
- Matlab中二维空间变换
- Matlab中画二维散点图
- 光线与盒体相交检测(Ray-OBB)可用于VR中Cursor与控件的碰撞检测
- iphone中获取两个矩形的相交区域
- iphone中获取两个矩形的相交区域
- 计算平面上二条线段的相交点
- session会话保持
- 窄带信号和宽带信号的区别和联系
- Spring 核心组件工作原理简析
- 博客近期的写作学习目标
- 【框架学习】myBatis
- matlab中进行二维平面中有向矩形相交探测计算OBB dection
- 170618 如何利用pandas将numpy数组导出生成excel
- R-CNN,SPP-NET, Fast-R-CNN,Faster-R-CNN, YOLO, SSD系列深度学习检测方法梳理
- C++日常笔记(4)
- 简单实现自动登陆
- 摄像机标定MATLAB工具箱
- 三角形问题
- smarty模板清除静态页面练习
- Java实际开发中set,Map,List分别用在什么情况