hallo,
also das sollte deine "isotropie" leisten
du addierst einen 3d zufallsvektor von gewünschter länge und normierst den ergbenisvektor wieder auf länge eins (geht
auch mit Normalize[]).
welcher winkelschrittweite das entpricht muss man noch überlegen.
no = 3000;
step = .05;
un = {1.0, 0.0, 0.0};
vec = Table[{0, 0, 0}, {i, 1, no}];
Do[
{vec[[i]] = un,
un = un + { step*Random[] -
step/2, step*Random[] - step/2, step*Random[] - step/2},
un = un/Sqrt[Plus @@ (un^2)]
},
{i, 1, no}]
SpinShow[Show[
Table[Graphics3D[{AbsoluteThickness[4], RGBColor[1, 0, 0],
Point[vec[[i]]]}, PlotRange -> {{-1, 1}, {-1, 1}, {-1, 1}},
ImageSize -> 400, ViewPoint -> {4, 2, 2}], {i, 1, no}]],
ImageSize -> 400, ViewPoint -> {4, 2, 2}];
grüsse robert
-----Original Message-----
From: Jens Bredenbeck [mailto:j.bredenbeck@XXXXXXX.ch]
Sent: Monday, April 14, 2003 10:28 AM
To: dmug@XXXXXXX.ch
Subject: Rotationsdiffusion
Liebe Liste,
ich möchte eine diffusionsartige Bewegung eines Punktes auf einer
Kugeloberfläche simulieren. Dazu bin ich von einem Ausgangsvektor
un={1,0,0} gestartet und habe mit
Rotate3D[un,step*Random[]-step/2,step*Random[]-step/2,step*Random[]-step/2]
iterativ Rotationen um zufällige Eulerwinkel ausgeführt. Hier ist das
Program:
no = 1000;
step = .1;
un = {1.0, 0.0, 0.0};
vec = Table[{0, 0, 0}, {i, 1, no}];
Do[
{vec[[i]] = un,
un = Rotate3D[un, step*Random[] - step/2, step*Random[] - step/2,
step*Random[] - step/2]
},
{i, 1, no}]
SpinShow[Show[
Table[Graphics3D[{AbsoluteThickness[4], RGBColor[1, 0, 0],
Point[vec[[i]]]}, PlotRange -> {{-1, 1}, {-1, 1}, {-1, 1}},
ImageSize -> 400, ViewPoint -> {4, 2, 2}], {i, 1, no}]],
ImageSize -> 400, ViewPoint -> {4, 2, 2}];
Insbesondere für kleinere Schrittweiten step findet eine schnelle
äquatoriale "Diffusion" statt, aber eine langsame in longitudinaler
Richtung. Ist das ein numerisches Problem oder habe ich bei den Winkeln
etwas verkehrt gemacht? Für grosse Schrittweiten gibt es schnell eine
isotrope Verteilung.
Gruss,
Jens