![]() |
Delphi-Version: 10.4 Sydney
C++ Code übersetzen
Hallo,
Ich würde gerne folgende C++ Funktion ins Delphi (Objekt Pascal) übersetzen. Ich hoffe jemand kann mir helfen. Danke. C++ Makros ?
Delphi-Quellcode:
C++ Funktion:
#define GE_PI 3.14159265358979323846 // 180
#define GE_PI2 (GE_PI / 2.0) // 1,57079632679489661923 90 #define GE_PI4 (GE_PI / 4.0) // 0,785398163397448309615 45 #define GE_2PI (GE_PI+GE_PI) // 6,28318530717958647692 360
Delphi-Quellcode:
//-----------------------------------------------
// Angle from point 0,0 to this point (0..2PI) //----------------------------------------------- double CGePoint::Angle () const { if (x == 0.0) { if (y == 0.0){ return 0.0; } return (y>0.0)? GE_PI2 : GE_DEG270; }else{ if (y == 0.0){ return (x>0.0)? 0.0 : GE_PI; } if (x > 0.0){ if (y > 0.0){ return atan( y / x ); }else{ return atan( y / x ) + GE_2PI; } }else{ return atan( y / x ) + GE_PI; } } } |
AW: C++ Code übersetzen
.. dies sind Konstanten
Delphi-Quellcode:
#define GE_PI 3.14159265358979323846 // 180
#define GE_PI2 (GE_PI / 2.0) // 1,57079632679489661923 90 #define GE_PI4 (GE_PI / 4.0) // 0,785398163397448309615 45 #define GE_2PI (GE_PI+GE_PI) // 6,28318530717958647692 360
Code:
könnte man am besten mit ifthen oder if then else übersetzen
(y>0.0)? GE_PI2 : GE_DEG270;
Grüße Klaus |
AW: C++ Code übersetzen
Danke Klaus.
Ich versuche es mal umzuschreiben. LG. Mustafa. |
AW: C++ Code übersetzen
Bei bei der Funktion
![]() denn hier werden immer alle Parameter ausgewertet, im Gegensatz zum Makro ?: |
AW: C++ Code übersetzen
Danke himitsu.
Ich habe umgeschrieben und es hat leider nicht funktioniert. Wie Du erwähnt hast, habe ich Macro :?, warscheinlich fehlerhaft übersetzt. LG. |
AW: C++ Code übersetzen
Leider weigert sich der Hersteller krankhaft zwanghaft einfache/kurze Makros im Pascal zu implementieren und den Preprozessor haben sie auch vor Jahrzehnten kaputt gemacht,
sonst hätten wir jetzt viele Probleme nicht, bei derartigen Headerübersetzungen.
Delphi-Quellcode:
und nun einfach nach und nach alles ersetzen/tauschen
#define GE_PI 3.14159265358979323846
#define GE_PI2 (GE_PI / 2.0) #define GE_PI4 (GE_PI / 4.0) #define GE_2PI (GE_PI+GE_PI) (y>0.0)? GE_PI2 : GE_DEG270; also
Delphi-Quellcode:
Result := (y > 0.0) ? GE_PI2 : GE_DEG270;
zu
Delphi-Quellcode:
GE_DEG270?
Result := IfThen(y > 0.0, GE_PI2, GE_DEG270);
// oder if y > 0.0 then Result := GE_PI2 else Result := GE_DEG270;
Delphi-Quellcode:
if y > 0.0 then
Result := (GE_PI / 2.0) else Result := GE_DEG270;
Delphi-Quellcode:
if y > 0.0 then
Result := (GE_PI / 2.0) else Result := GE_DEG270;
Delphi-Quellcode:
wobei GE_PI brauchen wir nicht, weil haben wir schon selber was (
if y > 0.0 then
Result := (3.14159265358979323846 / 2.0) else Result := GE_DEG270; ![]()
Delphi-Quellcode:
Da Y nicht direkt im Result verwendet wird und alles Konstanten zu sein schienen, ist gegen IfThen kaum was Einzuwenden.
if y > 0.0 then
Result := PI / 2.0 else Result := GE_DEG270; // oder eben Result := IfThen(y > 0.0, PI / 2.0, GE_DEG270); z.B. bei
Delphi-Quellcode:
würde es knallen, weil "durch Y" immer berechnet wird, selbst wenn Y 0 ist und Division durch 0 ... nja ... Schulwissen. (beim ?-Makro in C++ ginge sowas aber)
IfThen(Y <> 0, irgendwas / Y, 0)
Code:
GE_PI = PI
GE_PI2 = PI/2 GE_PI4 = PI/4 GE_2PI = PI*2
Delphi-Quellcode:
OK, ich mach mal mit ein paar zusätzlichen ELSE und Result statt Exit weiter.
if x = 0 then begin
if y = 0 then Exit(0); Exit(IfThen(y > 0, PI/2, GE_DEG270)); end else if y = 0 then ...
Delphi-Quellcode:
Sollten die Werte nicht "ganz" genau stimmen,
if x = 0 then
if y = 0 then Result := 0 else if y > 0 then //Result := IfThen(y > 0, PI/2, GE_DEG270) Result := PI/2 else Result := GE_DEG270 // DEG270 = PI*1.5 ??? else if y = 0 then if x > 0 then //Result := IfThen(x > 0, 0, PI) Result := 0 else Result := PI else if x > 0 then if y > 0 then Result := atan(y / x) else Result := atan(y / x) + PI*2 else Result := atan(y / x) + PI; dann liegt es vielleicht noch an falschen Typen und Rundungsproblemen. -> Single, Double, Extended |
AW: C++ Code übersetzen
Danke für Deine Mühe himitsu.
Ich werde Deine Code testen. LG. Mustafa. |
AW: C++ Code übersetzen
GE_DEG270 ist
Delphi-Quellcode:
Danke.
#define GE_DEG270 (GE_PI+GE_PI2)
|
AW: C++ Code übersetzen
also doch
Delphi-Quellcode:
:lol:
PI * 1.5
(
Delphi-Quellcode:
)
PI + (PI / 2)
|
AW: C++ Code übersetzen
Liste der Anhänge anzeigen (Anzahl: 1)
Ja genau:-D
Dein Prozedur hat tadellos funktioniert. ![]() Danke für die Unterstützung (besonders himitsu). LG. Mustafa. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:30 Uhr. |
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