Как добавить логотип MathWorks к изображению в MATLAB? - PullRequest
0 голосов
/ 22 октября 2009

Я задавал в предыдущем вопросе о том, как воспроизвести изображение в MATLAB. Теперь я хочу изменить это изображение, удалив слово «Math» и заменив его на MathWorks logo .

У меня проблемы с выяснением, как добавить логотип к фигуре и отрегулировать его положение.

Вот код, который я пытался использовать для добавления логотипа на рисунок:

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

1 Ответ

4 голосов
/ 22 октября 2009

У вас, похоже, много проблем с тем, чтобы понять это. Вот изображение, которое я предполагаю, что вы хотите сгенерировать:

alt text

Сначала я начал с функций heart и I_Heart_Math, которые я разместил в моего ответа на другой ваш вопрос (в котором используются arrow.m и myaa .m из Файловый обмен MathWorks ). Я удалил весь код в I_Heart_Math, связанный с изображением слова «Математика», и уменьшил размер окна рисунка.

Затем мне нужно было сгенерировать и нанести логотип L-образной мембраны MATLAB. В MATLAB вы можете ввести logo, и он откроет новую фигуру с логотипом, отображаемым на черном фоне. Вы можете посмотреть на код, который генерирует фигуру, набрав type logo в MATLAB, или вы можете посмотреть эту демонстрационную страницу MathWorks .

Код logo требует нескольких модификаций. Поскольку я хотел добавить логотип в уже существующее окно рисунка, я удалил код, который создал новое окно рисунка. Я также изменил несколько свойств для осей логотипа: свойство 'Parent' было установлено на текущее окно рисунка ( GCF ), свойство 'Units' было установлено значение «пикселей», а свойство «Положение» было изменено для размещения осей логотипа рядом с осями сердца в окне рисунка.

Собрав все воедино, вот новый код I_Heart_MATLAB для создания изображения выше:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...