Problem mit For-Schleife < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 17:27 Di 08.03.2011 | Autor: | Leucram |
Aufgabe | 10 xyz-Koordinaten und 10 Radien:
xS = 1:1:10;
yS = 1:1:10;
zS = 1:1:10;
r = 0.5 : 0.1 : 1.4;
10 Halbkugeln sollen daraus geplottet werden (zB x1,y1,z1,r1 zu einer Halbkugelberechnung etc.)
Halbkugelberechnung:
n=6;
theta=linspace(pi,0,n);
phi=linspace(0,pi,n);
x=xS+r*(cos(theta))'*cos(phi); % 6x6 Matrix wird erzeugt
y=yS+r*(cos(theta))'*sin(phi); % 6x6 Matrix wird erzeugt
z=zS+r*sin(theta); % 6x1 Matrix wird erzeugt
Insgesamt wären das 36 xyz Punkte pro Halbkugel, und davon dann 10 Halbkugeln
was herauskommen soll:
Alle zusammengehörenden xyz Koordinaten der Punkte, also eine 360(10x36halbkugeln)x3 Matrix |
Lösungsweg:
eine For-Schleife soll von 1 bis 10 laufen und jeweils dann die xyz Koordinaten ausspucken
Größter Knackpunkt ist es die Matrixdimensionen hinzubekommen
mein jetztiger Stand ist dieser:
xS = 1:1:10;
yS = 1:1:10;
zS = 1:1:10;
r = 0.5 : 0.1 : 1.4;
n=6;
theta=linspace(pi,0,n);
phi=linspace(0,pi,n);
% Zylinderkoordinaten
for k = 1: length(xS)
x=xS(k)+r(k)*(cos(theta))'*cos(phi);
y=yS(k)+r(k)*(cos(theta))'*sin(phi);
z=zS(k)+r(k)*sin(theta);
moundx(k) = reshape(x,36,1); % 36x1 matrix erzeugen
moundy(k) = reshape(y,36,1); % 36x1 matrix erzeugen
moundz = reshape(z,6,1);
moundz1(k) =[moundz;moundz;moundz;moundz;moundz;moundz];
% 36x1 matrix erzeugen, das geht weil sich die 6 z-Koordinaten immer auf eine 6x1 Reihe von xy-Koordinaten bezeihen
end
mounds = [moundx moundy moundz1];
% das wäre dann mein endprodukt als 360x3 Matrix
ABER es klappt bei mir nicht
könnt ihr mir hinweise geben, wie ich die for-schleifen modifizieren muss damit es klappt?
gruß Leucram
|
|
|
|
Hallo Leucram,
> 10 xyz-Koordinaten und 10 Radien:
>
> xS = 1:1:10;
> yS = 1:1:10;
> zS = 1:1:10;
> r = 0.5 : 0.1 : 1.4;
>
> 10 Halbkugeln sollen daraus geplottet werden (zB
> x1,y1,z1,r1 zu einer Halbkugelberechnung etc.)
>
> Halbkugelberechnung:
>
> n=6;
> theta=linspace(pi,0,n);
> phi=linspace(0,pi,n);
> x=xS+r*(cos(theta))'*cos(phi); % 6x6 Matrix wird
> erzeugt
> y=yS+r*(cos(theta))'*sin(phi); % 6x6 Matrix wird
> erzeugt
> z=zS+r*sin(theta); % 6x1 Matrix wird
> erzeugt
>
> Insgesamt wären das 36 xyz Punkte pro Halbkugel, und davon
> dann 10 Halbkugeln
>
> was herauskommen soll:
>
> Alle zusammengehörenden xyz Koordinaten der Punkte, also
> eine 360(10x36halbkugeln)x3 Matrix
> Lösungsweg:
>
> eine For-Schleife soll von 1 bis 10 laufen und jeweils dann
> die xyz Koordinaten ausspucken
>
> Größter Knackpunkt ist es die Matrixdimensionen
> hinzubekommen
> mein jetztiger Stand ist dieser:
>
> xS = 1:1:10;
> yS = 1:1:10;
> zS = 1:1:10;
> r = 0.5 : 0.1 : 1.4;
>
> n=6;
> theta=linspace(pi,0,n);
> phi=linspace(0,pi,n);
> % Zylinderkoordinaten
> for k = 1: length(xS)
> x=xS(k)+r(k)*(cos(theta))'*cos(phi);
> y=yS(k)+r(k)*(cos(theta))'*sin(phi);
> z=zS(k)+r(k)*sin(theta);
> moundx(k) = reshape(x,36,1); % 36x1 matrix
> erzeugen
> moundy(k) = reshape(y,36,1); % 36x1 matrix
> erzeugen
> moundz = reshape(z,6,1);
> moundz1(k)
> =[moundz;moundz;moundz;moundz;moundz;moundz];
>
>
> % 36x1 matrix erzeugen, das geht weil sich die 6
> z-Koordinaten immer auf eine 6x1 Reihe von xy-Koordinaten
> bezeihen
>
> end
>
> mounds = [moundx moundy moundz1];
> % das wäre dann mein endprodukt als 360x3 Matrix
>
>
> ABER es klappt bei mir nicht
>
> könnt ihr mir hinweise geben, wie ich die for-schleifen
> modifizieren muss damit es klappt?
Die Felder moundx, moundy, moundz1 müssen definiert werden.
Dann müssen die Anweisungen modizifiziert werden:
moundx(k, :) = reshape(x,36,1); % 36x1 matrix erzeugen
moundy(k, :) = reshape(y,36,1); % 36x1 matrix erzeugen
moundz = reshape(z,6,1);
moundz1(k, :) =[moundz;moundz;moundz;moundz;moundz;moundz];
Das liefert dann als Endergebnis eine 10 x 108 Matrix.
Ausprobiert habe ich das mit Gnu Octave 3.05.
>
> gruß Leucram
Gruss
MathePower
|
|
|
|