NAME
Quiq::Math - Mathematische Funktionen
BASE CLASS
METHODS
Konstruktor
new() - Instantiiere Objekt
Synopsis
$m = $class->new;
Returns
Math-Objekt
Description
Instantiiere ein Objekt der Klasse und liefere eine Referenz auf dieses Objekt zurück. Da die Klasse ausschließlich Klassenmethoden enthält, hat das Objekt nur die Funktion, eine abkürzende Aufrufschreibweise zu ermöglichen.
Konstanten
pi() - Liefere PI
Synopsis
$pi = $this->pi;
Rundung
roundTo() - Runde Zahl auf n Nachkommastellen
Synopsis
$y = $this->roundTo($x,$n);
$y = $this->roundTo($x,$n,$normalize);
Description
Runde $x auf $n Nachkommastellen und liefere das Resultat zurück.
Ist $normalize "wahr", wird die Zahl nach der Rundung mit normalizeNumber() normalisiert.
Bei $n > 0 rundet die Methode mittels
$y = sprintf '%.*f',$n,$x;
bei $n == 0 mittels roundToInt().
roundToInt() - Runde Zahl zu Ganzer Zahl (Integer)
Synopsis
$n = $this->roundToInt($x);
Description
Runde Zahl $x zu ganzer Zahl und liefere das Resultat zurück, nach folgender Regel:
Für Nachkommastellen < .5 runde ab, für Nachkommastellen >= .5 runde auf. Für negative $x ist es umgekehrt.
Folgender Ansatz funktioniert nicht
$n = sprintf '%.0f',$x;
denn dieser gibt inkonsistente Ergebnisse
0.5 => 0
1.5 => 2
2.5 => 2
roundMinMax() - Runde Breichsgrenzen auf nächsten geeigneten Wert
Synopsis
($minRounded,$maxRounded) = $this->roundMinMax($min,$max);
Description
Die Methode rundet $min ab und $max auf, so dass geeignete Bereichsgrenzen für eine Diagrammskala entstehen.
Sind $min und $max gleich, schaffen wir einen künstlichen Bereich ($min-1,$max+1).
Die Rundungsstelle leitet sich aus der Größe des Bereichs $max-$min her.
Examples
8.53, 8.73 -> 8.5, 8.8
8.53, 8.53 -> 7, 10
Größter gemeinsamer Teiler
gcd() - Größter gemeinsamer Teiler
Synopsis
$gcd = $this->gcd($a,b);
Description
Berechne den größten gemeinsamen Teiler (greatest common divisor) der beiden natürlichen Zahlen $a und $b und liefere diesen zurück. Die Methode ist nach dem Euklidschen Algorithmus implementiert.
Bogenmaß
degreeToRad() - Wandele Grad in Bogenmaß (rad)
Synopsis
$rad = $this->degreeToRad($degree);
radToDegree() - Wandele Bogenmaß (rad) in Grad
Synopsis
$degree = $this->radToDegree($rad);
Geo-Koordinaten
geoMidpoint() - Mittelpunkt von Geo-Postionen
Synopsis
($latitude,$longitude) = $this->geoMidpoint(\@coordinates);
Arguments
- @coordinates
-
Array von Geo-Koordinaten. Eine einzelne Geo-Koordinate ist ein Tipel [$latitude,$logitude,$weight], wobei die Gewichtung $weight optional ist. Fehlt die Gewichtung, wird als Wert 1 angenommen.
Returns
Breite und Länge des geografischen Mittelpunkts
Description
Berechne den geografischen Mittelpunkt der Geo-Koordination (plus optionaler Gewichtung) und liefere diesen zurück.
Beschreibung des Alogrithmus siehe http://www.geomidpoint.com/example.html
geoToDegree() - Wandele Geo-Ortskoordinate in dezimale Gradangabe
Synopsis
$dezDeg = $this->geoToDegree($deg,$min,$sec,$dir);
Description
Wandele eine geographische Ortsangabe in Grad, Minuten, Sekunden, Himmelsrichtung in eine dezimale Gradzahl und liefere diese zurück.
Example
50 6 44 N -> 50.11222
50 6 44 S -> -50.11222
geoDistance() - Entfernung zw. zwei Punkten auf der Erdoberfäche
Synopsis
$km = $this->geoDistance($lat1,$lon1,$lat2,$lon2);
Description
Berechne die Entfernung zwischen den beiden Geokoordinaten ($lat1,$lon1) und (lat2,$lon2) und liefere die Distanz in Kilometern zurück. Die Angabe der Geokoordinaten ist in Grad.
Der Berechnung liegt die Formel zugrunde:
km = 1.852*60*180/pi*acos(
sin($lat1*pi/180)*sin($lat2*pi/180)+
cos($lat1*pi/180)*cos($lat2*pi/180)*cos(($lon2-$lon1)*pi/180)
)
See Also
Examples
Abstand zw. zwei Längengraden (359. und 360.) am Äquator:
sprintf '%.2f',Quiq::Math->geoDistance(0,359,0,360);
# -> 111.12
Abstand zw. zwei Längengraden am Pol:
Quiq::Math->geoDistance(90,359,90,360);
# -> 0
latitudeDistance() - Abstand zwischen zwei Längengraden
Synopsis
$km = $this->latitudeDistance($lat);
Description
Liefere den Abstand zwischen zwei Längengraden bei Breitengrad $lat. Die Methode ist eigentlich nicht nötig, da sie einen Spezialfall der Mehode geoDistance() behandelt. Die Formel stammt von Wilhelm Petersen.
Welt/Pixel-Koordinaten
valueToPixelFactor() - Umrechnungsfaktor Wertebereich in Pixelkoordinaten
Synopsis
$factor = $this->valueToPixelFactor($length,$min,$max)
Returns
Faktor
Description
Liefere den Faktor für die Umrechung von Wertebereich in Pixelkoordinaten. Die Werte werden transformiert auf einen Bildschirmabschnitt der Länge $length, dessen Randpunkte den Werten $min und $max entsprechen.
pixelToValueFactor() - Umrechnungsfaktor von Pixel in Wertebereich
Synopsis
$factor = $this->pixelToValueFactor($length,$min,$max);
Returns
Faktor (Float)
Description
Liefere den Faktor für die Umrechung von Pixel in Werte entlang eines Bildschirmabschnitts der Länge $length, dessen Randpunkt dem Werteberich $min und $max entsprechen.
valueToPixelX() - Transformiere Wert in X-Pixelkoordinate
Synopsis
$x = $this->valueToPixelX($width,$xMin,$xMax,$xVal);
Alias
valueToPixel()
Description
Transformiere Wert $xVal in eine Pixelkoordinate auf einer X-Pixelachse der Breite $width. Das Minimum des Wertebereichs ist $xMin, Maximum ist $xMax. Die gelieferten Werte liegen im Bereich 0 .. $width-1.
valueToPixelY() - Transformiere Wert in Y-Pixelkoordinate
Synopsis
$y = $this->valueToPixelY($height,$yMin,$yMax,$yVal);
Description
Transformiere Wert $yVal in eine Pixelkoordinate auf einer Y-Pixelachse der Höhe $height. Das Minimum des Wertebereichs ist $yMin, das Maximum $yMax. Die gelieferten Werte liegen im Bereich $height-1 .. 0. Diese Methode geht von einem Kartesischen Koordinatensystem, also von einem Ursprung unten links aus.
valueToPixelYTop() - Transformiere Wert in Y-Pixelkoordinate
Synopsis
$y = $this->valueToPixelYTop($height,$yMin,$yMax,$yVal);
Description
Transformiere Wert $yVal in eine Pixelkoordinate auf einer Y-Pixelachse der Höhe $height. Das Minimum des Wertebereichs ist $yMin und das Maximum ist $yMax. Die gelieferten Werte liegen im Bereich $height-1 .. 0.
Interpolation
interpolate() - Ermittele Wert durch lineare Interpolation
Synopsis
$y = $this->interpolate($x0,$y0,$x1,$y1,$x);
Returns
Float
Description
Berechne durch lineare Interpolation den Wert y=f(x) zwischen den gegebenen Punkten y0=f(x0) und y1=f(x1) und liefere diesen zurück.
Siehe: http://de.wikipedia.org/wiki/Interpolation_%28Mathematik%29#Lineare_Interpolation
Zahlen
isNumber() - Prüfe, ob Skalar eine Zahl darstellt
Synopsis
$bool = $this->isNumber($str);
Spike Test
spikeValue() - Berechne Spike-Wert
Synopsis
$val = $this->spikeValue($v1,$v2,$v3,$t1,$t3);
Description
Berechnung gemäß der Mail von Wilhelm Petersen vom 2017-05-03:
$v = (abs($v2-($v3+$v1)/2)-abs(($v3-$v1)/2))/($t3/60-$t1/60);
Die Parameter $t1 und $t2 werden in Sekunden angeben, die Funktion rechnet jedoch in Minuten, daher die Division durch 60.
VERSION
1.220
AUTHOR
Frank Seitz, http://fseitz.de/
COPYRIGHT
Copyright (C) 2024 Frank Seitz
LICENSE
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.