Ist eigentlich ganz simpel...
Du speicherst die Daten einfach so:
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:
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:
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.