⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 example.m

📁 the intersection of cycl in matlab.show the result in figur.
💻 M
📖 第 1 页 / 共 2 页
字号:
x1=[];
y1=[];
for k=1:length(n),
    x1=[x1 x(k) (x(k)+(dx(k)*(1:n(k)-1))./n(k))];
    y1=[y1 y(k) (y(k)+(dy(k)*(1:n(k)-1))./n(k))];
end;
x1=[x1 x(end)];
y1=[y1 y(end)];
pntr=[x1;y1];



function WindowButtonMotionFcn;
global hCI;
gw=getappdata(hCI,'handles');
[st,px,py,dxyr,nc]=current_state(gw);
switch gw.action,
    case 'none',
        if st==1,
            set(hCI,'pointer','crosshair');
        else
            if st==2,
                c_sel=gw.c_sel;
                degr=atan2(py-gw.G(c_sel,2),px-gw.G(c_sel,1));
                m=transform_pointer(gw.pntr,degr);
                set(hCI,'pointer','custom','pointershapecdata',m,'PointerShapeHotSpot',[8 8]);
            else
                set(hCI,'pointer','arrow');
            end;
        end;
    case 'radius',
        c_sel=gw.c_sel;
        rad=sqrt((px-gw.G(c_sel,1))^2+(py-gw.G(c_sel,2))^2);
        gw.G(c_sel,3)=rad-gw.dxyr(3);
        ang=(0:360)*pi/180;
        set(gw.hG(c_sel),'XData',gw.G(c_sel,1)+gw.G(c_sel,3)*cos(ang),'YData',gw.G(c_sel,2)+gw.G(c_sel,3)*sin(ang));
        set(gw.h_center_sel,'XData',gw.G(c_sel,1),'YData',gw.G(c_sel,2));
        set(gw.edtR,'String',num2str(round(10*gw.G(c_sel,3))/10));
        setappdata(hCI,'handles',gw);
        degr=atan2(py-gw.G(c_sel,2),px-gw.G(c_sel,1));
        m=transform_pointer(gw.pntr,degr);
        set(hCI,'pointer','custom','pointershapecdata',m,'PointerShapeHotSpot',[8 8]);
        apply_circles_intersection;
    case 'center'
        c_sel=gw.c_sel;
        gw.G(c_sel,1)=px-gw.dxyr(1);
        gw.G(c_sel,2)=py-gw.dxyr(2);
        ang=(0:360)*pi/180;
        set(gw.hG(c_sel),'XData',gw.G(c_sel,1)+gw.G(c_sel,3)*cos(ang),'YData',gw.G(c_sel,2)+gw.G(c_sel,3)*sin(ang));
        set(gw.h_center_sel,'XData',gw.G(c_sel,1),'YData',gw.G(c_sel,2));
        set(gw.edtX,'String',num2str(round(10*gw.G(c_sel,1))/10));
        set(gw.edtY,'String',num2str(round(10*gw.G(c_sel,2))/10));
        setappdata(hCI,'handles',gw);
        apply_circles_intersection;
end;


function WindowButtonDownFcn;
global hCI;
gw=getappdata(hCI,'handles');
[st,px,py,dxyr,nc]=current_state(gw);
gw.action='none';
if st==3,
    SelectCircle(nc,gw);
end;
if st==1,
    gw.action='center';
    gw.dxyr=dxyr;
    setappdata(hCI,'handles',gw);
end;
if st==2,
    gw.action='radius';
    gw.dxyr=dxyr;
    setappdata(hCI,'handles',gw);
end;


function WindowButtonUpFcn;
global hCI;
gw=getappdata(hCI,'handles');
gw.action='none';
setappdata(hCI,'handles',gw);


function popKT;
global hCI;
gw=getappdata(hCI,'handles');
v=get(gw.popKT,'Value');
if v~=gw.kt,
    gw.kt=v;
    setappdata(hCI,'handles',gw);
    apply_circles_intersection;
end;


function [st,px,py,dxyr,nc]=current_state(gw);
c_sel=gw.c_sel;
xlim=get(gw.hAxs,'xlim');
ylim=get(gw.hAxs,'ylim');
pa=get(gw.hAxs,'position');
kx=diff(xlim)/pa(3);
ky=diff(ylim)/pa(4);
p=get(gw.hAxs,'CurrentPoint');
px=p(1,1);
py=p(1,2);
dx=px-gw.G(c_sel,1);
dy=py-gw.G(c_sel,2);
dc=sqrt(dx*dx+dy*dy);
dr=dc-gw.G(c_sel,3);
dxyr=[dx dy dr];
do=abs(dr);
if 2*dc/(kx+ky)<7,
    % center of selected circle
    st=1;
    nc=c_sel;
else
    if 2*do/(kx+ky)<7,
        % over selected circumference
        st=2;
        nc=c_sel;
    else
        % over non-selected circumference
        for k=1:gw.Ng,
            if k~=c_sel,
                dx=px-gw.G(k,1);
                dy=py-gw.G(k,2);
                dc=sqrt(dx*dx+dy*dy);
                dr=dc-gw.G(k,3);
                do=abs(dr);
                if 2*do/(kx+ky)<7,
                    nc=k;
                    st=3;
                    return;
                end;
            end;
        end;
        st=0;
        nc=0;
    end;
end;



function m=transform_pointer(pntr,deg);
sn=sin(deg);
cn=cos(deg);
rot=[cn -sn;sn cn];
pntr=((pntr-8)'*rot)'+8;
m=zeros(16)*NaN;
z=16*floor(pntr(1,:))+floor(pntr(2,:));
m(z+1)=1;

function strpop=popupmenustring(Ng);
strpop=[];
for k=1:Ng,
    ppp='          ';
    sss=num2str(k);
    ls=length(sss);lp=length(ppp);
    ppp(lp-ls+1:lp)=sss;
    strpop{k}=ppp;
end;
function popSel;
global hCI;
gw=getappdata(hCI,'handles');
nc=get(gw.popSel,'Value');
SelectCircle(nc,gw);


function edit;
global hCI;
gw=getappdata(hCI,'handles');
c_sel=gw.c_sel;
gw.G(c_sel,1)=str2num(get(gw.edtX,'String'));
gw.G(c_sel,2)=str2num(get(gw.edtY,'String'));
gw.G(c_sel,3)=str2num(get(gw.edtR,'String'));
ang=(0:360)*pi/180;
set(gw.hG(c_sel),'XData',gw.G(c_sel,1)+gw.G(c_sel,3)*cos(ang),'YData',gw.G(c_sel,2)+gw.G(c_sel,3)*sin(ang));
set(gw.h_center_sel,'XData',gw.G(c_sel,1),'YData',gw.G(c_sel,2));
setappdata(hCI,'handles',gw);
apply_circles_intersection;



function pbInsert;
global hCI;
gw=getappdata(hCI,'handles');
gw.G=[gw.G;[160*(rand-0.5) 160*(rand-0.5) 30]];
gw.Ng=size(gw.G,1);
Ng=gw.Ng;
ang=(0:3:360)*pi/180;
gw.hG(Ng)=line(gw.G(Ng,1)+gw.G(Ng,3)*cos(ang),gw.G(Ng,2)+gw.G(Ng,3)*sin(ang),'Parent',gw.hAxs,'Color','g','linestyle',':','linewidth',2);
setappdata(hCI,'handles',gw);
strpop=popupmenustring(Ng);
set(gw.popKT,'String',strpop);
set(gw.popSel,'String',strpop);
SelectCircle(Ng,gw);
apply_circles_intersection;


function pbRemove;
global hCI;
gw=getappdata(hCI,'handles');
if gw.Ng>1,
    nc=gw.c_sel;
    idx=[1:nc-1 nc+1:gw.Ng];
    nn=idx(1);
    SelectCircle(nn,gw);
    gw=getappdata(hCI,'handles');
    delete(gw.hG(nc));
    gw.G=gw.G(idx,:);
    gw.hG=gw.hG(idx);
    gw.Ng=size(gw.G,1);
    strpop=popupmenustring(gw.Ng);
    v=get(gw.popKT,'Value');
    if v>gw.Ng, v=gw.Ng; gw.kt=v; end;
    set(gw.popKT,'String',strpop,'value',v);
    if nn>nc,gw.c_sel=nn-1;end;
    set(gw.popSel,'String',strpop,'value',gw.c_sel);
    setappdata(hCI,'handles',gw);
    apply_circles_intersection;
end;


function pbSave;
global hCI;
gw=getappdata(hCI,'handles');
[fn,fp]=uiputfile('*.mat','SAVE IN');
if ischar(fn),
    ffn=[fp fn];
    gx.G=gw.G;
    gx.Ng=gw.Ng;
    gx.kt=gw.kt;
    gx.c_sel=gw.c_sel;
    save(ffn,'gx');
end;


function pbLoad;
global hCI;
gw=getappdata(hCI,'handles');
[fn,fp]=uigetfile('*.mat','LOAD FROM');
if ischar(fn),
    ffn=[fp fn];
    load(ffn);
    gw.G=gx.G;
    gw.c_sel=gx.c_sel;
    gw.Ng=size(gw.G,1);
    gw.kt=gx.kt;
    delete(gw.hG);
    delete(gw.h_center_sel);
    ang=(0:3:360)*pi/180;
    for k=1:gw.Ng,
        hG(k)=line(gw.G(k,1)+gw.G(k,3)*cos(ang),gw.G(k,2)+gw.G(k,3)*sin(ang),'Parent',gw.hAxs,'Color','g','linestyle',':','linewidth',2);
    end;
    set(hG(gw.c_sel),'Color','b');
    h_center_sel=line(gw.G(gw.c_sel,1),gw.G(gw.c_sel,2),'Parent',gw.hAxs,'Color','b','linestyle','none','marker','o','markersize',3);
    gw.hG=hG;
    gw.h_center_sel=h_center_sel;
    strpop=popupmenustring(gw.Ng);
    set(gw.popKT,'String',strpop,'value',gw.kt);
    set(gw.popSel,'String',strpop,'value',gw.c_sel);
    SelectCircle(gw.c_sel,gw);
    apply_circles_intersection;
end;




function SelectCircle(nc,gw);
set(gw.hG(gw.c_sel),'Color','g');
gw.c_sel=nc;
set(gw.hG(nc),'Color','b');
set(gw.h_center_sel,'XData',gw.G(nc,1),'YData',gw.G(nc,2));
set(gw.edtX,'String',num2str(round(10*gw.G(nc,1))/10));
set(gw.edtY,'String',num2str(round(10*gw.G(nc,2))/10));
set(gw.edtR,'String',num2str(round(10*gw.G(nc,3))/10));
set(gw.popSel,'Value',nc);
setappdata(gw.hCI,'handles',gw);

function display_area(gw,area_of_region);
A=sum(gw.G(:,3).*gw.G(:,3))*pi;
set(gw.txtArea,'String',num2str(round(area_of_region*10)/10));
W=get(gw.frmPrgbB,'position');
wdth=W(3);
W=get(gw.frmPrgb,'position');
W(3)=round(area_of_region*wdth/A);
if W(3)==0,W(3)=1;end;
set(gw.frmPrgb,'position',W);



function popRenderer;
global hCI;
gw=getappdata(hCI,'handles');
r=get(gw.popRenderer,'value');
ss=get(gw.popRenderer,'string');
set(hCI,'Renderer',ss{r});


function chkCalc;
global hCI;
gw=getappdata(hCI,'handles');
v=get(gw.chkCalc,'value');
if v==1,
    set(gw.pbCalc,'Enable','off');
else
    set(gw.pbCalc,'Enable','on');
end;



function pbCalc;
global hCI;
gw=getappdata(hCI,'handles');
v=get(gw.chkCalc,'value');
set(gw.chkCalc,'value',1);
apply_circles_intersection;
set(gw.chkCalc,'value',v);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -