Einzelnen Beitrag anzeigen

stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#1

"Making Galaxies" von C++ nach Delphi

  Alt 17. Mär 2011, 18:36
Hallo Leute

Ich habe mir schon länger mal vorgenommen den Code hier
"http://www.gamedev.net/page/resources/_/reference/programming/game-programming/300/making-galaxies-r1337"
in Delphi nach zu bauen... Leider bin ich wohl ein bisschen zu blöd dafür xD

Das hier ist der Orriginal-Code in C++ (müsste glaube C++ sein, ich lasse mich aber gerne korrigieren ^^)

Code:
float fArmAngle = (float)((360 / m_nArms)%360);
float fAngularSpread = 180/(m_nArms*2);

for ( int i = 0; i < nStars; i++ )
{
  float fR = fRandom(0.0, fRadius);
  float fQ = fRandom(0.0, fAngularSpread ) * (rand()&1 ? 1 : -1);
  float fK = 1;

  float fA = (rand() % m_nArms) * fArmAngle;

  float fX = fR * cos( fDeg2Rad * ( fA + fR * fK + fQ ) );
  float fY = fR * sin( fDeg2Rad * ( fA + fR * fK + fQ ) );

  //... draw star at point fX,fY
}

und das habe ich bisher in Delphi gebaut...


Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);

  // Hier Danke nochmal an Uwe Raabe :)
  function FRandom(fStart, fEnd: Extended): Extended;
  begin
    randomize;
    result := fStart + (fEnd - fStart) * Random;
  end;

const
  m_nArms = 3;
  nStars = 2000;
  fRadius = 500;
var
  FArmAngle : Extended;
  FAngularSpread : Extended;
  I: Integer;
  fQ, fK, fR, fA, fX, fY : Extended;
  aBMP : TBitmap;
begin

  aBMP := TBitmap.Create;
  aBMP.Width := 1000;
  aBMP.Height:= 1000;

  FArmAngle := (360 / m_nArms) mod 360;
  FAngularSpread := 180 / (m_nArms * 2);


  for I := 1 to nStars do
  begin
    fR := FRandom(0.0, fRadius);
    fK := 1;

    if random(2)=0 then fQ := FRandom(0.0, fAngularSpread) * 1
    else fQ := FRandom(0.0, fAngularSpread) * -1;

    fA := (Random mod m_nArms) * fArmAngle;
    fX := fR * cos( DegToRad ( fA + fR * fK + fQ ) );
    fY := fR * sin( DegToRad ( fA + fR * fK + fQ ) );

    aBMP.Canvas.Pixels[Round(FX)+ aBMP.Width div 2,Round(FY) + aBMP.Height div 2] := clBlack;
  end;
  aBMP.SaveToFile('C:\Test.bmp');
end;
Leider hänge ich erstmal an den Zeilen

FArmAngle := (360 / m_nArms) mod 360; und
fA := (Random mod m_nArms) * fArmAngle; Und vermutlich findet ihr noch tausend andere Fehler die bei hierbei gemacht habe... ^^
naja, gibt es eine möglichkeit die beiden abgebildeten zuweisungen irgendwie anders zu realisieren?
Oder hat jemand genug C++ erfahrung um das zu erklären?
damit währe mir ja schon viel geholfen
  Mit Zitat antworten Zitat