![]() |
Formel/Funktion für Werte
Hallo,
ich hoffe ich bin in diesem Unterforum richtig, mein Problem hat nicht direkt mit Delphi/Programmierung zu tun... Folgende Tabelle gibt Auskunft über die Lebenspunkte von Monstern in einem Spiel: ![]() Die Werte wurden offensichtlich mit einer Formel oder einem Algorithmus erzeugt, allerdings kann ich nicht feststellen mit welchem. Bei Lv. 1 sind es 15 HP, dann erhöht sich der Wert ein paar mal um 5, von Lv. 3 auf 4 um 10 und danach etwas länger um 15 (und beim nächsten Mal nicht etwa um 20, sondern 25). Kann mir jemand helfen, den Algorithmus zu finden? Wenn man die Werte plottet sieht die Kurve exponential aus, allerdings immer mit so Ecken als wären es viele lineare Funktionen aneinandergelegt (was die Werte im Prinzip ja auch aussagen, nur frage ich mich ob es einen Weg gibt das einfacher zu beschreiben, da der Term sonst ziemlich lang wäre). |
AW: Formel/Funktion für Werte
Ich würde mal vermuten da wurde immer auf volle 5 gerundet.
Code:
Nimm also mal deine angenommene Funktion und lasse die Werte entsprechend runden.
11 -> 10
12 -> 10 13 -> 15 14 -> 15 15 -> 15 |
AW: Formel/Funktion für Werte
Zitat:
|
AW: Formel/Funktion für Werte
Das ist keine Funktion. Schau dir mal die Spalte 'diff' an. Das hüpft ab hp=30 total hin und her.
Code:
mobid mob level hp diff
3210100 26 580 55 2150003 28 720 140 2230111 29 790 70 3300000 30 900 110 3150000 31 990 90 3300002 32 1100 110 3150001 33 1200 100 3300004 34 1300 100 |
AW: Formel/Funktion für Werte
manchmal ist eine Tabelle einfach nur eine Tabelle, stetig ist die Funktion sofern vorhanden in jedem Fall nicht
25 525 26 580 28 720 29 790 und das ist nur die erste Stelle die mir aufgefallen ist .... [edit] schon wieder kein roter Kasten .... [/edit] |
AW: Formel/Funktion für Werte
ich hoffe euch ist aber aufgefallen, dass es Lücken in der Tabelle gibt?
So fehlt z.B. die ID 27 gänzlich. Wenn man das nicht berücksichtigt, dann sieht das an der Stelle tatsächlich konfus aus ;) Die Diff-Spalte wurde hier mit der Formel (Zelle D4)
Code:
berechnet
=(C4-C3)/(B4-B3)
Code:
2150002 25 525 30
3210100 26 580 55 ??????? 27 ??? ?? 2150003 28 720 70 2230111 29 790 70 3300000 30 900 110 3150000 31 990 90 3300002 32 1100 110 |
AW: Formel/Funktion für Werte
Nein, hatte ich tatsächlich übersehen, allerdings muss man ja nicht viel weiter suchen ....
Code:
29 790 70
30 900 110 31 990 90 32 1100 110 |
AW: Formel/Funktion für Werte
Zitat:
Wenn da Lücken bei den IDs sind ... scheint es da wohl eine gewisse Unschärfe zu geben ... Gibt es die dann evtl. auch bei den hp-Werten? |
AW: Formel/Funktion für Werte
Ah, das war mir gar nicht aufgefallen... aber bis auf wenige Ausnahmen passt die Differenz eigentlich immer in ein gewisses Schema. Ich wäre ja schon mit einer Funktion zufrieden die sich annähernd an diese Vorgaben hält, Abweichungen von ~10% wären durchaus tollerierbar.
"mobid" ist völlig unwichtig, diese IDs sagen nur grob was darüber aus in welchem Gebiet das Monster anzutreffen ist. |
AW: Formel/Funktion für Werte
Dass die Differenzen teils etwas oszillieren würde ich eher der Rundung zuschreiben. Es sieht so aus, als wäre die Basis eine Funktion, die dann entweder stückweise auf unterschiedliche Genauigkeiten gerundet wurde, oder sogar manuell.
Man nehme einfach nur mal f(x)=x^2:
Code:
Solche Differenzen allein sind kaum ein Argument gegen eine Gesetzmäßigkeit, nur müsste man zur Funktion eben noch die intervallweisen Rundungsgenaugkeiten (und die Intervalle) ermitteln. Findet man dann noch eine Gesetzmäßigkeit bei den Intervallen und Genauigkeiten, steht einer Extrapolation nichts mehr im Wege :)
x f(x) auf 5 auf 10 diff
0 0 0 -- 1 1 0 0 2 4 5 5 3 9 10 5 4 16 15 10 5 25 25 10 6 36 30 5 <-- 7 49 50 20 8 64 60 10 <-- 9 81 80 20 10 100 100 20 11 121 120 20 12 144 140 20 |
AW: Formel/Funktion für Werte
Ich werde es jetzt ersteinmal so machen, bis/falls es überhaupt eine bessere Lösung gibt. Der Code wird jetzt auch nicht so unglaublich oft aufgerufen, von daher spielt die Performance eh keine Rolle.
Trotzdem bedanke ich mich natürlich für eure bisherigen Bemühungen :thumb:
Code:
public static int getHp(int l) {
if (l < 4) return 15 + (l - 1) * 5; else if (l < 11) return 35 + (l - 4) * 15; else if (l < 21) return 150 + (l - 11) * 25; else if (l < 26) return 405 + (l - 21) * 30; else if (l < 30) return 580 + (l - 26) * 70; else if (l < 46) return 900 + (l - 30) * 100; else if (l < 51) return 2520 + (l - 46) * 120; else if (l < 56) return 3200 + (l - 51) * 200; else if (l < 61) return 4300 + (l - 56) * 300; else if (l < 66) return 5900 + (l - 61) * 400; else if (l < 71) return 8000 + (l - 66) * 500; else if (l < 76) return 11000 + (l - 71) * 1000; else if (l < 126) return 17000 + (l - 76) * 2000; else if (l == 126) return 118000; else if (l < 152) return 120000 + (l - 127) * 5000; else return 250000 + (l - 152) * 10000; } |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz