• 大小: 6KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: Matlab
  • 标签: Matlab  

资源简介

Matlab 下设置泰森多边形(voronoi)边界,并计算多边形面积

资源截图

代码片段和文件信息

function [xc yc] = BoundaryIntersect_UnitSquare(P1 P2 Mode)

global LeftEdge RightEdge BtmEdge TopEdge

x1 = P1(:1);
y1 = P1(:2);
x2 = P2(:1);
y2 = P2(:2);

dx = x1 - x2;
dy = y1 - y2;

bNonsingular = (dx~=0);
bSingular    = ~bNonsingular;

switch Mode
    
    case 1
        % One point outside of square while the other inside
        
        % Non-singular case
        if (bNonsingular)    % Regular equation of line
            
            m = dy./dx;
            
            % Calculate square intersect
            yc1 = m.*(LeftEdge-x1) + y1;
            yc2 = m.*(RightEdge-x1) + y1;
            xc1 = 1./m.*(BtmEdge-y1) + x1;
            xc2 = 1./m.*(TopEdge-y1) + x1;
            
            ptIntersect = [];
            
            % Check for valid intersects
            if (yc1 >= BtmEdge && yc1 <= TopEdge)    ptIntersect = [ptIntersect; [LeftEdge yc1]]; end
            if (yc2 >= BtmEdge && yc2 <= TopEdge)    ptIntersect = [ptIntersect; [RightEdge yc2]]; end
            if (xc1 >= LeftEdge && xc1 <= RightEdge) ptIntersect = [ptIntersect; [xc1 BtmEdge]]; end
            if (xc2 >= LeftEdge && xc2 <= RightEdge) ptIntersect = [ptIntersect; [xc2 TopEdge]]; end
            
            intersect1 = ptIntersect(1:);
            intersect2 = ptIntersect(2:);
            
        end
        
        % Singular case
        if (bSingular)   % vertical line
            % Calculate square intersect
            intersect1 = [x1 TopEdge];
            intersect2 = [x1 BtmEdge];
        end
        
        % The dot product of (p1-intersect).(p2-intersect) is negative if the intersection point
        % lie between two points as the two vectors take on different direction
        % Due to the point configuration only one “intersect“ test is
        % needed (the other one is logial compliment)
        v1 = sum((P1-intersect1).*(P2-intersect1)2);
        % v2 = sum((P1-intersect2).*(P2-intersect2)2);
        
        v1neg = v1<0;
        v2neg = ~v1neg;
        
        xc(v1neg) = intersect1(v1neg1);
        xc(v2neg) = intersect2(v2neg1);
        yc(v1neg) = intersect1(v1neg2);
        yc(v2neg) = intersect2(v2neg2);
        
        
    case 2
        % Both points are outside of unit circle
        
        if (bNonsingular)    % Regular equation of line
            
            m = dy./dx;
            
            % Calculate square intersect
            yc1 = m.*(LeftEdge-x1) + y1;
            yc2 = m.*(RightEdge-x1) + y1;
            xc1 = 1./m.*(BtmEdge-y1) + x1;
            xc2 = 1./m.*(TopEdge-y1) + x1;
            
            ptIntersect = [];
            
            % Check for valid intersects
            if (yc1 >= BtmEdge && yc1 <= TopEdge)    ptIntersect = [ptIntersect; [LeftEdge yc1]]; end
            if (yc2 >= BtmEdge && yc2 <= TopEdge)    ptIntersect = [ptIntersect; [RightEdge yc2]]; end
            if (xc1 >= LeftEd

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4355  2016-01-09 19:44  BoundaryIntersect_UnitSquare.m

     文件       7571  2016-01-09 22:31  BoundVoronoin_UnitSquare.m

     文件       6945  2016-01-09 22:31  SquareBV.m

     文件       2632  2016-01-09 19:45  CalcArea_UnitSquare.m

----------- ---------  ---------- -----  ----

                21503                    4


评论

共有 条评论