Frank Seitz
and 1 contributors

NAME

Prty::Math - Mathematische Funktionen

BASE CLASS

Prty::Object

METHODS

Konstanten

pi() - Liefere PI

Synopsis

    $pi = $class->pi;

Rundung

roundTo() - Runde Zahl auf n Nachkommastellen

Synopsis

    $y = $class->roundTo($x,$n);
    $y = $class->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 = $class->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) = $class->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 = $class->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.

Geo-Koordinaten

geoMidpoint() - Mittelpunkt von Geo-Postionen

Synopsis

    ($latitude,$longitude) = $class->geoMidpoint(\@coordinates);

Description

Berechne den geografischen Mittelpunkt der Geo-Koordination (plus optionaler Gewichtung) und liefere diesen zurck.

Beschreibung des Alogrithmus siehe http://www.geomidpoint.com/example.html

Arguments

@coordinates

Array von Geo-Koordinaten. Eine einzelne Geo-Koordinate ist ein Tipel [$latitude,$logitude,$weight], wobei die Gewichtung $weight optial ist. Wenn die Gewichtung fehlt, wird als Wert 1 angenommen.

Returns

Breite und Länge des geografischen Mittelpunkts

degreeToRad() - Wandele Grad in Bogenmaß (rad)

Synopsis

    $rad = $class->degreeToRad($degree);

radToDegree() - Wandele Bogenmaß (rad) in Grad

Synopsis

    $degree = $class->radToDegree($rad);

geoToDegree() - Wandele Geo-Ortskoordinate in dezimale Gradangabe

Synopsis

    $dezDeg = $class->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 = $class->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)
    )

Examples

Abstand zw. zwei Längengraden (359. und 360.) am Äquator:

    sprintf '%.2f',Prty::Math->geoDistance(0,359,0,360);
    # -> 111.12

Abstand zw. zwei Längengraden am Pol:

    Prty::Math->geoDistance(90,359,90,360);
    # -> 0

See Also

latitudeDistance() - Abstand zwischen zwei Längengraden

Synopsis

    $km = $class->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 Herrn Petersen.

VERSION

1.108

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2017 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.