Inicialmente este blog foi criado para armazenar algumas dicas e links de UNIX/Linux, OpenVMS, linguagem C, Assembly, TCP/IP e nerdezas afins. No entanto devido ao autor ter abandonado o seu plano de ser um super hacker e dominar o mundo (devido esposa, família, filhos, trabalho), a partir de 2012 este blog tem um tipo de nerdeza mais light (Android, Linux, RetroPie (retrogames), produtividade, e por aí vai). Estas dicas raramente serão criações minhas.

quarta-feira, 19 de novembro de 2008

Frets on Fire

Quando conheci o jogo Guitar Hero fiquei extremamente tentado a comprar um PS2 só para jogá-lo. Depois pensei em encontrar um emulador de PS2, mas os comentários de pessoas que já experimentaram dizem que precisa de um computador possante (e isso eu não tenho). O negócio foi miando... Até que um dia, sem querer acabei conhecendo um jogo chamado Frets on Fire! Minha vida mudou!

O jogo original fica em http://fretsonfire.sourceforge.net.

Como o jogo é open source (feito em python) também existem muitas versões modificadas, com muitos recursos (multiplayer, baixo, bateria...). Um bom lugar para se informar a respeito dessas coisas é em http://fretsonfire.wikidot.com/. Quem tem um computador com uma boa configuração (video off-board, mais de 1GB de RAM, etc.) eu recomendo o FoFix.

E um bom lugar para baixar musicas é em http://fretsonfire.ath.cx/.

quinta-feira, 6 de novembro de 2008

graficos no MATLAB

FONTES DE PESQUISA:
1. Apostila que o professor disponibilizou na xerox.
2. http://mat21.etsii.upm.es/ayudainf/aprendainf/Matlab53/matlab53.pdf

GRÁFICOS BIDIMENSIONAIS



O MATLAB disponibiliza diversos comandos para plotar gráficos bidimensionais. Nesta apresentação iremos abordar as funções mais básicas apresentando-as gradativamente, como um tutorial. Para consultas rápidas o mais adequado é usar o próprio help do MATLAB.


Introdução



Antes de começar vamos rapidamente lembrar de alguns conceitos básicos que serão úteis na construção dos gráficos. A maior parte destes conceitos já foram passados pelos outros colegas.

  • Para preencher uma variável com valores de um limite inferior até um limite superior (formando um matriz linha) usamos a seguinte sintaxe:

    VARIAVEL = [ LIM_INFERIOR : LIM_SUPERIOR ]


    exemplo:


    » X = [ 1 : 5 ]

    X =

    1 2 3 4 5


    Também podemos definir o incremento que queremos, usando a seguinte sintaxe:

    VARIAVEL = [ LIM_INFERIOR : INCREMENTO : LIM_SUPERIOR ]

    exemplo:

    » X = [ 0 : 0.2 : 1 ]

    X =

    0 0.2000 0.4000 0.6000 0.8000 1.0000


  • Por padrão o MATLAB faz sempre a aritmética de matrizes. E muitas vezes nós não queremos este comportamento.

    Por exemplo, imagine uma matriz linha M = [ 1 2 3 4 5 ] e que nós queremos obter uma matriz Q de maneira que cada elemento de Q seja o seu correspondente em M elevado ao quadrado. Ou seja, se temos a matriz

    M = [ 1 2 3 4 5 ]


    Então queremos que obter a matriz


    Q = [ 1 4 9 16 25 ]


    Sabemos que o operador para potenciação é o ^ (circunflexo), só que este operador realiza a potenciação de matrizes, e não é isto que nós queremos.

    Para montar uma matriz que desejamos devemos usar o operador .^ (ponto-circunflexo), desta maneira:


    » Q = M.^2

    Q =

    1 4 9 16 25


    Os operadores precedidos pelo ponto servem também para realizar operações aritméticas entre os elementos que ocupam as mesmas posições em cada matriz (elemento por elemento). Porém este tipo de operação sai do escopo desta apresentação.



    Fazendo Gráficos



  • usando a função plot() - primeiro passo

    Vamos montar um vetor linha para usar como exemplo.

    Y = [ 5 3 7 -1 ];

    Executar plot(Y) produzirá um gráfico cujo eixo das ordenadas terá os elementos de Y, e o eixo das abscissas terá os índices dos elementos de Y. Portanto o gráfico será vários segmentos de reta ligando os pontos (1,5), (2,3), (3,7) e (4,-1).

    Execute agora mesmo no MATLAB e confira!

    » Y = [ 5 3 7 -1];
    » plot(Y)


  • usando a função plot() - um passo a frente

    O tipo de gráfico que vimos é muito deficiente e normalmente não queremos montar algo deste tipo. Vejamos agora algo mais interessante para nós.

    Como primeiro exemplo, vejamos o gráfico da função seno no intervalo [-10;10].

    Primeiramente devemos definir os valores que queremos nas abscissas e em seguida os valores das ordenadas.


    » x = [-10:0.02:10];
    » y = sin(x);


    Repare que na verdade montamos primeiramente uma matriz x e a seguir montamos uma matriz y que contem os senos dos valores correspondentes da matriz x. Para plotar o gráfico basta fazermos plot(x,y).

    Como segundo exemplo agora nós queremos visualizar o gráfico da função (linguagem matemática tradicional)

    f(x) = x3 + 10x2 - x - 8


    E queremos ver o comportamento desta função para valores de x no intervalo [-20;10].

    Como já foi dito, primeiro definimos o intervalo e depois definimos a função. Desta maneira:


    » x = [ -20:10 ];
    » f = x.^3 + 10*x.^2 - x - 8;


    Agora basta executar plot(x,f).

    CURIOSIDADE!
    Como já foi dito por outros colegas, um vetor linha pode representar um polinômio. Portanto a função

    f(x) = x3 + 10x2 - x - 8

    Pode ser descrita através do seguinte vetor no MATLAB:

    » funcao = [ 1 10 -1 -8]

    Desta forma nós podemos plotar um gráfico com o auxílio da função polyval(), desta maneira:

    » funcao = [ 1 10 -1 -8]; % vetor linha que representa um polinomio
    » x = [ -10:10 ]; % intervalo que queremos analisar
    » y = polyval(funcao,x); % y está recebe valores de x aplicados no polinomio
    » plot(x,y) % função sendo plotada


    A descrição formal da sintaxe que utilizamos no plot() é a seguinte:

    plot(valores_das_abscissas, valores_das_ordenadas)


    IMPORTANTE: a função plot() pode fazer muito mais do que é descrito aqui! Isto é apenas uma das muitas maneiras de se usar esta função. Lembre-se: isso é só uma pequena introdução.


  • usando a função fplot() - mais praticidade

    A função plot que vimos na verdade desenha vetores. Sempre que queremos visualizar a curva de uma função usando plot(), temos antes que montar vetores com os valores que queremos plotar. Isso acaba sendo uma situação inconveniente, pois se quisermos analisar o comportamento de uma função em diferentes intervalos, temos que ficar montando vários vetores antes de plotar.

    Para tornar a análise gráfica de funções mais prática, usamos a função fplot(). A sintaxe da função fplot() que iremos utilizar aqui é a seguinte:

    fplot(função, limites)


    Onde função é uma cadeia de caracteres que descreve uma função usando x como variável (NOTA: função também pode ser um arquivo *.m com alguma função escrita na linguagem do MATLAB, porém esta utilização está fora do escopo desta breve introdução). O argumento limites é um vetor de dois elementos onde o primeiro é o menor valor e o segundo é o maior valor que x assumirá nesta função, ou seja, é a definição do intervalo.

    A seguir um pequeno exemplo:

    » fplot('5*x.^3 - 4*x^2 +15*x -5', [ -20 20 ])


    OBS.: que a função está escrita entre 'aspas simples'. Isso é importante, pois é assim que o MATLAB representa strings (cadeias de caracteres).



    GRÁFICOS TRIDIMENSIONAIS



    Apesar das funções com duas variáveis muitas vezes parecerem assustadoras, o seus gráficos geralmente são muito agradáveis de se ver. Vamos então dar uma pequena introdução na construção de gráficos 3D.

  • usando a função plot3() - primeiros gráficos no R3

    A função plot3() é bem parecida com a plot() explicada anteriormente. Só que nós vamos usá-la aqui com a seguinte sintaxe:

    plot3(valores_do_x, valores_do_y, valores_do_z)


    O exemplo a seguir é bem simples e nos dá uma espiral com 3 voltas

    » x = [0 : pi/16 : 6*pi];
    » plot3(sin(x), cos(x), x)


  • usando a função mesh()

    Para desenharmos uma perspectiva tridimensional usamos a função mesh(). Mas antes disso usamos a função meshgrid(), que tem a seguinte sintaxe:

    » [X,Y] = meshgrid(x,y)


    O meshgrid() transforma o domínio especificado pelos vetores x e y em matrizes X e Y, que podem ser usadas para avaliação de funções de duas variáveis e superfícies 3D.

    Uma vez que as matrizes X e Y estejam formadas basta usar a função de duas variáveis com estas matrizes.

    Por exemplo, imagine que queremos analisar a função:

    f(x) = x e-x2 - y2

    para valores de x e y no intervalo [-2;2]. Para isso devemos executar os seguintes comandos:


    » x = [ -2 : 0.2 : 2 ]; % definindo o intervalo
    » y = x;
    » [X,Y] = meshgrid(x,y); % definindo as matrizes usadas no cálculo
    » Z = X .* exp(-X.^2 -Y.^2); % observe que X e Y são maiúsculos


    Desta maneira as matrizes X, Y e Z já estão prontas para nos dar o gráfico em 3 dimensões. Para isso basta usarmos a função mesh(), da seguinte maneira:


    » mesh(X,Y,Z)

  • tags