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 :

Gérer la couleur des points sur une sphère suivant son orientation


Sujet :

MATLAB

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur Photonique
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Photonique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 126
    Points
    126
    Par défaut Gérer la couleur des points sur une sphère suivant son orientation
    Bonjour,

    je cherche à donner un code de couleur à des points sur une sphère suivant qu'ils soient sur la face avant ou arrière.
    Pour mieux comprendre je vous invite à regarder l'image en pièce jointe.

    J'ai un nuage de points sur ma sphère (vous pouvez lancer le code ci-dessous avec la pièce jointe "datas"). Une fois l'orientation de la sphère déterminée
    je souhaite pouvoir affecter la couleur bleue (par exemple) aux points que je ne suis pas censé voir si la sphère est opaque, et rouge à ceux que je peux toujours voir.

    Voici le programme que j'utilise à l'heure actuelle et que je souhaite mettre à jour :
    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
    close all; clear all; clc
     
    R = 100/255; G = 100/205; B = 100/205; RGB = [R G B];
    phi = -2*pi:0.01:2*pi;
     
    M = xlsread('datas.xlsx');
    a = M(1:8:end,1);
    b = M(1:8:end,2);
    c = M(1:8:end,3);
     
    Norm = sqrt(a.^2 + b.^2 + c.^2); %Pour placer les points à la surface
    a = a./Norm;
    b = b./Norm;
    c = c./Norm;
     
    hF = figure('Color','w','Position',[150 250 350 300]);  
    set(gca,'FontSize',18,'Position',[0.17 0.17 0.8 0.9]) 
     
    [X,Y,Z] = sphere(100);
    hL = surf(X,Y,Z,'FaceAlpha',0.25,'FaceColor',RGB,'LineStyle','none',...
                    'FaceLighting','phong','AmbientStrength',0.5,...
                    'DiffuseStrength',0.7,'BackFaceLighting','reverselit');
    axis([-1.1 1.1 -1.1 1.1 -1.1 1.1]); axis vis3d; grid off; hold on
    light('Position',[1 1 1]); axis on
     
    plot3(a,b,c,'or','LineStyle','none','MarkerEdgeColor','r','MarkerFaceColor','r','MarkerSize',4)
    Xlabel('S_{1}','FontSize',18,'Position',[1.4 -0.1 -2.5])
    Ylabel('S_{2}','FontSize',18,'Position',[-0.40 1.8 -2.5])
    Zlabel('S_{3}','FontSize',18,'Position',[-1.6 1.5 -0.25],'rot',0)
     
    plot3(sin(phi),cos(phi),0*phi,'Color','w')
    plot3(0*phi,cos(phi),sin(phi),'Color','w')
    plot3(sin(phi),0*phi,cos(phi),'Color','w')
    plot3([-1 1],[0 0],[0 0],'Color','w')
    plot3([0 0],[-1 1],[0 0],'Color','w')
    plot3([0 0],[0 0],[-1 1],'Color','w')
    Il est facile de trier les points suivant des conditions autour des coordonnées de la sphère, mais la propriété face avant/arrière de la sphère une fois que celle-ci est tournée est plus dure à gérer.

    Merci d'avance pour votre attention
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur Photonique
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Photonique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 126
    Points
    126
    Par défaut
    Personne n'a d'idée ?

    j'ai beaucoup de mal à gérer les notions de caméra sous matlab mais il est peut être possible de définir un plan dans la sphère qui n'est pas "vu" par la caméra et à partir duquel je peux créer des condition de couleurs pour mes points ...

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur Photonique
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Photonique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 126
    Points
    126
    Par défaut
    après plusieurs recherche j'obtiens un résultat pas mal finalement :
    Code :
    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
    n = 500;
    % generate dummy data
    % [x, y, z] = sphere(n); 
    r = ones(n, 1);
    phi = pi*rand(n, 1);
    theta = 2*pi*rand(n, 1);
    x = r.*sin(phi).*cos(theta);
    y = r.*sin(phi).*sin(theta);
    z = r.*cos(phi);
    hf = figure;
    ha = axes;
    hp = scatter3(x(:), y(:), z(:), 20, 'filled');
    axis(ha, 'equal');
     
    ha = get(hp, 'Parent');
    pos = get(ha, 'CameraPosition');
    x = get(hp, 'XData');
    y = get(hp, 'YData');
    z = get(hp, 'ZData');
     
    mask = [x(:), y(:), z(:)]*pos(:) > 0;
    front_color = [1, 0, 0]; % red
    back_color = [0, 0, 1]; % blue
    c(mask, :) = front_color(ones(nnz(mask), 1), :); 
    c(~mask, :) = back_color(ones(nnz(~mask), 1), :);
    set(hp, 'CData', c);
    L'idée est d'interpréter le vecteur de Pointing résultant du produit vectoriel du vecteur de chaque point avec celui de la position de la caméra (formé avec le centre de la sphère).
    Les vecteurs de Pointing sont alors une projection de chaque vecteur-point sur le vecteur de la caméra.
    Etant donné que la caméra est postionnée là où nous regardons, les vecteurs de Pointing pointent soit directement vers nous soit dans le sens opposé.
    Il suffit alors d'imposer une condition "couleur" sur vecteur dont la description est contenue dans la variable mask.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Représenter des points sur une dimension 2D
    Par neshavre dans le forum 2D
    Réponses: 1
    Dernier message: 14/06/2011, 14h11
  2. Relever des points sur une image
    Par PPz78 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 23/01/2011, 07h28
  3. Déplacer un point sur une sphère
    Par Mr21_ dans le forum Mathématiques
    Réponses: 21
    Dernier message: 29/08/2010, 23h51
  4. Perspective régulière et coordonnée d'un point sur une sphère
    Par 66-Machin-99 dans le forum Développement 2D, 3D et Jeux
    Réponses: 9
    Dernier message: 21/05/2010, 16h50
  5. Placer des points sur une image
    Par vallgui dans le forum WinDev
    Réponses: 9
    Dernier message: 22/01/2008, 15h19

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