如何使用 Matlab 以简单的方式计算两个矩形之间的交集?
How to compute the intersection between two rectangles in simple way using Matlab?
假设我有两个以某种方式相交的矩形。两个矩形如下图所示:
- 绿色矩形是ABCD。
- 红色矩形是A3B3C3D3
我想计算里面的八角形? (或六边形或在本例中为七边形)
到现在我成功的是使用函数lineintersect,但是看起来又长又重。肯定有更好的方法。你有什么功能可以简化吗?
您似乎拥有制图工具箱。实现两个多边形交点的最简单方法是使用 polyxpoly
函数。
原型是这样的:
[xi,yi] = polyxpoly(x1, y1, x2, y2);
x1
和y1
是定义第一个形状的多边形的x
和y
坐标,x2
和y2
是定义第二个形状的多边形的坐标。这些是一维向量,结果为您提供存储在 xi
和 yi
中的 x
和 y
坐标,这些坐标为您提供两个多边形的交点。
下面是一个使用函数的例子:
% Define and fill a rectangular area in the plane
xlimit = [3 13];
ylimit = [2 8];
xbox = xlimit([1 1 2 2 1]);
ybox = ylimit([1 2 2 1 1]);
mapshow(xbox,ybox,'DisplayType','polygon','LineStyle','none')
% Define and display a two-part polyline
x = [0 6 4 8 8 10 14 10 14 NaN 4 4 6 9 15];
y = [4 6 10 11 7 6 10 10 6 NaN 0 3 4 3 6];
mapshow(x,y,'Marker','+')
% Intersect the polyline with the rectangle
[xi, yi] = polyxpoly(x, y, xbox, ybox);
mapshow(xi,yi,'DisplayType','point','Marker','o');
我们得到:
来源:MathWorks
假设我有两个以某种方式相交的矩形。两个矩形如下图所示:
- 绿色矩形是ABCD。
- 红色矩形是A3B3C3D3
我想计算里面的八角形? (或六边形或在本例中为七边形)
到现在我成功的是使用函数lineintersect,但是看起来又长又重。肯定有更好的方法。你有什么功能可以简化吗?
您似乎拥有制图工具箱。实现两个多边形交点的最简单方法是使用 polyxpoly
函数。
原型是这样的:
[xi,yi] = polyxpoly(x1, y1, x2, y2);
x1
和y1
是定义第一个形状的多边形的x
和y
坐标,x2
和y2
是定义第二个形状的多边形的坐标。这些是一维向量,结果为您提供存储在 xi
和 yi
中的 x
和 y
坐标,这些坐标为您提供两个多边形的交点。
下面是一个使用函数的例子:
% Define and fill a rectangular area in the plane
xlimit = [3 13];
ylimit = [2 8];
xbox = xlimit([1 1 2 2 1]);
ybox = ylimit([1 2 2 1 1]);
mapshow(xbox,ybox,'DisplayType','polygon','LineStyle','none')
% Define and display a two-part polyline
x = [0 6 4 8 8 10 14 10 14 NaN 4 4 6 9 15];
y = [4 6 10 11 7 6 10 10 6 NaN 0 3 4 3 6];
mapshow(x,y,'Marker','+')
% Intersect the polyline with the rectangle
[xi, yi] = polyxpoly(x, y, xbox, ybox);
mapshow(xi,yi,'DisplayType','point','Marker','o');
我们得到:
来源:MathWorks