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

2D-Kurve als Rotationskörper darstellen

 

Gerald

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2008, 14:22     Titel: 2D-Kurve als Rotationskörper darstellen
  Antworten mit Zitat      
Hi,

ich habe folgendes Problem, ich möchte einen Kurvenverlauf den ich durch Messwerte aufgenommen habe, im 3D-Raum als drehkörper darstellen.
was ich bis jetzt hinbekommen habe, ist das ich ihn als matrix plotte, aber dadurch wird eher eckig und nicht rund,....

kann mir jemand sagen wie das geht?

danke gruß Gerald


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 10.04.2008, 15:53     Titel:
  Antworten mit Zitat      
Hallo Gerald,

schau mal unter cylinder. Da steht auch dieses Beispiel:

Code:
t = 0:pi/10:2*pi;
[X,Y,Z] = cylinder(2+cos(t));
surf(X,Y,Z)
axis square


Hilft Dir das weiter?

Herzliche Grüße Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gerald

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2008, 16:45     Titel:
  Antworten mit Zitat      
hi, danke für die schnelle Antwort, aber damit bekomme ich es auch nicht hin.

aussehen sollte es nachher etwa so:

Code:
A=[5,7,15,36,83,168,264,417,567,723,840,940,1010,1050,1060,1066,1058,1035,984,906,807,699,561,370,230,139,67,28,10,5,4,3];
B=[4,7,8,9,23,55,117,230,383,568,733,877,979,1045,1072,1086,1090,1086,1066,1026,945,811,666,509,338,208,111,60,24,11,6.5,5];
C=B'*A;

%3d-Plot
subplot(2,2,[1 3]);
surf(C/10^6);
axis([0 35 0 35 0 1.2]);
xlabel('x-Achse');
ylabel('y-Achse');
zlabel('Leistung in mW');


nur eben rund,....... da das mit A und B dann wohl nicht gehen wird, muss ich eben den mittelwert der beiden nehmen, aber soweit komm ich ja noch gar nicht. falls das mit den messwerten nicht geht reicht mir auch die gaußsche normalverteilung als funktion,...

gruß gerald

Edit by Martin: Habe für dich mal die Code-Formatierung eingebaut Wink Darfst du aber gern auch in Zukunft selbst machen Smile
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 10.04.2008, 17:54     Titel:
  Antworten mit Zitat      
Hallo Gerald,

ich hab wohl Dein Problem noch nicht verstanden. Für mich sieht Deine Graphik sehr schön rund aus (wenn man die figure vergrößert, wird es noch besser). Nur wenn man senkrecht von oben schaut, sieht man das eckige Gitternetz.

Kannst Du noch näher beschreiben, was genau runder sein soll? Möchtest Du eine geglättete Kurve? Oder soll die Figur rotationssymmetrisch sein? Ich steh etwas auf dem Schlauch.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gerald

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2008, 19:49     Titel:
  Antworten mit Zitat      
hi,

ja die grafik soll rotationssymetrisch sein. vielleicht erklär ich kurz was ich damit überhaupt gemessen hab damit man es leichter versteht.
dabei geht es um die intensitätsverteilung eines laserstrahls. ich habe mir allerdings nicht den aufwand gemacht, ihn in der kompletten matrix zu vermessen, so das ich zu jedem x-y wert ein leistungswert habe, sondern bin einfach einmal bei x=0 durch den strahl gefahren und einmal bei y=0 und hab mir jeweils die leistung notiert. so nun stimmt das was ich da rechne natürlich nicht, weil ich die beiden kurven ja in der matrix verrechne, dabei aber ja werte entstehen die so nicht da sind.
drum würde ich jetzt gern einfach den mittelwert der beiden messwertereihen bilden und diesen dann um die leistungsachse rotieren. (stimmt dann zwar auch nicht mit dem realen strahl überein müsste aber deutlich besser ausserhen als meine grafik) das mit dem mittelwert ist ja vorerst mal egal man kann ja auch erst einfach mal eine der beiden messreihen nehmen,...

ich hoff man versteht jetzt wie ich es meine,..

danke gruß gerald
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 11.04.2008, 11:15     Titel:
  Antworten mit Zitat      
Okay, jetzt habe ich's verstanden. Mit cylinder hab ich es aber bis jetzt auch nicht hinbekommen. Wenn es nur um das Aussehen geht, hier ein Beispiel mit Gauss-Kurve:

Code:
x=-3:0.1:3;
y = normpdf(x,0,1);
surf(x,x,y'*y);


Bei normpdf kann man noch mit Mittelwert und Standardabweichung herumspielen. Oh, ich seh grad, dazu braucht man die Statistics Toolbox. Ginge das?

Ich denk noch mal über das eigentliche Problem nach.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 11.04.2008, 13:21     Titel:
  Antworten mit Zitat      
Hi,

für eine Kurve in xy-Ebene und Rotation um die x-Achse hatte ich mal das hier gefunden:
Code:

clear all; clc;

% Punkte in xy-Ebene
px = 1:2:50;
py = 1+sin(log(px));
plot(px,py);

% Rotieren um x-Achse
n=25;
t=(0:n)'*2*pi/n;
figure;
surf(ones(n+1,1)*px,cos(t)*py,sin(t)*py);

% Spline
cs = spline(px,py);
xx = 1:0.5:50;
figure;
plot(xx,ppval(cs,xx));

% Rotieren um x-Achse
n=25;
t=(0:n)'*2*pi/n;
figure;
surf(ones(n+1,1)*xx,cos(t)*ppval(cs,xx),sin(t)*ppval(cs,xx));

Vielleicht kann man das anpassen...
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 11.04.2008, 14:52     Titel:
  Antworten mit Zitat      
Hallo Ihr,

ja klar, das kann man super anpassen. Wär zwar nett, wenn es dafür einen Befehl gäbe, aber mit etwas Mathematik kriegt man es auch selbst hin. Als zu rotierende Kurve hab ich jetzt eine Hälfte der Diagonale von C genommen, aber eine Hälfte von A oder B geht natürlich auch:

Code:
figure(1)
subplot(1,2,1);
% Punkte in xy-Ebene
C=B'*A;
c = diag(C)/1e6; % Diagonale

py = c(17:32)';  % Hälfte
px = (0:15);
plot(px,py);  % Zu rotierende Kurve

% Rotieren um y-Achse
subplot(1,2,2)
n = 15;
theta=(0:n)'*2*pi/n;
surf(cos(theta)*px,sin(theta)*px,ones(n+1,1)*py);


Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gerald

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.04.2008, 17:56     Titel:
  Antworten mit Zitat      
Super! Vielen Dank!
 
Carsten

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2009, 17:51     Titel: Matrix must be square
  Antworten mit Zitat      
Hallo,
ich habe ein ähnliches Problem und habe versucht die Lösung darauf zu übertragen. Aber komischerweise hat es einmal funktioniert und dann nicht mehr.

Code:

px = -55:1:55;
py = kf/(2*ci*(300/d0))*(roh_brst/roh_RG)^0.5*exp(-((1/ci^2)*(px./300)^2));
plot(px,py);

n=25;
t=(0:n)'*2*pi/n;
figure;
surf(ones(n+1,1)*py,cos(t)*px,sin(t)*px);
 


Es kommt jedes mal eine Fehlermeldung, dass meine Matrix nicht quadratisch ist. Kann mir da evtl. jemand helfen?
Danke schon mal im Voraus!
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 27.01.2009, 18:03     Titel:
  Antworten mit Zitat      
Hallo Carsten,

das Beispiel ist leider nicht komplett, es fehlen noch einige Variablen für die Berechnung von py. Kannst Du die (oder typische Beispielwerte) noch angeben?

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Carsten

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2009, 18:21     Titel:
  Antworten mit Zitat      
Ui, dass ging aber schnell!
Also, hier noch mal das Ganze mit ein paar Bsp-Werten.
Code:

ci=0.075;
kf=1;
roh_brst=1.22;
roh_RG=0.24;
d0=10.4;

px = -55:1:55;
py = kf/(2*ci*(300/d0))*(roh_brst/roh_RG)^0.5*exp(-((1/ci^2)*(px./300)^2));
plot(px,py);

n=25;
t=(0:n)'*2*pi/n;
figure;
surf(ones(n+1,1)*py,cos(t)*px,sin(t)*px);


Danke!
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 27.01.2009, 18:58     Titel:
  Antworten mit Zitat      
Hallo Carsten,

es fehlte nur ein Pünktchen:

Code:
py = kf/(2*ci*(300/d0))*(roh_brst/roh_RG)^0.5*exp(-((1/ci^2)*(px./300).^2));
 


Nicht nur * und / sind Matrix-Operatoren, sondern auch ^2. Bei mir klappt es jetzt mit der Rotation.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Carsten

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2009, 19:04     Titel: Danke
  Antworten mit Zitat      
Super, danke!
 
Katsche
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 27.01.09
Wohnort: Bremen
Version: ---
     Beitrag Verfasst am: 28.01.2009, 11:46     Titel:
  Antworten mit Zitat      
Hallo,
noch mal ich (nur diesmal angemeldet).
Das rotieren der ersten Kurve hat ja wunderbar geklappt. Das wollte ich nun auf meine anderen übertragen und da kommt die Fehlermeldung "Conversion to double from sym is not possible",obwohl ich eigentlich nur die Funktionen im Code ausgetauscht habe. Kann mir jemand erklären warum das einmal sym und einmal double ist?
Hab meinen ganzen Code mal als Datei angehängt. Ab Zeile 154!

Gruß und Danke Carsten

wkt_test.m
 Beschreibung:

Download
 Dateiname:  wkt_test.m
 Dateigröße:  7.15 KB
 Heruntergeladen:  1148 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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 - 2024 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.