IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Matlab > Java


Sujet :

MATLAB

  1. #1
    R�dacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    2 110
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 2 110
    Par d�faut Matlab > Java
    Bonjour,

    j'ai trouv� un algorithm de "hill shading" que j'aimerai utiliser.
    Seulement mon application est en java.

    J'ai essay� de traduire l'algorithm mais j'ai du mal a comprendre la syntaxe de matlab.

    Si quelqu'un pouvait m'eclaircir je lui en serais reconnaissant. Je ne demande pas de le traduire en java bien sur mais une explication des divers fonctions ainsi que des lignes comme asp(asp<pi)=asp(asp<pi)+(pi/2); serait bien.

    merci

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
    function h = hillshade(dem,X,Y,varargin)
    % PUPROSE: Calculate hillshade for a digital elevation model (DEM)
    % -------------------------------------------------------------------
    % USAGE: h = hillshade(dem,X,Y,varagin)
    % where: dem is the DEM to calculate hillshade for
    %        X and Y are the DEM coordinate vectors
    %        varargin are parameters options
    %
    % OPTIONS: 
    %        'azimuth'  is the direction of lighting in deg (default 315)
    %        'altitude' is the altitude of the lighting source in
    %                   in degrees above horizontal (default 45)
    %        'zfactor'  is the DEM altitude scaling z-factor (default 1)
    %        'plotit'   creates a simple plot of the hillshade
    %
    % EXAMPLE:
    %       h=hillshade(peaks(50),1:50,1:50,'azimuth',45,'altitude',100,'plotit')
    %       - calculates the hillshade for an example 50x50 peak surface.
    %       - changes the default settings for azimuth and altitude.
    %       - creates an output hillshade plot
     
    % See also: GRADIENT, CART2POL
    %
    % Note: Uses simple unweighted gradient of 4 nearest neighbours for slope
    %       calculation (instead of Horn's method) with ESRIs hillshade
    %       algorithm.
    %
    % Felix Hebeler, Dept. of Geography, University Zurich, February 2007.
    % modified by Andrew Stevens ([email protected]), 5/04/2007
     
    %% configure inputs
    %default parameters
    azimuth=315;
    altitude=45;
    zf=1;
    plotit=0;
     
    %parse inputs
    if isempty(varargin)~=1     % check if any arguments are given
        [m1,n1]=size(varargin);
        opts={'azimuth';'altitude';'zfactor';'plotit'};
        for i=1:n1;             % check which parameters are given
            indi=strcmpi(varargin{i},opts);
            ind=find(indi==1);
            if isempty(ind)~=1
                switch ind
                    case 1
                        azimuth=varargin{i+1};
                    case 2
                        altitude=varargin{i+1};
                    case 3
                        zf=varargin{i+1};
                    case 4
                        plotit=1;
                end
            end
        end
    end
     
    %% Initialize paramaters
    dx=abs(X(2)-X(1));  % get cell spacing in x and y direction
    dy=abs(Y(2)-Y(1));  % from coordinate vectors
     
    % lighting azimuth
    azimuth = 360.0-azimuth+90; %convert to mathematic unit 
    azimuth(azimuth>=360)=azimuth-360;
    azimuth = azimuth * (pi/180); %  convert to radians
     
    %lighting altitude
    altitude = (90-altitude) * (pi/180); % convert to zenith angle in radians
     
    %% calc slope and aspect (radians)
    [fx,fy] = gradient(dem,dx,dy); % uses simple, unweighted gradient of immediate neighbours
    [asp,grad]=cart2pol(fy,fx); % convert to carthesian coordinates
    %grad = grad/d; % multiply w cellsize
    grad=atan(zf*grad); %steepest slope
    % convert asp
    asp(asp<pi)=asp(asp<pi)+(pi/2);
    asp(asp<0)=asp(asp<0)+(2*pi);
     
    %% hillshade calculation
    h = 255.0*( (cos(altitude).*cos(grad) ) + ( sin(altitude).*sin(grad).*cos(azimuth-asp)) ); % ESRIs algorithm
    h(h<0)=0; % set hillshade values to min of 0.
     
    h=setborder(h,1,NaN); % set border cells to NaN
     
    %% plot results if requested
    if plotit==1
        figure
        imagesc(X,Y,h)
        axis image
        set(gca,'ydir','normal')
        colormap(gray)
    end
     
    %% -- Subfunction--------------------------------------------------------------------------
    function grid = setborder(grid,bs,bvalue)
    grid(1:bs,:)=bvalue; %toprows
    grid(size(grid,1)-bs+1:size(grid,1),:)=bvalue; %bottom rows
    grid(:,1:bs)=bvalue; %left cols
    grid(:,size(grid,2)-bs+1:size(grid,2))=bvalue;

  2. #2
    R�dacteur/Mod�rateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance m�catronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Freelance m�catronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par d�faut
    Citation Envoy� par eclesia Voir le message
    asp(asp<pi)=asp(asp<pi)+(pi/2); serait bien.
    C'est de l'indexage logique.

    Par exemple si tu souhaites faire des op�rations uniquement sur les valeurs inf�rieures � 0.5 dans un vecteur contenant des valeurs al�atoires [0 1]

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    asp = rand(1,5)
     
    asp<0.5
     
    asp(asp<0.5)
     
    asp(asp<0.5) = asp(asp<0.5) + 100
    Ce qui donne pour chaque ligne :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    asp =
     
        0.8235    0.6948    0.3171    0.9502    0.0344
     
     
    ans =
     
         0     0     1     0     1
     
     
    ans =
     
        0.3171    0.0344
     
     
    asp =
     
        0.8235    0.6948  100.3171    0.9502  100.0344
    Voir la : Qu'est-ce que l'indexage logique ?

    Dans ton cas ici, la variable pi vaut pi

  3. #3
    R�dacteur/Mod�rateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance m�catronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Freelance m�catronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par d�faut
    Ensuite pour les fonctions, il suffit souvent de chercher dans la documentation : http://www.mathworks.com/access/help.../helpdesk.html

    Elle est assez bien fournie avec � chaque fois des exemples et les algorithmes utilis�s

    Exemple : cart2pol

  4. #4
    R�dacteur/Mod�rateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance m�catronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Freelance m�catronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par d�faut
    Pour la sous fonction setborder, tu devrais lire ceci : http://briot-jerome.developpez.com/m...tricesgestion/ (et plus particuli�rement le chapitre III)

  5. #5
    R�dacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    2 110
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 2 110
    Par d�faut
    Merci, ca m'aide deja pas mal

    une autre question de syntaxe :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    [asp,grad]=cart2pol(fy,fx);
    Comment est ce que ca marche ? qu'est ce que je vais avoir dans les variables asp et grad (quel type surtout).

    Venant du monde Java je suis habitu� a avoir les types des variables ecrit (string, int, double ...) et a n'avoir qu'un seul objet possible en retour d'une fonction.

  6. #6
    Expert confirm�
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par d�faut
    Citation Envoy� par eclesia Voir le message
    une autre question de syntaxe :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    [asp,grad]=cart2pol(fy,fx);
    Comment est ce que ca marche ? qu'est ce que je vais avoir dans les variables asp et grad (quel type surtout).
    Ben pour moi �a me semble plus naturel que java... (j'aime pas java...)

    Il te dit juste que tu auras 2 sorties nomm�es asp et grad.
    Le type sera d�termin� par ce qui se sera pass� dans la fonction cart2pol.

    En regardant l'aide ce sont des doubles a priori, enfin des nombres quoi �a ne va pas plus loin.

    �a transforme les coordonn�es cart�siennes [fy,fx] (bizarre l'ordre invers� y, x d'ailleurs, le choix des noms de variables est �trange) en coordonn�es polaires avec asp l'angle en radian et grad la distance (unit� : la m�me que fx et fy).

  7. #7
    R�dacteur/Mod�rateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance m�catronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Freelance m�catronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par d�faut
    Citation Envoy� par Caro-Line Voir le message
    (bizarre l'ordre invers� y, x d'ailleurs, le choix des noms de variables est �trange)
    C'est g�n�ralement le cas quand on travaille sur des images

    G�n�ralement le rep�re est (ligne,colonne), or l'axe des lignes est verticale, on les associent donc � l'axe des ordonn�es y et l'axe des colonnes est horizontale, donc correspond � l'axe des abscisses x

    Je suis clair ?

  8. #8
    R�dacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    2 110
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 2 110
    Par d�faut
    Citation Envoy� par Dut Voir le message
    C'est g�n�ralement le cas quand on travaille sur des images

    G�n�ralement le rep�re est (ligne,colonne), or l'axe des lignes est verticale, on les associent donc � l'axe des ordonn�es y et l'axe des colonnes est horizontale, donc correspond � l'axe des abscisses x

    Je suis clair ?
    C'est en fait plus compliqu� que ca quand c'est des donn�es cartographique

Discussions similaires

  1. Appel de routine MATLAB depuis Java
    Par habasque dans le forum MATLAB
    R�ponses: 4
    Dernier message: 24/09/2007, 18h56
  2. Matlab et Java
    Par Marcusss dans le forum MATLAB
    R�ponses: 2
    Dernier message: 30/05/2007, 15h55
  3. int�gration de matlab dans java
    Par Invit� dans le forum Langage
    R�ponses: 9
    Dernier message: 07/05/2007, 10h22
  4. Utilliser du code matlab dans Java
    Par Invit� dans le forum MATLAB
    R�ponses: 1
    Dernier message: 06/05/2007, 11h36
  5. MatLab en java
    Par CNoob dans le forum Langages de programmation
    R�ponses: 6
    Dernier message: 08/02/2006, 23h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo