Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

Larsi 18. Okt 2008 15:47

Re: Wertebereich von -X bis +X erstellen ?
 
Du willst aber keinen Kexgen erstellen oder? Sieht für mich so aus :mrgreen:

jfheins 18. Okt 2008 15:50

Re: Wertebereich von -X bis +X erstellen ?
 
Ja, was zum Essen :mrgreen:

Erzeugt eine Zufallszahl zwischen -x und x
Code:
        private int MyRandom(int x)
        {
            Result = Random(2 * x + 1) - x;
        }
Achtung - Kompiliert nicht :mrgreen:

turboPASCAL 18. Okt 2008 15:57

Re: Wertebereich von -X bis +X erstellen ?
 
@Larsi,
Doch. :mrgreen: Ich muss nur noch jemanden Überreden eim Programm passend zu meinem Keksgen zu schreiben.


@jfheins Ja, eine Zufallszahl zwischen -x und x. Das ist aner nicht das Problem an sich,
das Loch in der Mitte ist es.

Siehe bildliche Beschreibung in Post #7.

jfheins 18. Okt 2008 16:08

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

Zitat von turboPASCAL
@Larsi,
Doch. :mrgreen: Ich muss nur noch jemanden Überreden eim Programm passend zu meinem Keksgen zu schreiben.

Auja, ein Keksgenerator hätte was :stupid: Dann hab ich auch was zum naschen :mrgreen:

Zitat:

@jfheins Ja, eine Zufallszahl zwischen -x und x. Das ist aner nicht das Problem an sich,
das Loch in der Mitte ist es.

Siehe bildliche Beschreibung in Post #7.
Wie gesagt, meine Funktion erfüllt den Zweck 100%ig. Die Zufallszahlen sind auch gleich verteilt.

Deshalb ja meine Frage, wie du von den Zufallszahlen zu den Punkten kommst ;)

turboPASCAL 18. Okt 2008 17:04

Re: Wertebereich von -X bis +X erstellen ?
 
Achso, so:

Delphi-Quellcode:
procedure some...;
const
  WBMax = 150;
  WBMin = 50;

  function MyRandom(minRange, maxRange: Integer): Integer;
  const
    iSigns: array[0..1] of Integer = (1, -1);
  begin
    Result := (Random(maxRange + 1)) * iSigns[Random(2)];
  end;

begin
  for i := 0 to high(p3d) do
  begin
    p3d[i].X := MyRandom(WBMin, WBMax);
    p3d[i].Y := MyRandom(WBMin, WBMax);
    p3d[i].Z := MyRandom(WBMin, WBMax);
  end;
end;

jfheins 18. Okt 2008 17:10

Re: Wertebereich von -X bis +X erstellen ?
 
Du benutzt aber schon randomize, oder?

Edit: Wenn du gerne eine Kugel aus den Punten haben willst, solltest du in Kugelkoordinaten rechnen, beide Winkel zufällig wählen und den Radius mehr oder weniger zufällig wählen, und das dann in kartesische Koordinaten umrechnen ;)

turboPASCAL 18. Okt 2008 17:17

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

Du benutzt aber schon randomize, oder?
Klar.

Nur wie gesagt ich bekomme immer diesen Gruppeneffekt. Ich muss mir wohl doch das Kugelkoordinatendings antun. :gruebel:

turboPASCAL 29. Okt 2008 11:06

Re: Wertebereich von -X bis +X erstellen ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
:stupid:

(Simmt zwar noch nicht so recht, passt aber)

angos 29. Okt 2008 13:09

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

Zitat von turboPASCAL
Achso, so:

Delphi-Quellcode:
procedure some...;
const
  WBMax = 150;
  WBMin = 50;

  // Berechnet einen Zufallswert zwischen minRange und MaxRange
  // Dieser Wert wird zufällig positiv oder negativ zurückgegeben werden
  function MyRandom(minRange, maxRange: Integer): Integer;
  const
    iSigns: array[0..1] of Integer = (1, -1);
  begin
    // Result := (Random(maxRange + 1)) * iSigns[Random(2)];
    Result := minRange + (Random(maxRange + 1)) * iSigns[Random(2)];
  end;

begin
  for i := 0 to high(p3d) do
  begin
    p3d[i].X := MyRandom(WBMin, WBMax);
    p3d[i].Y := MyRandom(WBMin, WBMax);
    p3d[i].Z := MyRandom(WBMin, WBMax);
  end;
end;

Hast du hier nicht einfach nur das minRange vergessen? :gruebel:

Gruß
Ansgar

PS: Bei deinen Downloads meckert mein Kaspersky: Das angeforderte Objekt ist mit folgenden Viren INFIZIERT: Multi.Packed

turboPASCAL 29. Okt 2008 14:25

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

Hast du hier nicht einfach nur das minRange vergessen?
Nein, nicht direkt.

Genauer müsste die Procedure so aussehen:
Delphi-Quellcode:
function RandomFromTo(minRange, maxRange: Integer): integer;
const
  iSigns: array[0..1] of Integer = (1, -1);
begin
  Result := (minRange + Random((maxRange-minRange) + 1)) * iSigns[Random(2)];
end;
Das bringt aber leider nix da das Resultat eher komisch im Ergebnis wie oben beschrieben ausschaut.

Absolut nicht Perfekt aber Funktionsfähig wie gewünscht wird es zur Zeit so errechnet:
Delphi-Quellcode:
function MyRandom(minRange, maxRange: Integer): TVector_3D;
const
  iSigns: array[0..1] of Integer = (1, -1);
begin
  Result.X := cos((minRange + Random((maxRange) + 1)) * iSigns[Random(2)])*minRange;
  Result.Y := sin((minRange + Random((maxRange) + 1)) * iSigns[Random(2)])*minRange;
  Result.Z := cos((minRange + Random((maxRange) + 1)) * iSigns[Random(2)])*minRange;
end;

PS zum PS.:
Zitat:

PS: Bei deinen Downloads meckert mein Kaspersky: Das angeforderte Objekt ist mit folgenden Viren INFIZIERT: Multi.Packed
Das kann durchaus vorkommen das ein Antivierenprogramm die Exe bemeckert. Sie ist in der Tat gepackt aber VIERENFREI !
Selbst wenn die Datei mit UPX gepackt wird meckert mein AntiVir mit akt. Updates.

Leider bekomme ich auf programiertechnische Weise die App noch nicht kleiner als 120 KB. :cry:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 Uhr.
Seite 2 von 3     12 3      

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