AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

C++ Code übersetzen

Ein Thema von mdadali · begonnen am 8. Nov 2022 · letzter Beitrag vom 9. Nov 2022
Antwort Antwort
mdadali

Registriert seit: 10. Feb 2003
Ort: Linz
7 Beiträge
 
Delphi 10.4 Sydney
 
#1

C++ Code übersetzen

  Alt 8. Nov 2022, 13:03
Delphi-Version: 10.4 Sydney
Hallo,

Ich würde gerne folgende C++ Funktion ins Delphi (Objekt Pascal) übersetzen.
Ich hoffe jemand kann mir helfen.
Danke.

C++ Makros ?
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
C++ Funktion:
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;
    }

  }
}
Mustafa
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: C++ Code übersetzen

  Alt 8. Nov 2022, 13:15
.. 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:
 (y>0.0)? GE_PI2 : GE_DEG270;
könnte man am besten mit ifthen oder if then else übersetzen

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
mdadali

Registriert seit: 10. Feb 2003
Ort: Linz
7 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: C++ Code übersetzen

  Alt 8. Nov 2022, 13:30
Danke Klaus.
Ich versuche es mal umzuschreiben.
LG. Mustafa.
Mustafa
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#4

AW: C++ Code übersetzen

  Alt 8. Nov 2022, 15:17
Bei bei der Funktion Delphi-Referenz durchsuchenIfThen aufpassen,
denn hier werden immer alle Parameter ausgewertet,
im Gegensatz zum Makro ?:
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mdadali

Registriert seit: 10. Feb 2003
Ort: Linz
7 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: C++ Code übersetzen

  Alt 8. Nov 2022, 16:11
Danke himitsu.

Ich habe umgeschrieben und es hat leider nicht funktioniert.
Wie Du erwähnt hast, habe ich Macro , warscheinlich fehlerhaft übersetzt.
LG.
Mustafa
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#6

AW: C++ Code übersetzen

  Alt 8. Nov 2022, 16:23
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:
#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;
und nun einfach nach und nach alles ersetzen/tauschen

also
Result := (y > 0.0) ? GE_PI2 : GE_DEG270;
zu
Delphi-Quellcode:
Result := IfThen(y > 0.0, GE_PI2, GE_DEG270);

// oder

if y > 0.0 then
  Result := GE_PI2
else
  Result := GE_DEG270;
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:
if y > 0.0 then
  Result := (3.14159265358979323846 / 2.0)
else
  Result := GE_DEG270;
wobei GE_PI brauchen wir nicht, weil haben wir schon selber was (Delphi-Referenz durchsuchenPI)
Delphi-Quellcode:
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);
Da Y nicht direkt im Result verwendet wird und alles Konstanten zu sein schienen, ist gegen IfThen kaum was Einzuwenden.
z.B. bei IfThen(Y <> 0, irgendwas / Y, 0) 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)

Code:
GE_PI   =  PI
GE_PI2  =  PI/2
GE_PI4  =  PI/4
GE_2PI  =  PI*2

Delphi-Quellcode:
  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
      ...
OK, ich mach mal mit ein paar zusätzlichen ELSE und Result statt Exit weiter.
Delphi-Quellcode:
  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;
Sollten die Werte nicht "ganz" genau stimmen,
dann liegt es vielleicht noch an falschen Typen
und Rundungsproblemen.
-> Single, Double, Extended
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 8. Nov 2022 um 16:43 Uhr)
  Mit Zitat antworten Zitat
mdadali

Registriert seit: 10. Feb 2003
Ort: Linz
7 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: C++ Code übersetzen

  Alt 8. Nov 2022, 22:03
Danke für Deine Mühe himitsu.

Ich werde Deine Code testen.
LG. Mustafa.
Mustafa
  Mit Zitat antworten Zitat
mdadali

Registriert seit: 10. Feb 2003
Ort: Linz
7 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: C++ Code übersetzen

  Alt 8. Nov 2022, 22:10
GE_DEG270 ist

#define GE_DEG270 (GE_PI+GE_PI2) Danke.
Mustafa
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#9

AW: C++ Code übersetzen

  Alt 9. Nov 2022, 00:59
also doch PI * 1.5

(PI + (PI / 2) )
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mdadali

Registriert seit: 10. Feb 2003
Ort: Linz
7 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: C++ Code übersetzen

  Alt 9. Nov 2022, 10:47
Ja genau

Dein Prozedur hat tadellos funktioniert.
HackCAD/CAM kann jetzt auch ESSI-Files als input Format verwenden.
Danke für die Unterstützung (besonders himitsu).
LG. Mustafa.
Miniaturansicht angehängter Grafiken
essi.png  
Mustafa
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz