1 / 26

Vectores, Gráficos e Funções Trajectória de Projéctil

Vectores, Gráficos e Funções Trajectória de Projéctil. Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2005/2006. Algoritmo de Simulação da Trajectória de um Projéctil. Especificação do Problema.

azriel
Download Presentation

Vectores, Gráficos e Funções Trajectória de Projéctil

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Vectores, Gráficos e FunçõesTrajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2005/2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil

  2. Algoritmo de Simulação da Trajectória de um Projéctil Especificação do Problema Dada uma altura inicial (y0) uma velocidade inicial (v0) e um ângulo inicial de lançamento (), com base no modelo da trajectória apresentado e para uma dada precisão (dx), determinar a distância máxima (dmax) e a altura máxima (hmax) atingidas pelo projéctil e mostrar o gráfico da trajectória. Entrada Altura Inicial :y0 Velocidade Inicial :v0 Ângulo Inicial : Precisão : dx Resultados Distância Máxima : dmax Altura Máxima : hmax Gráfico Trajectória Vectores, Gráficos e Funções - Trajectória de um Projéctil

  3. Gráficos Em Octave a forma mais simples de desenhar um gráfico da função f(x) é utilizar o comando pre-definido plot(X,F) sendo X e F dois vectores do mesmo tamanho, em que o i-ésimo elemento do vector F corresponde ao valor da função no ponto x indicado pelo i-ésimo elemento do vector X. Vectores, Gráficos e Funções - Trajectória de um Projéctil

  4. Por exemplo: A = [ 1, 2, 3] B = [ 1 2 3 ; 4 5 6] Vectores e Matrizes Todas as linguagens de programação de alto nível permitem a especificação de estruturas para agrupar dados do mesmo tipo. Em geral, os dados destas estruturas estão organizados em uma ou mais dimensões. Em Octave apenas se podem utilizar, como “primitivas”, estruturas uni-dimensionais (Vectores) e bi-dimensionais (Matrizes). Vectores, Gráficos e Funções - Trajectória de um Projéctil

  5. Vectores e Matrizes As linguagens compiladas requerem em geral que os vectores e as matrizes sejam declarados antes de utilizados (definindo o tamanho das várias dimensões). Tal não é estritamente necessário em Octave (!) que vai alocando espaço de memória à medida que novos elementos são introduzidos. Notar no entanto que: • Esta flexibilidade tem como custo a maior lentidão de execução. • Em execuções sucessivas do mesmo programa, pode-se dar o caso da estrutura manter uma dimensão (anterior), maior do que a pretendida na execução corrente. Vectores, Gráficos e Funções - Trajectória de um Projéctil

  6. Vectores e Matrizes Desta forma, é conveniente inicializar os vectores utilizados num programa, sempre que se conheçam as suas dimensões e tamanho de cada dimensão. Em Octave, a inicialização pode ser feita por operações de “construção” de vectores e matrizes, indicadas através de parênteses rectos (Ex: A=[], B=[1, 2; 3, 4]). Em Octave, podem-se ainda inicializar vectores através das instruções eye, zeros ou ones que inicializam matrizes identidade, ou preenchidas com zeros e uns, respectivamente. Alguns exemplos: A = eye(2) B = zeros(3,1) C = ones (2,3) Vectores, Gráficos e Funções - Trajectória de um Projéctil

  7. Vectores e Matrizes Um elemento de uma matriz é referido, indicando-se a ordem desse elemento em cada dimensão. A notação é diferente nas várias linguagens. Em Octave a referência faz-se com parênteses curvos. Por exemplo: x = A(2, 1) % = 4 2ª linha, 1ª coluna O Octave permite endereçar sub-vectores directamente, utilizando o operador : como identificador de todos os elementos de uma dimensão. Por exemplo: L1 = A(1 , : ) ou C2 = A(: , 2 ) 1ª linha, todas as colunas Todas as linhas da 2ª coluna, Vectores, Gráficos e Funções - Trajectória de um Projéctil

  8. i  1; enquanto i < imax fazer A(i)  ... ...... i  i + 1; fim enquanto; No caso de vectores unidimensionais, tal pode ser feito num único ciclo enquanto Vectores e Matrizes : Ciclos Para efeito de endereçamento é vulgar utilizar índices (i, j, k, ...) que indicam a posição nas respectivas dimensões. Variando estes índices pode variar-se o elemento do vector que é referido. É muito frequente pretender-se num programa “varrer” todos os elementos de um vector, isto é, percorrê-los por ordem crescente do(s) seu(s) índice(s). Vectores, Gráficos e Funções - Trajectória de um Projéctil

  9. Ciclos Para Para evitar a necessidade de inicializar um índice e de ir procedendo ao seu incremento dentro do ciclo enquanto, todas as linguagens de programação prevêem um ciclo para que elimina essa necessidade. para i de 1 a imax fazer A(i)  ... ...... fim para; i  1; enquanto i < imax fazer A(i)  ... ...... i  i + 1; fim enquanto; Notas: • É necessário conhecer imax, o tamanho máximo da dimensão i. • Assume-se que o primeiro elemento tem índice 1 (obrigatório em OCTAVE) Vectores, Gráficos e Funções - Trajectória de um Projéctil

  10. Alterações ao Algoritmo O algoritmo para simulação da trajectória de um projéctil pode ser decomposto em 3 “componentes” 1. Inicialização de Variáveis 2. Ciclo de Simulação da Trajectória 3. Apresentação de Resultados O Ciclo de Simulação da Trajectória tem que ser alterado de modo a guardar num vector os valores da trajectória calculados. Na Apresentação de Resultados têm que ser adicionadas instruções para mostrar o gráfico da trajectória. Vectores, Gráficos e Funções - Trajectória de um Projéctil

  11. Ciclo de Simulação • Para guardar todos os pontos calculados da trajectória são necessários dois vectores, X e Y, e um índice i que indica a posição do último elemento. • Ambos os vectores são inicializados com o primeiro ponto da trajectória e o valor de i é inicializado a 1 porque de início apenas existe o primeiro ponto. • Por cada novo ponto: i é incrementado, e os novos valores de x e y são colocados na posição i dos respectivos vectores. • O valor da altura máxima pode agora ser calculado apenas no fim do ciclo, uma vez que se guardaram todos os valores de y no vector Y. X [0]; Y [y0];i 1; x 0; yy0; enquanto y > 0 fazer xx + dx; yx*tan()-(g*x^2)/ (2*v0^2*cos()^2)+y0; hmax max(hmax,y); fim enquanto enquanto Y(i) > 0 fazer ii+1; X(i)X(i-1) + dx; Y(i)X(i)*tan()-(g*X(i)^2)/ (2*v0^2*cos()^2)+y0; fim enquanto hmax max(Y); Vectores, Gráficos e Funções - Trajectória de um Projéctil

  12. Apresentação dos Resultados • Agora, além de se mostrar os valores da distância e altura máximas, tem que ser apresentado o gráfico da trajectória. • Como deixou de existir a variável x, a distancia máxima corresponde agora ao último elemento do vector X. • As instruções para mostrar a distância e altura máximas mantêm-se. • Em pseudo-código, um gráfico pode ser representado por uma instrução Gráfico(X,Y), que terá de ser particularizada para uma qualquer linguagem através das primitivas disponibilizadas nessa linguagem (Octave: plot(X,Y)). dmaxX(i); dmaxx; Sai dmax; Sai hmax; Sai dmax; Sai hmax; Gráfico(X,Y); Vectores, Gráficos e Funções - Trajectória de um Projéctil

  13. % Inicialização de Variáveis g 9.8; % aceleração da gravidade Entra y0; % altura inicial Entra v0; % velocidade inicial Entra ; % ângulo inicial Entra dx; % precisão dmax 0; % distância máxima da trajectória hmax 0; % altura máxima da trajectória % Ciclo de Simulação X [0]; Y [y0];i 1; enquanto Y(i) > 0 fazer ii+1; X(i)X(i-1) + dx; Y(i)X(i)*tan()-(g*X(i)^2)/(2*v0^2*cos()^2)+y0; fim enquanto % Apresentação de Resultados hmax max(Y); dmaxX(i); Sai dmax; Sai hmax; Gráfico(X,Y); Algoritmo Completo Vectores, Gráficos e Funções - Trajectória de um Projéctil

  14. % Inicialização de Variáveis g = 9.8; % aceleração da gravidade y0 = input(" Qual a altura inicial (m)? "); v0 = input(" Qual a velocidade inicial (m/s)? "); tet = input(" Qual o angulo inicial (rad)? "); dx = input(" Qual a precisao (m)? "); dmax = 0; % distância máxima da trajectória hmax = 0; % altura máxima da trajectória % Ciclo de Simulação X = [0]; Y = [y0]; i = 1; while Y(i) > 0 i = i+1; X(i)=X(i-1) + dx; Y(i)=X(i)*tan(tet)-(g*X(i)^2)/(2*v0^2*cos(tet)^2)+y0; endwhile % Apresentação de Resultados hmax = max(Y); dmax = X(i);disp("Distância maxima da trajectoria (m):"); disp(dmax); disp("Altura maxima da trajectoria (m):"); disp(hmax); plot(X,Y); Programa Octave Vectores, Gráficos e Funções - Trajectória de um Projéctil

  15. Funções • Em geral, as linguagens de programação, além de oferecerem funções prédefinidas (ex: sqrt(x), cos(x),…) permitem que o programador defina as suas próprias funções. • A ideia é abstrair numa função (com nome, inputs e outputs) todos os procedimentos necessários para calcular os resultados pretendidos, isto é, calcular os outputs a partir dos inputs. • Esta forma de proceder, tem muitas vantagens, já que permite: • Estruturar um programa em componentes básicos; • Reutilizar esses componentes básicos noutros programas. Vectores, Gráficos e Funções - Trajectória de um Projéctil

  16. Entrada x, y0, v0,  Resultados y f maximos Entrada y0, v0,  , dx Resultados dmax, hmax Funções • No exemplo da trajectória de um projéctil, o cálculo do valor de y correspondente a cada valor de x pode ser abstraído numa função f responsável por executar esses cálculos correctamente. • E, se quisermos, todo o cálculo da altura e distância máximas de uma trajectória pode ser abstraído numa função maximos que por sua vez utiliza a função f. Vectores, Gráficos e Funções - Trajectória de um Projéctil

  17. Funções e Passagem de Parâmetros • Em muitos casos, ao invocar-se uma função pretende-se obter não apenas um mas vários resultados. • Este requisito é tratado diferentemente em diferentes linguagens de programação, dependendo em grande parte da forma como são passados os parâmetros de uma função. • Em OCTAVE, os parâmetros são passados exclusivamente por valor (com uma excepção - nomes de funções). • Isto quer dizer, que ao especificar-se uma variável no parâmetro de uma função a invocar, o que se passa para a função é o valor da variável. • Durante a função, a variável não pode ser alterada no programa que invoca a função! Vectores, Gráficos e Funções - Trajectória de um Projéctil

  18. Passagem de Parâmetros por Valor • Exemplo: Consideremos a função f (que calcula o “dobro”) function v = f(u) v = 2*u endfunction; • Se chamada com o valor x = 5, durante a computação da função, esse valor é duplicado e retornado. • Por exemplo, se invocarmos a função na sequência (pode ser ao terminal) x = 5, y = 7; z = f(x); x, y, z, ... os valores de x e y reportados no terminal são x = 5 , y = 7 e z = 10. Vectores, Gráficos e Funções - Trajectória de um Projéctil

  19. Passagem de Parâmetros por Valor • Exemplo: ...,x = 5;y=7;z = f(x); x, z, ... function v = f(u) v = 2*u; endfunction; A computação da função dofro pode ser assim explicada: • Quando começa a ser executada a função f, são criadas duas novas variáveis, u e v, que são locais à função f. • O valor inicial da variável (local) u é o valor do parâmetro de chamada. Neste caso, é o valor da variável (do programa) x. • A instrução v=2*u apenas envolve as variáveis locais u e v. • Após a execução da função, a variável v, contém o valor a ser retornado ao programa principal. • No programa principa esse valor é atribuído à variável (de programa) z. Vectores, Gráficos e Funções - Trajectória de um Projéctil

  20. Passagem de Parâmetros por Valor • Exemplo: ...,x = 5; y = 7; z = f(x); x, y, z,... function y = f(x) y = 2*x; endfunction; • De notar que as variáveis que aparecem na definição da função são locais a essa função. • Num programa grande, com várias funções, é inevitável que variáveis em funções diferentes tenham o mesmo nome (embora os nomes das variáveis devam ser escolhidos para evitar essas “coincidências”). • Assim, elas podem ter o mesmo nome das variáveis de programa, que não serão confundidas com elas. x = 5 , y = 7e z = 10. Vectores, Gráficos e Funções - Trajectória de um Projéctil

  21. Passagem de Parâmetros por Referência • Outras linguagens (Pascal, C, C++, ...) permitem a passagem de parâmetros por referência, i.e. é passada a referência à variável do programa principal, que pode ser alterada pela função. • Por exemplo se o parâmetro x fosse passado por referência (indicado com uma notação fictícia) ..., x = 5; z = f(x); x, z, ... function y = f(ref x) x = 2*x; y = x; endfunction; os valores de x e y reportados no terminal seriam • x = 10 (sendo passada por referência, a variável x referida na função é a mesma variável que a variável x do programa); e • z = 10 Vectores, Gráficos e Funções - Trajectória de um Projéctil

  22. Funções com Múltiplos Resultados • A passagem de parâmetros por referência permite que uma função (ou procedimento) passe vários valores para o programa que a invocou. Basta passar por referência as variáveis onde esses valores devem ser “colocados”. • O Octave, não suporta passagem de parâmetros por referência. A computação de vários resultados numa função é conseguida pela computação de um vector de resultados. • Por exemplo, se se pretender que a função f, com argumento x, retorne dois valores, f1 e f2, especifica-se a função como function [f1,f2] = f(x) ... f1 = ...; f2 = ...; ... endfunction; Vectores, Gráficos e Funções - Trajectória de um Projéctil

  23. Programas e Funções Octave • Em Octave, os programas e as funções são muito semelhantes aos apresentados em pseudo-código. • No entanto eles devem ser escritos em dois ficheiros m (“m files”) distintos, que devem residir na mesma directoria (a menos que se utilizem instruções de alteração da directoria corrente). • O nome do ficheiro onde uma função é definida deve ter o nome dessa função. • Em geral, uma função de nome “f”, deve ser definida num ficheiro “f.m”. • Por exemplo, a função “altura”, deve estar definida no ficheiro “altura.m”. • De notar que uma função pode ser invocada a partir de qualquer ficheiro e mesmo do terminal. Vectores, Gráficos e Funções - Trajectória de um Projéctil

  24. Programa: trajectoria1 O programa principal, guardado no ficheiro “trajectoria1.m”, chama a função altura para calcular a altura de um ponto da trajectória da trajectória. trajectoria1.m ... % Ciclo de Simulação X = [0]; Y = [y0]; i = 1; while Y(i) > 0 i = i+1; X(i) =X(i-1) + dx; Y(i) =altura(X(i),g,y0,v0,tet); endwhile ... altura.m function y = altura(x,g,y0,v0,tet); y = x*tan(tet)-(g*x^2)/(2*v0^2*cos(tet)^2)+y0; endfunction Vectores, Gráficos e Funções - Trajectória de um Projéctil

  25. Funções: maximos e f • Funções podem chamar funções! • Por exemplo, a função maximos, guardada no ficheiro “maximos.m”, usa a função altura para calcular o valor de y a partir do valor de x, g, y0, v0 e tet. maximos.m function [dmax, hmax]=maximos(y0,v0,tet,dx); X = [0]; Y = [y0]; i = 1; while Y(i) > 0 i = i+1; X(i) =X(i-1) + dx; Y(i) =altura(x,g,y0,v0,tet); endwhile hmax = max(Y); dmax = X(i); plot(X,Y); endfunction Vectores, Gráficos e Funções - Trajectória de um Projéctil

  26. Programa: trajectoria2 Desta forma, o programa principal, guardado no ficheiro “trajectoria2.m”, chama a função maximos para calcular a distância e a altura máxima da trajectória e torna-se muito mais legível (curto). trajectoria2.m % Inicialização de Variáveis y0 = input(" Qual a altura inicial (m)? "); v0 = input(" Qual a velocidade inicial (m/s)? "); tet = input(" Qual o angulo inicial (rad)? "); dx = input(" Qual a precisao (m)? "); % Cálculo dos máximos [dmax, hmax]=maximos(y0,v0,tet,dx); % Apresentação de Resultados disp("Distância maxima da trajectoria (m):"); disp(dmax); disp("Altura maxima da trajectoria (m):"); disp(hmax); Vectores, Gráficos e Funções - Trajectória de um Projéctil

More Related