2009-10-22 7 views
-1

J'avais demandé dans un previous question sur la façon de reproduire an image dans MATLAB. Maintenant, je veux modifier cette image en supprimant le mot "Math" et en le remplaçant par le MathWorks logo.Comment ajouter le logo MathWorks à une image dans MATLAB?

Je n'arrive pas à trouver comment ajouter le logo à la figure et ajuster sa position.

Voici le code que j'ai essayé d'utiliser pour ajouter le logo à la figure:

L = 40*membrane(1,25); 

logoFig = figure('Color',[1 1 1]); 
logoax = axes('CameraPosition', [80.5 50 42.5],... 
    'CameraTarget',[26 26 10], ... 
    'CameraUpVector',[0 0 1], ... 
    'CameraViewAngle',9.5, ... 
    'DataAspectRatio', [1 1 .9],... 
    'Position',[0 0 1 1], ... 
    'Visible','off', ... 
    'XLim',[1 51], ... 
    'YLim',[1 51], ... 
    'ZLim',[-13 40], ... 
    'parent',logoFig); 
s = surface(L, ... 
    'EdgeColor','none', ... 
    'FaceColor',[0.9 0.2 0.2], ... 
    'FaceLighting','phong', ... 
    'AmbientStrength',0.3, ... 
    'DiffuseStrength',0.6, ... 
    'Clipping','off',... 
    'BackFaceLighting','lit', ... 
    'SpecularStrength',1.1, ... 
    'SpecularColorReflectance',1, ... 
    'SpecularExponent',7, ... 
    'Tag','TheMathWorksLogo', ... 
    'parent',logoax); 
l1 = light('Position',[40 100 20], ... 
    'Style','local', ... 
    'Color',[0 0.8 0.8], ... 
    'parent',logoax); 
l2 = light('Position',[.5 -1 .4], ... 
    'Color',[0.8 0.8 0], ... 
    'parent',logoax); 

%http://www.mathworks.com/products/matlab/demos.html?file=/products/demos/shipping/matlab/logo.html 
+5

@izzat: Je suis réticent à vous aider plus car il est probable que vous allez juste supprimer cette question après avoir reçu votre réponse, comme vous l'avez déjà fait. Le but de Stack Overflow n'est pas seulement de répondre * à * vos questions, mais aussi de créer un référentiel d'aide à la programmation pour * autres * à utiliser. Pourquoi devrais-je faire des efforts importants pour afficher une réponse si vous êtes égoïste et ne laissez personne d'autre le lire? – gnovice

+0

je commande pour mettre la 'position' je dois 'voir' où mettre le chiffre désiré que je veux mettre. comment je peux voir'? – izzat

+0

je ne serai pas égoïste – izzat

Répondre

4

Vous semblez avoir beaucoup de mal à comprendre cela. Voici l'image que je suppose que vous voulez générer:

alt text

D'abord, j'ai commencé avec les fonctions heart et I_Heart_Math que j'écrit dans my answer to your other question (qui utilisent arrow.m et myaa.m de The MathWorks File Exchange). J'ai enlevé tout le code en I_Heart_Math qui était lié à tracer le mot "Math" et réduit la taille de la fenêtre de la figure.

Ensuite, j'ai dû générer et tracer le logo de la membrane en forme de L de MATLAB. Dans MATLAB vous pouvez taper logo et il va ouvrir une nouvelle figure avec le logo affiché sur un fond noir. Vous pouvez regarder le code qui génère la figure en tapant type logo dans MATLAB, ou vous pouvez regarder this MathWorks demo page. Le code logo a nécessité quelques modifications. Comme je voulais ajouter le logo à une fenêtre de chiffres déjà existante, j'ai supprimé le code qui créait une nouvelle fenêtre de chiffres. J'ai également modifié quelques propriétés pour les axes de logo: le 'Parent' property a été défini sur la fenêtre de chiffre en cours (GCF), le 'Units' property a été défini sur "pixels" et le 'Position' property a été modifié pour positionner les axes de logo à côté des axes de coeur dans la fenêtre de la figure.

Mettre le tout ensemble, voici le nouveau code I_Heart_MATLAB pour générer l'image ci-dessus:

function I_Heart_MATLAB 

    % Initialize heart plot and adjust figure and axes settings: 

    heart; 
    set(gcf,'Position',[200 200 640 300],'Name','Original image'); 
    offset = get(gca,'CameraPosition')-get(gca,'CameraTarget'); 
    offset = 35.*offset./norm(offset); 
    set(gca,'Position',[65 -9 300 300],'CameraViewAngle',6,... 
     'XLim',[21+offset(1) 70],'YLim',[16+offset(2) 63],... 
     'ZLim',[32 81+offset(3)]); 

    % Create the axes and labels, offsetting them in front of the 
    % heart to give the appearance they are passing through it: 

    arrowStarts = [81 51 51; 51 86 51; 51 51 32]+repmat(offset,3,1); 
    arrowEnds = [21 51 51; 51 16 51; 51 51 81]+repmat(offset,3,1); 
    arrow(arrowStarts,arrowEnds,5,40,40); 
    text('Position',[22 52 48]+offset,'String','x','FontSize',12); 
    text('Position',[50 17 49]+offset,'String','y','FontSize',12); 
    text('Position',[46.5 51 81.5]+offset,'String','z','FontSize',12); 

    % Create the equation text: 

    text('Position',[51 47 28],'FontName','Bookman','FontSize',8,... 
     'HorizontalAlignment','center',... 
     'String',{'(x^2+^9/_4y^2+z^2-1)^3-x^2z^3-^9/_{80}y^2z^3=0'; ... 
       '-3 \leq x,y,z \leq 3'}); 

    % Create the large-type text: 

    hI = text('Position',[4 52 69.5],'String','I',... 
      'FontAngle','italic','FontName','Trebuchet MS',... 
      'FontSize',116,'FontWeight','bold'); 

    % Create and plot the L-shaped membrane logo: 

    logoData = 40*membrane(1,25); 
    logoAxes = axes('Parent',gcf,'Units','pixels',... 
        'Position',[335 21 280 280],... 
        'CameraPosition', [-193.4013 -265.1546 220.4819],... 
        'CameraTarget',[26 26 10],'CameraUpVector',[0 0 1],... 
        'CameraViewAngle',9.5,'DataAspectRatio',[1 1 .9],... 
        'XLim',[1 51],'YLim',[1 51],'ZLim',[-13 40],... 
        'Visible','off'); 
    surface(logoData,'Parent',logoAxes,'EdgeColor','none',... 
      'FaceColor',[0.9 0.2 0.2],'FaceLighting','phong',... 
      'AmbientStrength',0.3,'DiffuseStrength',0.6,... 
      'Clipping','off','BackFaceLighting','lit',... 
      'SpecularStrength',1.1,'SpecularColorReflectance',1,... 
      'SpecularExponent',7); 
    light('Parent',logoAxes,'Position',[40 100 20],'Color',[0 0.8 0.8],... 
     'Style','local'); 
    light('Parent',logoAxes,'Position',[.5 -1 .4],'Color',[0.8 0.8 0]); 

    % Create an anti-aliased version of the figure too (the larger 
    % fonts need some adjustment to do this... not sure why): 

    set(hI,'FontSize',86); 
    myaa; 
    set(hI,'FontSize',116); 
    set(gcf,'Name','Anti-aliased image'); 

end 
+0

comment définir la «position»? est-ce que cela dépend de la coordonnée ou de la grille ou quelque chose? encore flouté ??? – izzat

Questions connexes