Matlab - inpolygon()和单元格数组

时间:2016-05-21 07:50:31

标签: matlab plot simulation geometry

我需要确定一组中的任何点是否在圆圈内。我需要对矩形对象做同样的事情,我使用inpolygon()完​​成了。我尝试使用bsxfun,就像我之前使用的圆圈一样,但每次都会引发错误。数据从建筑物信息数据中读出,如下所示。 inBuildingX和inBuildingY是列表中每个建筑物的X和Y坐标。对于阵列“建筑物”,值是跨越行,xcentre,y​​centre,垂直高度(未使用)。长度或半径和宽度。建筑物2和6需要一个inBuilding条件,它是圆形,因此没有宽度。例如,数组'buildings'中的第一行是一个以(0,-300)为中心,垂直高度为30,长度为200,宽度为100的矩形。该循环适用于矩形建筑,但不适用于圆形建筑。

enter image description here

inBuildingX = []; inBuildingY = []; inBuilding = [];
for i = 1:size(buildings,1)
    if buildings(i,5)
        inBuildingX(i,:) = [buildings(i,1)-buildings(i,4)*0.5,...
            buildings(i,1)+buildings(i,4)*0.5,...
            buildings(i,1)+buildings(i,4)*0.5,...
            buildings(i,1)-buildings(i,4)*0.5,...
            buildings(i,1)-buildings(i,4)*0.5]; 
        inBuildingY(i,:) = [buildings(i,2)-buildings(i,5)*0.5,...
            buildings(i,2)-buildings(i,5)*0.5,...
            buildings(i,2)+buildings(i,5)*0.5,...
            buildings(i,2)+buildings(i,5)*0.5,...
            buildings(i,2)-buildings(i,5)*0.5];
        inBuilding(i,:) = inpolygon(XY(1,:),XY(2,:),inBuildingX(1,:),inBuildingY(1,:));
    else     
        inBuilding(i,:) = sum(bsxfun(@minus, XY, [buildings(i,1),buildings(i,2)]).^2, 2) < (buildings(i,4)).^2;
    end
end

当我尝试使用bsxfun函数时,它会引发错误'两个输入数组的非单例维度必须相互匹配'。

0 个答案:

没有答案