Interpolation eines Gitternetzes. Logarithmus?

Hallo,

ich brauche für ein Programm ein Gitternetz mit steigender Dichte in einer Richtung, sprich im grunde ist hier nur Y Relevant. Genauer:

Die Linie Y beginnt mit einer Teilung von z.b. 4, was heißt die Linie ist auf der Gesammtlänge an 4 Punkten geteilt, was mit % angaben angegeben wird, die länge ist bei der berechnung also quasi immer 100 (%). Punkt 1 wäre also bei 0, punkt 2 bei 33, punkt 3 bei 66 und punkt 4 bei 100%

Nun wächst die anzahl der Teilungen aber bis auf den Endwert, welche jetzt z.b. 6 wäre. Was bedeutet am ende der Linie wäre die Linie Teoretisch 6 mal geteilt.

Der unterschied der 4 und 6 fachteilung wird nun miteinander Verrechnet sodass im verlauf der Linie der abstand zwischen den Punkten immer kleiner wird.

Ich muss vorerst noch dazu sagen das ich „nur“ die realschule besucht habe, wodurch mit bestimmte Mathemathikberechnungen fehlen, falls das ganze also sehr einfach mit etwas zu lösen ist (z.b. Logarithmus scheint das zu sein was ich brauche, kenne mich damit aber 0 aus), dann bitte nicht steinigen. :wink:

Momentan habe ich das in meinem Programm wie folgt gelöst:

zuerst wird der Prozentuale Abstand zwischen den Punkten für die Anfangs und die Endteilung ausgerechnet:

$yS_percent = 100 / $y_START
$yE_percent = 100 / $y_END

dieser Abstand wird nun in einer Funktion miteinander Verrechnet:

Func gewversch($gewproz, $a, $b)
$c = ($a * ($gewproz / 100)) + ($b * (1 - ($gewproz / 100)))
Return $c
EndFunc

Die Variablen „a“ und „b“ stehen hierbei für die oben ausgerechneten Prozente und „gewproz“ ist die Prozentuale Angabe der Verschiebung zwischen den beiden Variablen, sprich 10% Verschiebung = 10% von Variable a und 90% von variable b.

So soweit funktioniert das alles wunderbar.

Die Prozentuale Verschiebung allerdings wird anhand der Gesammtpunkteanzahl ausgerechnet, und genau bei der Gesammtzahl ist das Problem.

Beispiel: Wenn Startwert 4 ist und der Endwert 6, ergeben sich daraus genau 5 Verschiebepunkte.

Bei einer derartigen Gleichung funktioniert auch alles, doch sobalt der unterschied zwischen den Werten größer 2 ist, ist die Anzahl der Verschiebepunkte nichtmehr genau die mitte zwischen beiden sindern näher am größeren und ich habe bisher keine Lösung gefunden wie ich das Berechnen kann.

Momentan benutze ich folgende Gleichung um die zahl der Verschiebepunkte zu ermitteln (was wie gesagt nut bei unterschied von 2 funktioniert)

$gesammtstueckzahly = ($y_END - $y_START) / 2 + $ytiles_START
(in diesem fall wäre bei dem Zahlen von oben „start“ der kleinere Wert.

Die lgeichung gibt also bei 4 und 6 5 aus und damit stimmt dann die interpolation der Prozente von Variable a und b genau und es kommen 100% am ende raus.

Wenn die Werte aber z.b. 4 und 8 sind ist der benötigte Wert ja nicht 6 sondern z.b. 6.5 oder so ähnlich.

Ich hoffe ich habe es verständlich genug geschrieben.

Mit freundlichen Grüßen

Hallo,

ich muss gestehen, dass ich deinen Ausführungen nicht wirklich folgen kann.

Vielleicht hilft es, wenn du beschreibst, für was diese Einteilung einer „Linie Y“ (meinst du die Y-Achse in einem Diagramm?) denn gebraucht wird?

zB: Möchtest du in einem Diagramm Datenwerte zeigen, von denen ein Teil sehr klein und ein anderer Teil im Vergleich dazu sehr groß ist (zB. die Werte 1,3 1,7 1,5 165 867 491)?

In einem solchen Fall stellt man die Y-Achse in einem Diagramm tatsächlich logarithmisch dar: Statt der Originalwerte trägt man schlicht die Logarithmen ab. Die Y-Achse selbst bekommt dann einen Teilstrich bei 1, 10, 100, 1000 usw. Zwei aufeinanderfolgende Teilstriche haben so immer den selben Abstand zueinander: Wenn 1 und 10 gerade 2c, auseinander liegerm , dann liegen 10 und 100 auch 2cm auseinander usw.

VG
Jochen

Also ich habe das ganze jetzt mit Logarithmen berechnet und funktioniert wunderbar. :smile:

Danke für den Versuch der Hilfe.

Also ich habe das ganze jetzt mit Logarithmen berechnet und
funktioniert wunderbar. :smile:

Das freut mich.

Danke für den Versuch der Hilfe.

Wenn’s geklappt hat, war’s doch mehr als nur ein Versuch… :wink:

VG
Jochen