Roblet®-
Bibliothek
2.3 (10Jan10)

org.roblet.math
Class Robiant

java.lang.Object
  extended byorg.roblet.math.Robiant

public final class Robiant
extends Object

Diese Klasse bietet Funktionen zur Arbeit mit Winkel-Werten in Roboter-Radiant an.  Robiant ist eine Kurzform von Roboter-Radiant.

Winkelangaben in Roboter-Radiant (Robiant) erfolgen mittels ganzahliger Werte unter Ausnutzung des ganzen Wertebereiches des Java™-Typs int.  Jedem int-Wert ist dabei genau ein Robiant zugeordnet und umgekehrt.  Zu jedem Winkel gehört genau ein Robiant.  Zu jedem Robiant gehören unendlich viele Winkel (... = -270 Grad = 90 Grad = 450 Grad = ...).

Zur Vorbeugung von Mißverständnissen:  Winkel-Werte werden nicht in Form von Instanzen dieser Klasse gespeichert, sondern in Variablen des Typs int, und diese Klasse dient nur der Konvertierung und Bearbeitung.

Speicherung

Die Speicherung in ein int erfolgt derart, daß
0 Grad = 0 Radiant = 0x00000000 Robiant
sind.  Weiterhin ist
90 Grad = PI/2 Radiant = 0x40000000 Robiant.
(Grad- und Radiant-Werte in double oder float;  PI = java.lang.Math.PI; 0x... kennzeichnet die hexadezimale Darstellung eines int).

Hier sind weiter Werte aufgelistet:

Grad Radiant Robiant Zu beachten
-270 -3*PI/2 0x40000000
-180 -PI 0x80000000
-90 -PI/2 0xC0000000
-45 -PI/4 0xE0000000
0 0 0x00000000
22,5 PI/8 0x10000000
30 PI/6 0x15555555 Rundung
45 PI/4 0x20000000
60 PI/3 0x2AAAAAAA Rundung
90 PI/2 0x40000000
120 2*PI/3 0x55555555 Rundung
150 5*PI/6 0x6AAAAAAA Rundung
180 PI 0x80000000
270 3*PI/2 0xC0000000
360 2*PI 0x00000000
450 5*PI/2 0x40000000
4500 25*PI 0x80000000

Rundung

Die mit Rundung gekennzeichneten Zeilen geben an, wo bei der Rückwandlung von Roboter-Radiant nach double oder float Rundungsfehler auftreten.  Diese Fehler treten dann nur in der letzten Stelle auf und sind meist völlig irrelevant für die praktische Anwendung.  Viele Anwendungen arbeiten in Grad oft sogar ohne Kommastellen und damit nur auf maximal drei Stellen genau.

Diese Rundung wird nur dann wichtig, wenn man Werte direkt vergleicht.  Dann ergibt sich, daß wegen der Rundung z.B.

 Robiant. rr2dd (Robiant. dd2rr (150)) != 150
 
gilt!

Diskussion

Die Speicherung in int hat folgende Vorteile:

Die Speicherung in int hat mindestens folgende Randerscheinungen:

Notation

Im folgenden sind die Wandlungsfunktionen zur Verdeutlichung farbig gruppiert:
Von/aus Robiant in/nach
double-Grad
float-Grad
double-Radiant
float-Radiant

Mathematische Funktionen

Es gibt zwei Gruppen mathematischer Funktionen.  Die erste ist grundsätzlicher Art und die zweite besteht aus abgeleiteten, in der Praxis häuftig benötigten Funktionen.

1. Gruppe:

2. Gruppe:


Constructor Summary
Robiant()
           
 
Method Summary
static int atan2(int y, int x)
          Berechnung des Argus-Tangens mit Quadrantenberücksichtigung.
static double cos(int rr)
          Berechnung des Cosinus eines Roboter-Radiant.
static int dd2rr(double grad)
          double-degree-to-robot-radiant - Konvertiert double-Grad nach Roboter-Radiant.
static int dr2rr(double rad)
          double-radiant-to-robot-radiant - Konvertiert double-Radiant nach Roboter-Radiant.
static int fd2rr(float grad)
          float-degree-to-robot-radiant - Konvertiert float-Grad nach Roboter-Radiant.
static int fr2rr(float rad)
          float-radiant-to-robot-radiant - Konvertiert float-Radiant nach Roboter-Radiant.
static int rcos(int r, int rr)
          Berechnung des Cosinus eines Roboter-Radiant unter Einbeziehung eines Radius (Amplitude).
static double rr2dd(int rr)
          robot-radiant-to-double-degree - Konvertiert Roboter-Radiant nach double-Grad.
static double rr2dr(int rr)
          robot-radiant-to-double-radiant - Konvertiert Roboter-Radiant nach double-Radiant.
static float rr2fd(int rr)
          robot-radiant-to-float-degree - Konvertiert Roboter-Radiant nach float-Grad.
static float rr2fr(int rr)
          robot-radiant-to-float-radiant - Konvertiert Roboter-Radiant nach float-Radiant.
static int rsin(int r, int rr)
          Berechnung des Sinus eines Roboter-Radiant unter Einbeziehung eines Radius (Amplitude).
static double sin(int rr)
          Berechnung des Sinus eines Roboter-Radiant.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Robiant

public Robiant()
Method Detail

dd2rr

public static int dd2rr(double grad)
double-degree-to-robot-radiant - Konvertiert double-Grad nach Roboter-Radiant.

Achtung:  Aus Gründen des Durchsatzes erfolgt keine Prüfung der übergebenen Werte auf einen sinnvollen Inhalt.  Die übergebenen Werte müssen also im angegebenen Wertebereich liegen.

Die Berechnung erfolgt in der Form:

 (int) ((grad / -180.0) * 0x80000000)
 

Parameters:
grad - Zu konvertierender Wert in Grad.  Er muß im Wertebereich -180 Grad <= grad < 180 Grad liegen.
Returns:
Entsprechender Robiant-Wert
See Also:
rr2dd(int)

rr2dd

public static double rr2dd(int rr)
robot-radiant-to-double-degree - Konvertiert Roboter-Radiant nach double-Grad.

Die Berechnung erfolgt in der Form:

 (rr / ((double) 0x80000000)) * -180.0
 

Parameters:
rr - Zu konvertierender Wert in Roboter-Radiant.
Returns:
Entsprechender double-Grad-Wert.
See Also:
dd2rr(double)

fd2rr

public static int fd2rr(float grad)
float-degree-to-robot-radiant - Konvertiert float-Grad nach Roboter-Radiant.

Achtung:  Aus Gründen des Durchsatzes erfolgt keine Prüfung der übergebenen Werte auf einen sinnvollen Inhalt.  Die übergebenen Werte müssen also im angegebenen Wertebereich liegen.

Die Berechnung erfolgt in der Form:

 (int) ((grad / -180f) * 0x80000000)
 

Parameters:
grad - Zu konvertierender Wert in Grad.  Er muß im Wertebereich -180 Grad <= grad < 180 Grad liegen.
Returns:
Entsprechender Robiant-Wert
See Also:
rr2fd(int)

rr2fd

public static float rr2fd(int rr)
robot-radiant-to-float-degree - Konvertiert Roboter-Radiant nach float-Grad.

Die Berechnung erfolgt in der Form:

 (rr / ((float) 0x80000000)) * -180f
 

Parameters:
rr - Zu konvertierender Wert in Roboter-Radiant.
Returns:
Entsprechender float-Grad-Wert.
See Also:
fd2rr(float)

dr2rr

public static int dr2rr(double rad)
double-radiant-to-robot-radiant - Konvertiert double-Radiant nach Roboter-Radiant.

Achtung:  Aus Gründen des Durchsatzes erfolgt keine Prüfung der übergebenen Werte auf einen sinnvollen Inhalt.  Die übergebenen Werte müssen also im angegebenen Wertebereich liegen.

Die Berechnung erfolgt in der Form:

 (int) ((rad / -Math.PI) * 0x80000000)
 

Parameters:
rad - Zu konvertierender Wert in Radiant.  Er muß im Wertebereich -PI Radiant <= rad < PI Radiant liegen.
Returns:
Entsprechender Robiant-Wert
See Also:
rr2dr(int)

rr2dr

public static double rr2dr(int rr)
robot-radiant-to-double-radiant - Konvertiert Roboter-Radiant nach double-Radiant.

Die Berechnung erfolgt in der Form:

 (rr / ((double) 0x80000000)) * -Math.PI
 

Parameters:
rr - Zu konvertierender Wert in Roboter-Radiant.
Returns:
Entsprechender double-Radiant-Wert.
See Also:
dr2rr(double)

fr2rr

public static int fr2rr(float rad)
float-radiant-to-robot-radiant - Konvertiert float-Radiant nach Roboter-Radiant.

Achtung:  Aus Gründen des Durchsatzes erfolgt keine Prüfung der übergebenen Werte auf einen sinnvollen Inhalt.  Die übergebenen Werte müssen also im angegebenen Wertebereich liegen.

Die Berechnung erfolgt in der Form:

 (int) ((rad / -Math.PI) * 0x80000000)
 

Parameters:
rad - Zu konvertierender Wert in Radiant.  Er muß im Wertebereich -PI Radiant <= rad < PI Radiant liegen.
Returns:
Entsprechender Robiant-Wert
See Also:
rr2fr(int)

rr2fr

public static float rr2fr(int rr)
robot-radiant-to-float-radiant - Konvertiert Roboter-Radiant nach float-Radiant.

Die Berechnung erfolgt in der Form:

 (float) ((rr / ((float) 0x80000000)) * -Math.PI)
 

Parameters:
rr - Zu konvertierender Wert in Roboter-Radiant.
Returns:
Entsprechender float-Radiant-Wert.
See Also:
fr2rr(float)

atan2

public static int atan2(int y,
                        int x)
Berechnung des Argus-Tangens mit Quadrantenberücksichtigung.

Parameters:
y - y-Wert für die Berechnung
x - x-Wert für die Berechnung
Returns:
Roboter-Radiant-Wert des atan2 der Parameter
See Also:
cos(int), sin(int)

cos

public static double cos(int rr)
Berechnung des Cosinus eines Roboter-Radiant.

Parameters:
rr - Roboter-Radiant-Wert für die Cosinus-Berechnung
Returns:
Cosinus vom Winkel
See Also:
atan2(int,int), sin(int)

sin

public static double sin(int rr)
Berechnung des Sinus eines Roboter-Radiant.

Parameters:
rr - Roboter-Radiant-Wert für die Sinus-Berechnung
Returns:
Sinus vom Winkel
See Also:
atan2(int,int), cos(int)

rcos

public static int rcos(int r,
                       int rr)
Berechnung des Cosinus eines Roboter-Radiant unter Einbeziehung eines Radius (Amplitude).

Parameters:
r - Radius-Wert, mit dem der Cosinus abschließend multipliziert wird
rr - Roboter-Radiant-Wert für die Cosinus-Berechnung
Returns:
Mit dem Radius multiplizierter Cosinus vom Winkel
See Also:
rsin(int,int), cos(int)

rsin

public static int rsin(int r,
                       int rr)
Berechnung des Sinus eines Roboter-Radiant unter Einbeziehung eines Radius (Amplitude).

Parameters:
r - Radius-Wert, mit dem der Sinus abschließend multipliziert wird
rr - Roboter-Radiant-Wert für die Sinus-Berechnung
Returns:
Mit dem Radius multiplizierter Sinus vom Winkel
See Also:
rcos(int,int), sin(int)

Roblet®-Bibliothek 2.3 (10Jan10)

Copyright © 2002-2010, roblet®.org, Hagen Stanek, http://roblet.org