Cintia:
Oi Ronald,
Sem querer abusar, será que vc poderia me explicar essa parte de código:



claro :)

Aqui eu crio uma figura aleatória, só para aparecer alguma coisa mais interessante no exemplo:



Vou tentar explicar com um pouco de ASCII-art:



Tetsuo
_________________
In fact, people who study design methods without also practicing design are almost always frustrated designers who have no sap in them, who have lost, or never had, the urge to shape things. Such a person will never be able to say anything sensible about "how" to shape things either. (Christopher Alexander)




  1. Cintia
    Offline
    Posts: 103

    Publicado em: 09/04/2009 23:18:44

    Ah, agora que entendi. Essa parte não faz a transformação. São só estas 3 linhas né...

    Quote:

    g.scale((double) size.width / X_RANGE, (double) size.height / Y_RANGE);
    g.translate((double) X_RANGE / 2, (double) Y_RANGE / 2);
    g.scale(1, -1);

    Vc pode me explicar estas?
    Muito obrigada




  1. ronaldtm
    Offline
    Posts: 2299

    Publicado em: 09/04/2009 23:18:44

    Bom deixando a álgebra linear de lado (sim, álgebra linear tem suas utilidades!), vou tentar explicar o efeito causado por cada uma das transformações:



    A função g.scale(dx,dy) faz com que qualquer coordenada usada depois seja multiplicada por (dx,dy), isto é, se você chamar g.scale(2,3), e depois g.drawRect(10,10,15,15), você não vai desenhar um quadrado de 15x15 com o vértice inicial no ponto (10,10), mas sim um quadrado 30x45 com o vértice inicial no ponto (20,30).
    Os parâmetros ((double) size.width / X_RANGE, (double) size.height / Y_RANGE) retornam valores baseados nas dimensões do componente, fazendo com que as coordenadas 'distorcidas' para manter sempre a mesma posição relativa à área do componente.




    De maneira parecida, esta função altera as coordenadas posteriores, porém, não multiplicando, mas sim somando valores.
    Os parâmetros passados fazem com que o ponto origem do gráfico (0,0) seja movido do canto superior esquerdo do componente, para o seu centro.



    É a mesma função da primeira chamada, mas com parâmetros fixos, escolhidos para inverter o eixo y.
    Isso foi feito porque, originalmente, o sistema de coordenadas do objeto Graphics(2D) assume o eixo y como descendente, isto é, aumentando o valor da coordenada y, o ponto 'desce' no plano.
    Para que o comportamento fosse alterado, de forma a ser similar ao de um plano cartesiano 'normal', foi aplicada esta transformação que multiplica sempre a coordenada y por -1, mantendo a coordenada x intacta (*1).



    'Reseta' a matriz de transformação, voltando o sistema de coordenadas ao seu estado original.

    Estas transformações são 'empilhadas', isto é, são cumulativas. duas chamadas a scale() seguidas não 'resetam' o valor anterior, mas sim acrescentam uma multiplicação.
    Como estas transformações interagem e afetam umas às outras é um pouco complicado, e requer certo conhecimento sobre álgebra linear. A ordem com que elas são feitas altera o resultado final, por exemplo.

    Além destas funções, há as funções shear(deforma o desenho com um efeito 'itálico') e rotate(rotaciona o desenho).

    Estas transformações são muito interessantes, mas é muito fácil 'perder o controle' do desenho, se você não souber o que está fazendo :)


    Mais ASCII-art:



    Tetsuo
    _________________
    In fact, people who study design methods without also practicing design are almost always frustrated designers who have no sap in them, who have lost, or never had, the urge to shape things. Such a person will never be able to say anything sensible about "how" to shape things either. (Christopher Alexander)




  1. Cintia
    Offline
    Posts: 103

    i1st Grade Math Worksheets Learn Guitar Tabs Studyofmath Z P Study Of Math F F Study Of Math Study Of Math Study Szh 1 Study Of Math Plano cartesiano em Java 2D - Java Free.org s Cos b1st Grade Math Worksheets Learn Guitar Tabs Studyofmath Z P Study Of Math F F Study Of Math Study Of Math Study Szh 1 Study Of Math Plano cartesiano em Java 2D - Java Free.org f Study Of Math a a Study Of Math j j Math Study Of Math