Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wertebereich von -X bis +X erstellen ? (https://www.delphipraxis.net/122559-wertebereich-von-x-bis-x-erstellen.html)

jfheins 29. Okt 2008 15:00

Re: Wertebereich von -X bis +X erstellen ?
 
Wie bereits in #9 gesagt: Vegiss bitte dieses "iSigns[Random(2)]" - das bevorzugt die Null und verfälscht daher das Ergebnis. (Die null wird doppelt so oft gezogen wie andere Zahlen da minus null gleich plus null)

Ich weis zwar nicht, inwieweit das dein Ergebnis beinflusst, aber naja ;)

Wenn du willst, kann ich dir auch ne Funktion schreiben, die einen zufälligen Vektor mit dem Betrag r (also zufällige Richtung bei bestimmten betrag) ausspuckt ;)

Oder alternativ zufällige Richtung und Bertag zwischen rmin und rmax ;)

turboPASCAL 29. Okt 2008 15:48

Re: Wertebereich von -X bis +X erstellen ?
 
Wenn du Langeweile hast, kannst du nem altem Man so etwas antun. :mrgreen:

jfheins 29. Okt 2008 16:09

Re: Wertebereich von -X bis +X erstellen ?
 
Okay, dann will ich das mal tun :P

Delphi-Quellcode:
TVector3D = record
  X, Y, Z: Double;
end;

function RandomFromTo(minRange, maxRange: Double): Double;
begin
  Result := Random() * (maxRange - minRange) + minRange;
end; // Random liefert eine Zahl zwischen 0 und 1 ???

function RandomPoint(minRadius, maxRadius: Double): TVector_3D;
const
  PI = 3.1415926535;
var
  r, phi, theta: Double
begin
  r = RandomFromTo(minRadius, maxRadius);
  phi = RandomFromTo(0, 2*PI);
  theta = RandomFromTo(0, PI);

  Result.X = r * sin(theta) * cos(phi);
  Result.Y = r * sin(theta) * sin(phi);
  Result.Z = r * cos(theta);
end;
Da ich kein Delphi hab, Code ohne Compilierbarkeits-garantie ;)

Die Funktion sollte dann entsprechend Punkte ausspucken, deren Betrag in den Grenzen liegt, und eine zufällige Richtung haben.

Das kann man natürlich umso besser sehen, je mehr Punkte du erstellst ;)

Btw.: zum Testen kannst du ja einmal statt -PI eine Null einsetzen, dann sollte es nur eine Halbkugel werden ...

turboPASCAL 29. Okt 2008 17:25

Re: Wertebereich von -X bis +X erstellen ?
 
Zitat:

Zitat von jfheins
Okay, dann will ich das mal tun :P

Hui, nett.

Zitat:

Zitat von jfheins
Code:
[b]const[/b]
  [color=#ff0000]PI[/color] = 3[color=#ff0000][b],[/b][/color]1415926535;

Zu viel C .net ? Pi ist in Delphi definiert. ;)


Zitat:

Zitat von jfheins
Da ich kein Delphi hab, Code ohne Compilierbarkeits-garantie ;)

Och, das wird schon.

Zitat:

Zitat von jfheins
Die Funktion sollte dann entsprechend Punkte ausspucken, deren Betrag in den Grenzen liegt, und eine zufällige Richtung haben.

Eine schöne runde Kugel.

Zitat:

Zitat von jfheins
Das kann man natürlich umso besser sehen, je mehr Punkte du erstellst ;)

Logisch. aber der Rechenaufwand wird grösser was dan beinstarten dauert.

Zitat:

Zitat von jfheins
Btw.: zum Testen kannst du ja einmal statt -PI eine Null einsetzen, dann sollte es nur eine Halbkugel werden ...

Eher ein Ring, gelle. ;)

:thumb:

jfheins 29. Okt 2008 18:07

Re: Wertebereich von -X bis +X erstellen ?
 
Freut mich, geholfen zu haben :)

Es ist aber leider noch ein kleiner Fehler drin:
Laut Wikipedia sollte phi im Intervall 0 bis 2*Pi sein und theta von 0 bis Pi.

Und wenn du dann ein Intervall halbierst sollte tatsächlich eine Halbkugel rauskommen und kein Kreis. Der sollte dann kommen, wenn du theta gleich Pi/4 setzt ... und ein Halbkreis, wenn du stattdessen phi konstant setzt :mrgreen:

Dann stimmts übrigens auch mit dem Bild: http://de.wikipedia.org/w/index.php?...inaten_svg.png ;)

mschaefer 29. Okt 2008 18:09

Re: Wertebereich von -X bis +X erstellen ?
 
Moin, moin,

so dann werfe ich auch mal meine Randomformel in den Thread !

Delphi-Quellcode:
function MyRandom ( High       : integer;  { Oberer Wert (+100) }
                    Shift      : integer;  { Verschiebung (- 50) }
                    n          : Integer;  [ Anzahl             } 
                    MyMemoLines : TStrings  ( Vom Memo nebenan)  )                     )
var
  int  : Integer;
  i    : Integer;

// Generiert eine integer random Nummer zwischen 1..High und verschiebt um Shift
  for i := 1 to n do
  begin
    int := 1 + Random(abs(High) );   // Der 100 Wert würde einen Bereich von 0..99 ergeben, deshalb +1
    int := int + Shift;
    MyMemoLines.add ('n: ' + inttostr(n) + ' Random: '+IntToStr(int) );
  end;
end;
Grüße // Martin

turboPASCAL 3. Nov 2008 21:21

Re: Wertebereich von -X bis +X erstellen ?
 
Bevor ich es vergesse, danke. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:07 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz