Thread Vergleich von zwei Kurven (4 answers)
Opened by Gast at 2006-07-11 11:22

Thorium
 2006-07-11 15:26
#68036 #68036
User since
2003-08-04
232 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ist eigentlich ganz simpel...

Du speicherst die Daten einfach so:

Code: (dl )
1
2
3
my %punkt = ( x => $wert_x, y => $wert_y );
my @kurve = [ \%punkt, \%punkt ];
@kurve = sort { $kurve[$a]->{x} <=> $kurve[$b]->{x} }, @kurve;


Ein Punkt ist also eine hashref (also eine Referenz auf ein Hash). Das Problem was wir haben ist, dass wir ja nicht wissen, ob die X-Werte nur Natürliche Zahlen sind, deshalb können wir kein Array benutzen. Man könnte das hashref auch durch ein Arrayref ersetzen - vielleicht bringt das Geschwindigkeitsvorteile (erster Wert X, zweiter Wert Y).

Mit dem Sort garantieren wir, dass die X-Werte im Array in aufsteigender Reihenfolge im Array stehen - wenn das File das schon garantiert, kann man sich diesen Schritt schenken.

Du kannst die zwei Kurven nun zu einer Kombinieren:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
my @kurve_f = (); # wie oben beschrieben
my @kurve_g = (); # wie oben beschrieben
my %kurven;

foreach my $punkt (@kurve_f) {
$kurven{$punkt->{x}} = [ $punkt->{y}, undef ];
}

foreach my $punkt (@kurve_g) {
$kurven{$punkt->{x}}[1] = $punkt->{y};
}


jetzt hast du ein Hash das folgendermassen aussieht:
Code: (dl )
1
2
3
4
5
6
7
8
my %kurven = (
-3.1 => [ 22, 1 ],
-2.4 => [ 14, 2 ],
-2 => [ 5, 5 ],
-1 => [ undef, 8 ],
0.1 => [ -30, undef ],
5 => [ -3, 61 ],
);

Die undefinierten werte kannst du nun durch Interpolation berechnen...
Per|li|nist der; -en, -en <zu ↑...ist>: a) Anhänger, Vertreter der radikalen Perlinisten die Perl als die einzig wahre Sprache ansehen; b) Mitglied einer perlinistischen Community.

View full thread Vergleich von zwei Kurven