Mengenverhältnisse berechnen

Neue Frage »

PierreDole Auf diesen Beitrag antworten »
Mengenverhältnisse berechnen
Moin,
da es gestern so schön geklappt hat, hier noch eine Bitte um Hilfe. smile

Ich bekomme Zahlen in einer bestimmten Bandbreite, z.B. von 1 (istMin) bis 1000 (istMax). Die Bandbreite ist mir zu groß und ich möchte verhältnismäßig die Zahlen in eine andere Bandbreite umrechnen, z.B 10 (sollMin) bis 150 (sollMax). Wie mache ich das?
moody_ds Auf diesen Beitrag antworten »

[attach]44874[/attach]

so verwirrt

Du normierst jeden Wert deiner alten Skala mit der Anzahl möglicher Wert, z.B. 8/1000

Und diesen "Anteil" hat der Wert 8 dann auf deiner neuen Skala (150-10).

Und den Offset +10 nicht vergessen.
PierreDole Auf diesen Beitrag antworten »

Vielen Dank für für die Antwort. Leider ist Mathe bei mir viel zu lange her, als daß ich verstehen könnte, wie man daraus eine Formel erstellt. Wenn du mir eine Formel geben könntest, die ich in Code umwandeln kann, dann wäre ich sehr dankbar. smile
Thund3rfury92 Auf diesen Beitrag antworten »

Hi,

hat er Dir doch praktisch schriftlich in die Feder diktiet Augenzwinkern

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
1	10,14	=10+(A1*ANZAHL($A$1:$A$14)/100)
2	10,28	=10+(A2*ANZAHL($A$1:$A$14)/100)
3	10,42	=10+(A3*ANZAHL($A$1:$A$14)/100)
4	10,56	=10+(A4*ANZAHL($A$1:$A$14)/100)
5	10,7	=10+(A5*ANZAHL($A$1:$A$14)/100)
6	10,84	=10+(A6*ANZAHL($A$1:$A$14)/100)
7	10,98	=10+(A7*ANZAHL($A$1:$A$14)/100)
8	11,12	=10+(A8*ANZAHL($A$1:$A$14)/100)
995	149,3	=10+(A9*ANZAHL($A$1:$A$14)/100)
996	149,44	=10+(A10*ANZAHL($A$1:$A$14)/100)
997	149,58	=10+(A11*ANZAHL($A$1:$A$14)/100)
998	149,72	=10+(A12*ANZAHL($A$1:$A$14)/100)
999	149,86	=10+(A13*ANZAHL($A$1:$A$14)/100)
1000	150	=10+(A14*ANZAHL($A$1:$A$14)/100)
PierreDole Auf diesen Beitrag antworten »

Ok, ich versuche das mal für mich zu übersetzen. A1 bis A14 ist die Spalten "Alt", also der Input. Anzahl(...) ist eine Funktion, aber was genau macht sie? $A ist eine Variable für die Spalte "Alt" und $1 und $14 jeweils der erste und der letzte Eintrag? Und woher kommt die 100?

Wenn ich ANZAHL außen vor lasse komme ich auf Folgendes:

result = offset + (input * (sollMin/sollMax) / 100)

So richtig?
IfindU Auf diesen Beitrag antworten »

Etwas genauer, weil moody den Wert 1 nicht auf 10 schickt.

Man kann immer gleich vorgehen. Man nehme den alten Wert von 1 bis 1000 und ziehe 1 ab. Dann bekommt man eine Zahl zwischen 0 und 999. Dividiert 999 von der Zahl, so bekommt man eine Zahl zwischen 0 und 1. Das Intervall hat nun eine Laenge von 1, und das Intervall von Zahlen zwischen 10 und 150 hat eine Laenge von 140. Also multiplizieren wir den `alten', bereits modifizierten Wert mit 140. Dann erhalten wir eine Zahl zwischen 0 und 140. Addieren wir noch 10 dazu, so erhalten wir einen Wert zwischen 10 und 150.

Man kann alles in eine Formel packen und schoen zusammenfassen. Aber das Kochrezept funktioniert immer: Man normiert es erst auf [0,1] und bildet dann dahin ab wohin man will.
 
 
moody_ds Auf diesen Beitrag antworten »

Zitat:
Original von IfindU
Etwas genauer, weil moody den Wert 1 nicht auf 10 schickt.

Das was ich bei 150-10 noch richtig gemacht habe, habe ich mit 1000 statt 1000-1 unterschlagen Hammer

Danke für die Korrektur!
PierreDole Auf diesen Beitrag antworten »

Vielen Dank! Das konnte ich verstehen und habe es in meinem Code umgesetzt. smile

Das ist jetzt die Formel, die ich benutze:
result = offset + (input / (istMax-1)) * (sollMax - offset)
HAL 9000 Auf diesen Beitrag antworten »

Nicht ganz: "offset" hieß im Eröffnungsbeitrag noch "sollMin", aber das meine ich nicht, es ist noch ein echter Fehler drin. Richtig ist

result = sollMin + ((input - istMin) / (istMax-istMin)) * (sollMax - sollMin)

mit istMin=1
PierreDole Auf diesen Beitrag antworten »

Danke für die Korrektur. Das fehlende -1 des istMin, ist mir im Test nicht auf aufgefallen.

Eine Frage hätte ich da noch. Da ich nicht wirklich weiß, wie ich sie verständlich formuliere, hole ich etwas aus.

Das hier habe ich gemacht: fs5.directupload.net/images/170712/kjlnu2c7.jpg (das Forum lässt mich keine Links setzen)

Mit dieser Formel (matheboard.de/thread.php?threadid=579473) bringe ich die grafische Maus dazu sich entsprechen meiner Mausbewegung am Rand des Kreises zu bewegen. Die Maus zeigt also immer in die Richtung, in die ich meine Maus bewege.

In dem verlinkten Thread wird ein Punkt C angesprochen: der entsprechende Punkt, auf dem sich die Grafische Maus immer am Kreis befindet. Diesen habe ich jetzt mit der hier erhaltenen Formel variabel gemacht. Bewege ich meine Maus leicht, geht die grafische Maus nicht ganz an den Kreis, sondern entfernt sich nur leicht vom Mittelpunkt.

Nun habe ich festgestellt, daß die meisten meiner Mausbewegungen sehr kurz sind und die grafische Maus sich nur minimal bewegt. Die Frage ist, ob man die Konzentration der durch die obere Formel skalierten Bewegungspunkte verändern kann, sodaß sie kleinen Bewegungen etwas doller ausschlagen und die großen Bewegungen dafür hinten raus etwas komprimiert werden.

Ich möchte noch erwähnen, daß ich nicht weiß, was bzw. wie viel ich erfrage. Wenn das zu viel Aufwand ist, dann sagt das bitte. Ich bin ohnehin schon begeistert, was für geile Sachen man mit Mathematik machen kann und danke euch sehr für eure Hilfe. smile
HAL 9000 Auf diesen Beitrag antworten »

Naja, du kannst die dort angegebene Formel

mit

variieren zu



mit einem Wichtungsfaktor . Der sollte sicher monoton wachsend mit sowie für , letzteres sichert, dass der Kreis mit Durchmesser auch bei großen Bewegungen nicht verlassen wird.

Also beispielsweise bzw. , mit passend gewählten positiven Parametern bzw. , oder ... da gibt es viele Möglichkeiten.
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »