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

Fläche und Ebene in einem Plot (Tangentialebene)

 

Filalala
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 09.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.08.2012, 22:04     Titel: Fläche und Ebene in einem Plot (Tangentialebene)
  Antworten mit Zitat      
Hallo,

ich habe eine Fläche r=r(u,v) in Parameterdarstellung gegeben und mit Matlab die Tangentialebene berechnet. Müsste mathematisch richtig sein.

Die Tangentialebene habe ich für einen bestimmten Punkt P=P(u,v) berechnet und dann möchte ich sowohl die Fläche, den Punkt als auch die Tangentialebene in einem Plot darstellen.

Leider bekomme ich nicht alles zusammen in einen Plot bzw. es sieht komisch aus und wird nicht richtig dargestellt. Die Fläche und die Ebene einzeln kann ich plotten, beides zusammen sieht sehr komisch aus: die Ebene wird nur als Strich dargestellt und die Fläche ist "gestaucht" und nur noch in der Farbe Rot. Plottet man sie einzeln, ist sie bunt und nicht gestaucht.

Die Tangentialebene wird aufgestellt durch die Parametergleichung:

E=(Aufpunkt P)+r*tu+s*tv, wobei "tu" und "tv" die Tangentenvektoren sind. "r" und "s" sind skalare. Die Ebene wird also durch die beiden Vektoren tu und tv aufgespannt im Punkt P.

Code:

syms u v a b;

% Parameterdarstellung der Fläche
x=exp(b*v).*cos(v)+exp(a*v).*cos(u).*cos(v);
y=exp(b*v).*sin(v)+exp(a*v).*cos(u).*sin(v);
z=exp(a*v).*sin(u);

% Partielle Ableitungen nach "u"
tu_x=diff(x,u);                
tu_y=diff(y,u);
tu_z=diff(z,u);

% Partielle Ableitungen nach "v"
tv_x=diff(x,v);                
tv_y=diff(y,v);
tv_z=diff(z,v);

% Eingabe von Werten für a,b und u,v
a=1;
b=1;
u=pi;
v=pi;

% Berechnung des Punktes, in dem die Tangentialeben liegt
P=[subs(x); subs(y); subs(z)];

% Berechnung der Tangentenvektoren
tu=[subs(tu_x); subs(tu_y); subs(tu_z)]
tv=[subs(tv_x); subs(tv_y); subs(tv_z)]

% Plot der Ebene (Parameterform)
r=0:0.5:10;
s=0:0.5:10;
[R,S]=meshgrid(r,s);
c=P(1,1)+R*tu(1,1)+S*tv(1,1);
d=P(2,1)+R*tu(2,1)+S*tv(2,1);
e=P(3,1)+R*tu(3,1)+S*tv(3,1);
surf(c,d,e)
hold on

% Plot der Fläche
m=-pi:0.1:pi;
n=-pi:0.1:pi;
[M,N]=meshgrid(m,n);
g=exp(b*M).*cos(M)+exp(a*M).*cos(N).*cos(M);
h=exp(b*M).*sin(M)+exp(a*M).*cos(N).*sin(M);
i=exp(a*M).*sin(N);
surf(g,h,i)
hold on

% Plot des Punktes P
Q=[P(1,1) P(2,1) P(3,1)];
plot(Q,'*')

 



Vielleicht weiß jemand, wir ich alles schön darstellen kann?
Die Tangentialebene müsste sich im Punkt P an die Fläche anschmiegen (tangential berühren).

ZUsatzfrage: Wieso wird mein Punkt Q (entspricht P) im plot dreimal dargestellt? Es ist ja nur ein Punkt.

Vielen Dank schonmal!
Private Nachricht senden Benutzer-Profile anzeigen


MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 10.08.2012, 09:06     Titel:
  Antworten mit Zitat      
Hallo,

die Zusatzfrage kann ich schon mal beantworten für den Punkt musst du plot3 (3-dimensional) verwenden.

Grüße, Marc
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 10.08.2012, 09:39     Titel:
  Antworten mit Zitat      
Zu dem anderen Problem: Stelle die Ebene in Koordinatenform dar. Die Parameterform funktioniert auf diese Weise nicht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Filalala
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 09.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2012, 13:10     Titel:
  Antworten mit Zitat      
Vielen Dank für die Antworten!
Das mit dem Punkt werde ich gleich mal ausprobieren.

Weißt du wieso die Darstellung der Ebene in der Parameterform nicht funktioniert?

Ich habe es nicht geschafft die Tangentialebene in einem Rutsch in Koordinatenform darzustellen.
Die allgemeine Gleichung der Tangentialebene ist:
(tu x tv) * (r - r_0)=0 (alles Vektoren)

wobei man für den Vektor "r" einfach die Buchstaben x,y und z setzt und das ganze dann nach z auflöst. "r" ist der Punkt auf der Ebene, den man berechnen kann für u,v . Dann hat man die Ebene in der Form z=.....
Wobei man nicht immer ein z hat, je nachdem welche Werte man für u,v einsetzt (hatte es mal nachgerechnet).

Weißt du zufällig, wie ich die Koordinatenform der Ebene hier erhalten und darstellen kann?
ich hatte es probiert mit einem Code wie ungefähr diesem:
Code:



syms x y z

tu=...
tv=...

r=[1 2 3]   % Punkt auf der Ebene für bestimmte Werte von u,v
r_0=[x y z]

E=cross(tu,tv) *(r - r_0)      

solve(E,z)

 


Das ist jetzt nur fiktiv, funktioniert also in Matlab nicht.
Aber Matlab meckert zB. bei solve(E,z), weil er E nicht gleich Null setzen möchte.

Weiß jemand wie ich die Ebene in Koordinatenform darstellen kann?
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 10.08.2012, 13:21     Titel:
  Antworten mit Zitat      
Ganz kurz der Tipp: Hessesche Normalform (tu x tv) * (r - r_0)=0 nach z (3. Koordinate) auflösen.

Im Folgenden alles Spaltenvektoren:
n= (tu x tv) => -n(3)*z=n(1)*x + n(2)*y - n'*r_0 und dann noch durch -n(3) teilen. Nun x und y eingesetzt und x,y,z an surf übergeben.
Private Nachricht senden Benutzer-Profile anzeigen
 
Filalala
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 09.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2012, 14:16     Titel:
  Antworten mit Zitat      
Danke, aber bevor ich mich ans Probieren begebe:

Bist du sicher, dass deine Umformung n*(r - r_0) = n*r - n*r_0 (alles Vektoren) erlaubt ist? FInde dazu keine Multiplikationsregel für Vektoren


edit:
man kann die Gleichung ja auch anders ausmultiplizieren und nach z auflösen.
Allerdings läuft das ganze auf eine Fallunterscheidung hinaus. Denn wenn n(3) Null ist, gibt es ein Problem bei der Division durch n(3).
Das heißt, wenn n(3) null ist, müsste man z.B. nach x auflösen und dann durch eine andere Komponente dividieren, sofern diese nicht Null ist. Ist diese Komponente auch Null, müsste man die Gleichung nach y auflösen und wieder durch eine andere Komponente von n dividieren.

Mathematisch ist es doch korrekt eine Ebene in den Formen z=...., x=..... oder y=.... darzustellen oder?

Ich probiere mal.
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 10.08.2012, 14:47     Titel:
  Antworten mit Zitat      
Für das Skalarprodukt gilt das Distributivgesetz. Du benötigst keine Fallunterscheidung. Du kannst x,y,-n(3)*z an surf übergeben. Der Fall n(3)=0 führt dann (automatisch) zu einer xy-Ebene.
Private Nachricht senden Benutzer-Profile anzeigen
 
Filalala
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 09.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2012, 16:02     Titel:
  Antworten mit Zitat      
sorry, aber ich habe von Matlab noch nicht so viel Ahnung.
Habe ich das mit dem surfbefehl richtig umgesetzt?

Code:


% Berechnung des Punktes, in dem die Tangentialeben liegt
P=[subs(x); subs(y); subs(z)];

% Berechnung des Normalenvektors
normv=cross(tu,tv);

r=0:0.01:1; % Enspricht dem bisherigen x in diesem Tread
s=0:0.01:1; % Entspricht dem bisherigen y in diesem Tread
[R,S]=meshgrid(r,s);
(-1)*normv(3,1)*W=normv(1,1)*R+normv(2,1)*S-dot(normv,P)
surf((-1)*normv(3,1)*W)
hold on

% W enspricht dem bisherigen z in diesem Tread
 


Matlab gibt dann folgenden Fehlercode aus:
Zitat:

??? Error: File: Tangentialebene3.m Line: 49 Column: 18
The expression to the left of the equals sign is not a valid target for an
assignment.

Error in ==> run at 57
evalin('caller', [s ';']);
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 10.08.2012, 16:10     Titel:
  Antworten mit Zitat      
Das stimmt leider einiges noch nicht. Ich melde mich später nochmal...
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 10.08.2012, 18:06     Titel:
  Antworten mit Zitat      
Erklärungen im Code:

Code:

% Zeichnen einer Ebene über die Koordinatenform - Ansatz, der ohne Fallunterscheidungen
% nach den Koordinaten des Normalenvektors funktioniert

% Richtungsvektoren der Ebene, die sich nach den partiellen Ableitungen von f
% im Punkt r0 ergeben
tu=[-1 2 0]';
tv=[1 0 3]';

% Tangentialbene im Punkt r0
r0=[1 0 0]';

% Normalenvektor der Ebene über das Kreuzprodukt von tu und tv
n=cross(tu,tv);

% -> Es wird implizit im Folgenden eine Transformation in Koordinatenform angenommen <-

% Definitionsbereich der Ebene nach Dimension 1 und 2
% I1
xE=linspace(-2,2,20);
% I2
yE=linspace(-2,2,20);

% Kartesiches Produkt der Intervalle I1 und I2
[KxE, KyE]=meshgrid(xE,yE);

% Zeichnen und Wertebereich bestimmen
zT=n(1)*KxE + n(2)*KyE- n'*r0;
% -n(3)*z=zT (implizite Darstellung nach der 3. Koordinate von n)
fig1=figure;
surf(KxE, KyE, -n(3)*zT)

% Test mit n(3)=0 => z ist beliebig
n(3)=0;
fig2=figure;
surf(KxE, KyE, -n(3)*zT)

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Filalala
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 09.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2012, 17:35     Titel:
  Antworten mit Zitat      
Danke für deine Hilfe!

Allerdings scheint hier nicht alles richtig zu sein, die Ebene wird falsch dargestellt.
Hier mal ein Ausschnitt aus dem Plott mit der eigentlichen Fläche(gelb), der Tangentialebene (grün) und den beiden Vektoren tu und tv (jeweils blau):




Man erkennt, dass die Ebene nicht durch die beiden Vektoren aufgespannt wird, sie liegt senkrecht zu einem der Vektoren. Somit liegt sie auch nicht tagential an der gelben Fläche an.
Wodran kann das liegen?




Hier der gesamte Code. Die beiden Vektoren tu und tv wurden auf die Länge 1 normiert und geplottet.

Code:

syms u v a b;

% Parameterdarstellung der Fläche
x=exp(b*v).*cos(v)+exp(a*v).*cos(u).*cos(v);
y=exp(b*v).*sin(v)+exp(a*v).*cos(u).*sin(v);
z=exp(a*v).*sin(u);

% Partielle Ableitungen nach "u"
tu_x=diff(x,u);                
tu_y=diff(y,u);
tu_z=diff(z,u);

% Partielle Ableitungen nach "v"
tv_x=diff(x,v);                
tv_y=diff(y,v);
tv_z=diff(z,v);

% Eingabe von Werten für a,b und u,v
a=1;
b=1;
u=0;
v=0;

% Berechnung des Punktes, in dem die Tangentialebene liegt
r_0=[subs(x) subs(y) subs(z)]';

% Berechnung der Tangentenvektoren
tu=[subs(tu_x) subs(tu_y) subs(tu_z)]';
tv=[subs(tv_x) subs(tv_y) subs(tv_z)]';

% Berechnung des Normalenvektors
normv=cross(tu,tv);

% Intervalle der Ebene, I1 und I2
xE=linspace(-2,2,20);
yE=linspace(-2,2,20);

% Kartesiches Produkt der Intervalle I1 und I2
[KxE, KyE]=meshgrid(xE,yE);

% Darstellung der Ebene
zT=normv(1)*KxE + normv(2)*KyE- normv'*r_0;
Ebene=surf(KxE, KyE, -normv(3)*zT);
set(Ebene,'FaceLighting','phong','FaceColor',[0 1 0],...
      'AmbientStrength',1.0,'edgecolor','none','FaceAlpha',1.0)
hold on


%  Darstellund der Fläche
m=-pi:0.1:pi;
n=-pi:0.1:pi;
[M,N]=meshgrid(m,n);
g=exp(b*M).*cos(M)+exp(a*M).*cos(N).*cos(M);
h=exp(b*M).*sin(M)+exp(a*M).*cos(N).*sin(M);
i=exp(a*M).*sin(N);
Flaeche=surf(g,h,i);
set(Flaeche,'FaceLighting','phong','FaceColor',[1 1 0],...                  
      'AmbientStrength',1.0,'edgecolor','none','FaceAlpha',0.5)  
hold on


% Normieren des Vektors tu
tu_betrag=sqrt(dot(tu,tu));
tu_normiert=(1/tu_betrag)*tu

% Darstellen des Vektors tu
Vektor_tu=quiver3(r_0(1),r_0(2),r_0(3),tu_normiert(1),tu_normiert(2),tu_normiert(3));
set(Vektor_tu,'color',[0 0 1],'Linewidth',2.5)
hold on

% Normieren des Vektors tv
tv_betrag=sqrt(dot(tv,tv));
tv_normiert=(1/tv_betrag)*tv;

% Darstellen des Vektors tv
Vektor_tv=quiver3(r_0(1),r_0(2),r_0(3),tv_normiert(1),tv_normiert(2),tv_normiert(3));
set(Vektor_tv,'color',[0 0 1],'Linewidth',2.5)
hold on

 


Die von dir aufgestellte Ebenengleichung sollte richtig sein, wenn ich die Hessegleichung anders/ausführlich ausmultipliziere, bekomme ich ebenfalls keine Tangentialebene.
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 11.08.2012, 18:22     Titel:
  Antworten mit Zitat      
Hallo,

ich hatte in der Tat einen Denkfehler. Die implizite Darstellung nach der 3. Koordinate von n war schlicht falsch.

Hier nun eine korrekte Version:

Code:

% Zeichnen einer Ebene über die Koordinatenform

% Richtungsvektoren der Ebene, die sich nach den partiellen Ableitungen von f
% im Punkt r0 ergeben
tu=[-1 2 0]';
tv=[1 0 3]';

% Tangentialbene im Punkt r0
r0=[1 0 0]';

% Normalenvektor der Ebene über das Kreuzprodukt von tu und tv
n=cross(tu,tv);

% -> Es wird implizit im Folgenden eine Transformation in Koordinatenform angenommen <-

% Definitionsbereich der Ebene nach Dimension 1 und 2
% I1
xE=linspace(-2,2,20);
% I2
yE=linspace(-2,2,20);

% Kartesisches Produkt der Intervalle I1 und I2
[KxE, KyE]=meshgrid(xE,yE);

% Zeichnen und Wertebereich bestimmen
zT=(n(1)*KxE + n(2)*KyE - n'*r0)/-n(3);
fig1=figure;
hold on;
surf(KxE, KyE, zT)

% Richtungsvektoren einzeichnen
plot3([r0(1) r0(1)+tu(1)],[r0(2) r0(2)+tu(2)],[r0(3) r0(3)+tu(3)], 'r' ,'LineWidth',4);
plot3([r0(1) r0(1)+tv(1)],[r0(2) r0(2)+tv(2)],[r0(3) r0(3)+tv(3)], 'r' ,'LineWidth',4);

% Test, ob der Punkt die Gleichung erfüllt
n(1)*(r0(1)+tv(1)) + n(2)*(r0(2)+tv(2)) + n(3)*(r0(3)+tv(3)) - n'*r0

hold off;
% % Test mit n(3)=0 => z ist beliebig
% n(3)=0;
% fig2=figure;
% surf(KxE, KyE, -n(3)*zT)
 


Noch was zum Fall n(3)=0. Dies wird bei Funktionen der Form f(x,y)=z nicht eintreten, denn das hieße eine unendlich große Steigung (Betrag des Gradienten).
Solltest du Objekte verwenden, die nicht über Funktionen dargestellt werden können, beispielsweise eine Kugel, musst du tatsächlich über die Parameterform der Ebene gehen. Sollte das der Fall sein, melde dich nochmal.
Private Nachricht senden Benutzer-Profile anzeigen
 
Filalala
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 09.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2012, 20:07     Titel:
  Antworten mit Zitat      
Wenn ich das jetzt in meinem Code einfüge, erhalte ich ein leeres Koordinatensystem und keine Ebene.

Denn für die frei gewählten Werte u=0 und v=0 ist der Normalenvektor normv=[-2 2 0], und somit normv(3)=0. Auch für andere Werte von u und v (z.B. u=pi, v=pi)erhalte ich manchmal eine negative komponente normv(3). Er zeichnet für den Zweiten Fall zwar eine Ebene, aber meine "muschelförmige" FLäche staucht er total komisch zusammen.
u und v sind jeweils im Intervall [-pi;pi] definiert.


Wähle ich z.B. u=-pi/2 und v=pi/2 (normv(3)!=0) dann liegt die Ebene zwar in der von tu und tv aufgespannten Ebene, allerdings stehen tu und tv nicht senkrecht aufeinander.
Sollten sie das nicht eigentlich?

hier das Bild:



Da dies ja gar nicht so schlecht aussieht, würde ich jetzt doch eine Fallunterscheidung ausprobieren. So dass die Ebene wahlweise als z=f(x,y), y=f(x,z) oder x=f(y,z) dargestellt wird, in Abhängigkeit davon, ob normv(1), normv(2) und normv(3) Null sind.
Spricht etwas dagegen?

Hier nochmal der zum Bild passende Code:

Code:

syms u v a b;

% Parameterdarstellung der Fläche
x=exp(b*v).*cos(v)+exp(a*v).*cos(u).*cos(v);
y=exp(b*v).*sin(v)+exp(a*v).*cos(u).*sin(v);
z=exp(a*v).*sin(u);

% Partielle Ableitungen nach "u"
tu_x=diff(x,u);                
tu_y=diff(y,u);
tu_z=diff(z,u);

% Partielle Ableitungen nach "v"
tv_x=diff(x,v);                
tv_y=diff(y,v);
tv_z=diff(z,v);

% Eingabe von Werten für a,b und u,v
a=1;
b=1;
u=-pi/2;
v=pi/2;

% Berechnung des Punktes, in dem die Tangentialeben liegt
r0=[subs(x) subs(y) subs(z)]';

% Berechnung der Tangentenvektoren
tu=[subs(tu_x) subs(tu_y) subs(tu_z)]';
tv=[subs(tv_x) subs(tv_y) subs(tv_z)]';

% Berechnung des Normalenvektors
normv=cross(tu,tv)


% Definitionsbereich der Ebene nach Dimension 1 und 2
% I1
xE=linspace(-10,10,10);
% I2
yE=linspace(-10,10,10);

% Kartesiches Produkt der Intervalle I1 und I2
[KxE, KyE]=meshgrid(xE,yE);

% Zeichnen und Wertebereich bestimmen
zT=(normv(1)*KxE + normv(2)*KyE - normv'*r0)/-normv(3);
Ebene=surf(KxE, KyE, zT);
set(Ebene,'FaceLighting','phong','FaceColor',[0 1 0],...
      'AmbientStrength',1.0,'edgecolor','none','FaceAlpha',0.5)
hold on;


%  Plot der Fläche
m=-pi:0.1:pi;
n=-pi:0.1:pi;
[M,N]=meshgrid(m,n);
g=exp(b*M).*cos(M)+exp(a*M).*cos(N).*cos(M);
h=exp(b*M).*sin(M)+exp(a*M).*cos(N).*sin(M);
i=exp(a*M).*sin(N);
Flaeche=surf(g,h,i);
% set(Flaeche,'FaceLighting','phong','FaceColor',[1 1 0],...   % Einstellungen zu  Farbe,                
%       'AmbientStrength',1.0,'edgecolor','none','FaceAlpha',0.Cool   % Transparenz und Reflexion
% light('Position',[1 0 0],'Style','local');
hold on


plot3([r0(1) r0(1)+tu(1)],[r0(2) r0(2)+tu(2)],[r0(3) r0(3)+tu(3)], 'r' ,'LineWidth',2.5);
plot3([r0(1) r0(1)+tv(1)],[r0(2) r0(2)+tv(2)],[r0(3) r0(3)+tv(3)], 'r' ,'LineWidth',2.5);
 



Zitat:

Noch was zum Fall n(3)=0. Dies wird bei Funktionen der Form f(x,y)=z nicht eintreten, denn das hieße eine unendlich große Steigung (Betrag des Gradienten).
Solltest du Objekte verwenden, die nicht über Funktionen dargestellt werden können, beispielsweise eine Kugel, musst du tatsächlich über die Parameterform der Ebene gehen. Sollte das der Fall sein, melde dich nochmal.


Wie du auf dem Bild erkennen kannst, habe ich eine "muschelförmige" Bildfläche, für die ich ja die Tangentialebene berechnen möchte. In der Aufgabenstellung habe ich die Fläche in Parameterform gegeben (siehe Code, Anfang).
Daher habe ich vermutlich einen kugelähnlichen Fall?

Ich frage mich, wieso ich die Ebene nicht in der Parameterdarstellung darstellen kann (siehe allerersten Post)
Private Nachricht senden Benutzer-Profile anzeigen
 
Filalala
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 09.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2012, 22:07     Titel:
  Antworten mit Zitat      
Meine Fallunterscheidung, scheint nicht zu funktionieren:

Code:

if -normv(3)~=0
   
    xE=linspace(-20,20,200);
    yE=linspace(-20,20,200);
    [KxE, KyE]=meshgrid(xE,yE);

    zT=(normv(1)*KxE + normv(2)*KyE - normv'*r0)/-normv(3);
    surf(KxE, KyE, zT);
    hold on;
     
elseif -normv(2)~=0
       
    xE=linspace(-2,2,20);
    zE=linspace(-2,2,20);
    [KxE, KzE]=meshgrid(xE,zE);

    yT=(normv(1)*KxE + normv(3)*KzE-normv'*r0)/-normv(2);
    surf(KxE, KzE, yT);
    hold on;
           
else
   
    yE=linspace(-2,2,20);
    zE=linspace(-2,2,20);
    [KyE, KzE]=meshgrid(yE,zE);

    xT=( normv(2)*KyE + normv(3)*KzE-normv'*r0)/-normv(1);
    surf(KyE, KzE, xT);
    hold on;

end
 


Wenn man für u oder v pi,-pi oder 0 einsetzt, bekommt man bei normv(3) eine Null anscheinend.
Und dann ist der plot fehlerhaft.

Kann das am Befehl surf liegen?
Bei surf wird doch ein Gitternetz für die x,y-Ebene erstellt. Und dann kann man die z-Koordinate in Abhängigkeit von x und y plotten.

Ich versuche ja bei meinen beiden letzten Fällen die x- bzw y-Koordinate in Abhängigkeit der jeweils anderen zu plotten.
Ich meine mal gelesen zu haben, dass Matlab nur die z-Koordinate in Abhängigkeit der anderen potten kann.
Private Nachricht senden Benutzer-Profile anzeigen
 
Filalala
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 09.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2012, 22:37     Titel:
  Antworten mit Zitat      
Allerletzter Nachtrag für heute:

Wenn man für u ODER v nicht die Werte 0,pi oder -pi verwendet, wird die Ebene in Parameterform auch geplottet (Code im allerersten post).

Obwohl diese Werte im Definitionsbereich der Flächenfunktion liegen.

Paradoxerweise funktioniert es jetzt gerade im Gegensatz zu eben auch für u=0 und v=0 bei mir....

für s und r dann am besten linspace(-2,2,20) und es wird gut dargestellt.
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 - 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.