plot3 - "anmalen" < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Ich habe mit Matlab den Einheitswürfel gezeichnet:
x = [0,1,1,0,0,0;1,1,0,0,1,1;1,1,0,0,1,1;0,1,1,0,0,0];
y = [0,0,1,1,0,0;0,1,1,0,0,0;0,1,1,0,1,1;0,0,1,1,1,1];
z = [0,0,0,0,0,1;0,0,0,0,0,1;1,1,1,1,0,1;1,1,1,1,0,1];
plot3(x,y,z)
Jetzt würde ich aber gerne die einige (nicht alle!) Flächen von dem Würfel "anmalen"! geht das?
Also z.B. die Grundfläche blau alles ander bleibt so wie es ist.
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Hallo,
ich denke, am einfachsten wäre das mit der "surface"-Funktion zu bewerkstelligen:
colormap('default');
Grundfläche blau:
surface([0 1], [0 1],[0 0 ;0 0],16);
linke Seitenfläche rot:
surface([0 0], [0 1],[0 1 ;0 1],48);
Mit der Hilfe zu surface und etwas Koordinatenjonglage kommt man leicht zu dem gewünschten Ergebnis.
Gruß
Martin
|
|
|
|
|
Vielen Dank Martina.
Aber ich verstehe das
surface([0 1], [0 1],[0 0 ;0 0],16);
nicht ganz.
was sagt das aus?
das soll doch
surface(x,y,z,c) sein oder?
16 ist die Farbe, das ist mir klar.
Aber was soll der Rest?
Habe jetzt schon alles mögliche versucht, aber es kommt nichts brauchbares dabei heraus.
|
|
|
|
|
Hallo,
das kann wirklich etwas verwirrend wirken, ist aber nicht so schwer:
surface([0 1], [0 1],[0 0 ;0 0],16);
Wir müssen einfach alle Werte für x (1. Argument) mit allen Werten für y (2. Argument) kombinieren und erhalten ein xy-Gitter:
(0,0), (1,0), (0,1), (1,1).
Diesen Gitterpunkten werden nun die z-Werte des dritten Arguments zugewiesen, so dass wir die folgenden 3D-Punkte erhalten:
(0,0,0), (1,0,0), (0,1,0), (1,1,0).
Bei der anderen Fläche heißt es:
[code]surface([0 0], [0 1],[0 1 ;0 1],48);[code]
Also:
(0,0), (0,0), (0,1), (0,1)
Wir erhalten mit den z-Koordinaten:
(0,0,0), (0,0,1), (0,1,0), (0,1,1)
Passt doch zu den eingezeichneten Flächen, oder?
Gruß
Martin
|
|
|
|
|
Danke, das mit dem Würfel und beliebige Flächen anmalen habe ich jetzt verstanden, jetzt habe ich mich an ein "schwierigeres" Objekt gemacht und bin gescheitert!
Ich habe ein dreiseitiges Prisma und möchte den Mantel "anmalen"
A=[0,0,0];
B=[1,0,0];
C=[0,1,0];
D=[0,0,1];
E=[1,0,1];
F=[0,1,1];
M1=[A;B;C]';
M2=[B;C;A]';
M3=[E;F;D]';
M4=[D;E;F]';
x=[M1(1,:);M2(1,:);M3(1,:);M4(1,:)];
y=[M1(2,:);M2(2,:);M3(2,:);M4(2,:)];
z=[M1(3,:);M2(3,:);M3(3,:);M4(3,:)];
plot3(x,y,z,'r')
colormap('default');
surface([1 0],[0 0],[0 0;1 1],16);
surface([0 0],[0 1],[0 1;0 1],16);
doch die letzte seite schaffe ich nicht!!
Bitte um Hilfe!
Danke
|
|
|
|
|
Hallo,
das geht mit
surface([0 1;0 1],[1 0;1 0],[0 0;1 1],16);
Hier geben wir das xy-Gitter explizit vor, während wir es bei den anderen Seiten durch Kombinationen von Vektoren erzeugen konnten (weil jene Seiten senkrecht zu Achsen standen).
Wichtig ist dabei der richtige Umlaufsinn. Du kannst ja mal zur Probe den Code leicht umändern zu:
surface([0 1;1 0],[1 0;0 1],[0 0;1 1],16);
Schon haben wir einen Fehler!
Gruß
Martin
|
|
|
|