WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

surf-Graphik als eps-Vektorgraphik speichern

 

helmat

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2011, 18:16     Titel: surf-Graphik als eps-Vektorgraphik speichern
  Antworten mit Zitat      
Hallo Matlab-Experten,
ich versuche, eine Graphik per print als eps-Vektorgraphik zu speichern. Das Bild ist mit zahlreichen plot3-Aufrufen und zwei surf-Objekten hergestellt.

Wenn ich die surf-Plots rausnehme, sehe ich in Inkscape eine Vektorgraphik, mit ihnen aber nicht.

Gibt es einen Weg, alles gemeinsam als Vektorgraphik abzuspeichern?

Mit herzlichem Gruß
helmat


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.12.2011, 22:40     Titel: Re: surf-Graphik als eps-Vektorgraphik speichern
  Antworten mit Zitat      
Hallo helmat,

Das Einfügen eines SURFACE-Objekts stellt den Renderer der FIGURE auf OpenGL, falls der RendererMode auf 'auto' gestellt ist (das ist der default Wert). Der OpenGL-Renderer kann aber nur Pixel-Grafiken exportieren. Für Vektorgrafiken benötigst Du den Painters Renderer. Dieser kann aber z.B. keine Transparenzen darstellen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
helmat

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.12.2011, 00:05     Titel:
  Antworten mit Zitat      
Vielen Dank, Jan!

Mit set(f0, 'Renderer','painters') sieht meine Graphik f0 (fast) so aus, wie sie soll.

Zum "fast": Eines der beiden surf-Ofjekte ist eine Halbkugel. Mit etwas kleinerem Radius verläuft darin ein konzentrischer Kreis. Wo der Kreis unsichtbar sein müsste, ist er es überwiegend auch, aber leider nicht überall. Da scheint er unregelmäßig gestrichelt durch.

Wahrscheinlich geht Deine Bemerkung "Dieser [painters] kann aber z.B. keine Transparenzen darstellen" in diese Richtung. Nun möchte ich gerade keine Transparenz. Hast Du dafür noch einen Tipp?

Herzliche Grüße
helmat
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 18.12.2011, 12:47     Titel:
  Antworten mit Zitat      
Hallo helmat,

Dies hört sich nach den Standard-Problemen der Computergrafak an. Dein SURF-Objekt ist nämlich keine Kugel, da sie 1. aus Polygonen zusammengesetzt ist, und 2. diese auch noch als Pixels gerastert werden. Wenn sich zwei Objekte (der Kreis ist wieder ein gepixeltes Polygon) schneiden, hängt es von Rundungseffekten ab, welche Pixel weiter vorne liegen. Dabei rendern OpenGL und ZBuffer geschickter, da sie die Entfernung vom Auge explizit berücksichtigen. Painters dagegen zeichnet die Objekte in der Reihenfolge ihrer Erstellung (siehe UISTACK). Bei sich gegenseitig durchdringenden Objekten ist das natürlich ein Problem...

Wenn Du den relevanten Abschnitt des Codes postest, könnten wir etwas experimentieren.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
helmat

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.12.2011, 17:36     Titel:
  Antworten mit Zitat      
Hallo Jan,
ich habe die Kugel so goß gewählt, dass ihre ebenen Facetten den Kreis nicht durchdringen können.

Hier der Code:
Code:

%http://www.gomatlab.de/viewtopic,p,82348.html#82348
%Graphik soll mit Inkscape als eps-Vektorgraphik weiterverarbeitet werden.
%Transparenzproblem
clear
rad=pi/180;
delete(gcf)                                      %ggfls. figure löschen
clc
%% userpath('C:\Daten\MatlabFun')  % [EDITED: not nice]
f0=figure('position',[100, 0, 580,580], 'color','white','Renderer','painters');
phi=linspace(0,2*pi,50);                                      
x=cos(phi); y=sin(phi);  z=zeros(size(phi));     %Kreis in z=0
plot3(x,y,z,'color','blue');                                      
hold on
phiK=linspace(pi/2,3*pi/2,30);                   %Halbkugel
thetaK=linspace(0,pi,30);
r=1.1;
[PHI,THETA] = meshgrid(phiK,thetaK);
x=r.*sin(THETA).*cos(PHI);
y=r.*sin(THETA).*sin(PHI);
z=r.*cos(THETA);
surf(x,y,z,2*ones(size(x)),'FaceColor',[1 0 0],'EdgeColor',[1 0 0],...
                           'EdgeAlpha',1,'FaceAlpha',1 )
axis equal
view(164,22)
%print(f0);  print(f0,'-dpsc','C:\...')

 


Vielleicht findest Du einen Weg zur Vektorgraphik (auch *.svg käme in Frage), bei dem der Äquator nicht mehr durchscheint.

Vorerst kann ich das nur durch Malen in Inkscape erreichen. Aber dann muss ich auf eine einfache Parametrierbarkeit der Zeichnung verzichten.

Herzliche Grüße
helmat
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 18.12.2011, 18:01     Titel:
  Antworten mit Zitat      
Hallo helmat,

Ja, der Painters renderer scheitert an der überlappenden Tiefe der Objekte.
Hast Du mal den SVG-Export aus den FileExchange-Seiten bei mathworks.com versucht?

Ich habe den "userpath"-befehl in Deinem Code auskommentiert - wenn jemand Deinen Code laufen lassen würde, hätte er danach eventuell einen defekten Matlab PATH.

Code:

clear
delete(gcf)                                      %ggfls. figure löschen
clc
userpath('C:\Daten\MatlabFun')

Diese Zeilen sind in dem code überflüssig, zerstören aber eventuell die aktuelle Arbeit von Nutzern des Forums. Ich würde solche Zeilen grundsätzlich niemals in Funktionen einbauen, da man diese dann nicht mehr ohne weiteres mal so eben zwischen durch nochmal laufen lassen kann.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
helmat

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.12.2011, 19:08     Titel:
  Antworten mit Zitat      
Hallo Jan,
danke für Deine Warnung vor userpath. Werde ich nicht wieder posten.

Ich verstehe plot2svg als Funktion, die ich von matlab.com erst runterladen und installieren müsste. Das wird mir jetzt echt zuviel - bei sowas verbringe ich bei genügend realistischem Pech Stunden.

Ich habe meine Aufgabenstellung etwas umgemodelt, so dass ich sie lösen kann. Das Ergebnis kannst Du unter http://www.hlmths.de/Scilab/Feuilles.pdf besichtigen.

Ich werde mich jetzt in diesem Forum registrieren. Vielleicht hab ich demnächst mal wieder etwas.

Schönen Sonntagabend noch
helmat
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.12.2011, 18:15     Titel:
  Antworten mit Zitat      
Wir haben an den falschen Stellen gesucht. Der Knackpunkt ist:

Man darf die von Matlab erzeugte Datei in Inkscape nicht öffnen, man muss sie importieren. Dann hat's sich ausgerastert.

Und nochmal danke für Eure Hilfe!

HG
helm
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.