Você está na página 1de 2

extrai_curvas_de_figuras % [x,y,y(x)] = Curvas() % Aproxima uma curva (em escala linear) obtida de um arquivo grafico % mediante um polinomio definido

% x: valores das abscissas marcadas % y: valores das ordenadas marcadas % y(x): polinomio obtido como aproximao curva function [Xreal, Yreal] = extrai_curvas_de_figuras() prompt={'Nome de arquivo:'}; name='Arquivo'; numlines=1; defaultanswer={'curva.bmp'}; rta=inputdlg(prompt,name,numlines,defaultanswer); RGB=imread(rta{1}(1:end)); fig1=figure; image(RGB) fprintf('Ajuda:\n'); fprintf('Para marcar um ponto: faa click com o boto esquerdo.\n'); fprintf('Para cancelar o ponto anterior: aperte BACKSPACE ou DELETE.\n'); fprintf('Para aceitar o(s) ponto(s) escolhido(s): aperte ENTER\n'); tmp=questdlg('Faa click com o boto esquerdo na parte inferior esquerda do plano. Aperte ENTER para terminar', 'Posio da origem', 'Aceitar','Aceitar'); [X1,Y1]=getpts(fig1); prompt={'Valor da coordenada em x:','Valor da coordenada em y:'}; name='Escreva o valor das coordenadas do ponto escolhido'; numlines=1; defaultanswer={'600','4'}; rta=inputdlg(prompt,name,numlines,defaultanswer); Xmin=str2double(rta(1)); Ymin=str2double(rta(2)); tmp=questdlg('Faa click com o boto esquerdo na parte superior direita do plano. Aperte ENTER para terminar', 'Posio da origem', 'Aceitar','Aceitar'); [X2,Y2]=getpts(fig1); prompt={'Valor da coordenada em x:','Valor da coordenada em y:'}; name='Escreva o valor das coordenadas do ponto escolhido'; numlines=1; defaultanswer={'600','4'}; rta=inputdlg(prompt,name,numlines,defaultanswer); Xmax=str2double(rta(1)); Ymax=str2double(rta(2)); tmp=questdlg('Faa click sobre vrios pontos da curva com o boto esquerdo. Aperte ENTER para terminar', 'Pontos da curva', 'Aceitar','Aceitar'); [X,Y]=getpts(fig1); Xesc=(Xmax-Xmin)/(X2-X1); Yesc=(Ymax-Ymin)/(-Y2+Y1); Xreal=(X-X1)*Xesc+Xmin; Yreal=(-Y+Y1)*Yesc+Ymin; figure plot(Xreal,Yreal) grid on invertir = questdlg('Deseja invertir os eixos para gerar o polinomio?', 'Invertir eixos', 'Sim', 'No', 'Sim'); if strcmp(invertir,'Sim') tmp=Yreal; Yreal=Xreal; Xreal=tmp; end figure rta='Sim'; while strcmp(rta,'Sim') prompt={'Grau do polinomio:'}; Pgina 1

extrai_curvas_de_figuras name='Grau do polinomio'; numlines=1; defaultanswer={'4'}; n=inputdlg(prompt,name,numlines,defaultanswer); p = polyfit(Xreal,Yreal,str2double(n)); plot(Xreal,Yreal,'xb') hold on xtmp=linspace(Xreal(1),Xreal(end),100); ytmp=0*xtmp; for c1=1:100 for c2=1:str2double(n)+1 ytmp(c1)=ytmp(c1)+p(c2)*(xtmp(c1))^(str2double(n)+1-c2); end end plot(xtmp,ytmp,'r') grid on legend('Dados','Polinomio','Location','Best') hold off rta = questdlg('Deseja trocar o polinomio?', 'Trocar polinomio', 'Sim', 'No', 'Sim'); end clc % disp('Coeficientes do polinomio (variavel p):') % disp(vpa(p))

Pgina 2

Você também pode gostar