Registriert: Sa Apr 10, 2004 10:45 Beiträge: 2 Wohnort: Tübingen
Srvs Zusammen,
nachdem ich die "Spielphase" mit OpenGL & Co hinter mir habe, und schon die ein oder andere Klasse abgeleitet habe - definitiv zu viele - bin ich auf ein kleines Problem gestoßen...
Das Problem: Ich habe einen Boden definiert, des anhand eines Integrales - sagen wir mal - leicht hügelig wirkt. Alle die Mathe Leistungskurs hatten, wissen, was ich mit einem "Eierschachtelgraph" meine. Ich habe also die Idee genommen und habe das ganze gestreckt, so dass es eben den Anschein erweckt, es würde sich um eine hügelige Landschaft handeln. Den Schnickschnack mit den Texturen spar ich mir mal. Nun habe ich aber das Problem, dass ich ja pro Bewegung für ein bestimmtes Trippel (x,y,z) den aktuellen y Wert abfragen müsste, was bei mehreren Objekten oder einem "Objekthaufen" sehr schnell zu Slow motion führt. Wie kann ich also das Problem geschickt umgehen, bzw so weit tivialisieren, dass es nicht so viel Rechenzeit beansprucht?
Das funktioniert dann so, dass du über eine 2D-Funktion die dritte Komponente eines Vektors berechnest: sagen wird, dein "Boden" liegt auf der XZ Ebene, dann berechnest du über XZ den Y Wert.
Das Ganze geht eigentlich extrem schnell, selbst wenn die Funktion recht komplex ist, da es nicht notwendig ist auf Dreieckskollisionen zu überprüfen und auch kein hierarchischer Baum durchlaufen werden muss.
Registriert: Sa Apr 10, 2004 10:45 Beiträge: 2 Wohnort: Tübingen
Vielleicht war die Frage ein bisschen dumm gestellt...
Nehmen wir an, ich hätte eine sin-cos Funktion (ist es aber nicht). Von sin-cos wissen wir bezüglich des Einheitskreises, das die Function repititiver Art ist, also ich nur x mod pi rechnen müste um genau zu wisen, wo was ist. Vermuten wir mal, die function f habe ähnliche repititive Teilbereiche, bzw wir können funktionen gn zur Beschreibung der Teilstücke von f finden.
Wir kann ich solche beschreibenden Teilfunktionen von f Algorithmisch erfassen, so dass ich den Zugriff auf das Objekt Boden verringere?
Ich verstehe deine Frage nicht - bzw. scheint mir die Antwort bereits in der Fragestellung zu liegen.
Also um ein wenig Klarheit in die Sache zu bringen:
sin(x) ist eine sich im Intervall [-PI,PI] wiederholende Funktion, sin(x mod pi) entspricht deswegen übrigens nicht sin(x), wie der Screenshot unten zeigt (rot = sin(x mod pi), blau = sin(x) ), da der Modulo Operator negative Zahlen auf negative Zahlen und 0 abbildet, bzw. positive Zahlen auf positive Zahlen und 0.
Wenn die sin(x) Funktion ausgewertet werden soll, muss x vorher eben nicht auf ein bestimmtes Intervall abgebildet werden, da sin(x) für den gesamten Bereich der reellen Zahlen definiert ist, sich aber halt wiederholt.
Ich verstehe nicht, wozu du Teilbereiche einer kontinuierlichen Funktion brauchst, um diese auszuwerten - das Ergebnis der Funktion ist ja bereits der gesuchte Abstand zum Boden (und sin(x) ist in unserem Fall die Höhe, die du dem Objekt an der Position x geben solltest).
Ich glaube nicht, dass es einen allgemeinen Algorithmus gibt, der die Topologie einer beliebigen Funktion in eventuell existierende (viele Funktionen wiederholen sich nicht) repetitive Teilbereiche aufgliedern kann - man könnte höchstens versuchen, diese in einem bestimmten Zahlenbereich vorauszuberechnen - allerdings sehe ich auch nicht, wozu dies für die einfache Darstellung und Auswertung einer Funktion notwendig sein sollte - du hast die Funktion ja bereits, jetzt musst du nur noch Werte einsetzen und mit dem Ergebnis arbeiten.
Bei nicht kontinuierlichen Funktionen schaut die Sache anders aus - dort musst du per Grenzwertberechnungen herausfinden, für welche Bereiche die Funktion definiert ist (z.B. ist die Wurzel in R nur für positive Zahlen und 0 definiert) - aber wenn ich dich recht verstanden habe, war dies ja nicht dein Problem.
Die Landschaft "hinter" den Funktionen ist übrigens ein 2D-Evaluator, der ohnehin viel besser geeignet ist, komplexe Landschaften mit wenigen Daten zu beschreiben, als irgendwelche willkürlichen Funktionen, da das Aussehen eines solchen mit wenigen Kontrollpunkten recht genau festgelegt werden kann - aber das nur nebenbei.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Wenn man für die Funktion eine zweidimensionale Wertetabelle, also eine Höhenkarte speichert, kann man die Höhe auch sehr schnell ausrechnen, indem man annimmt die Funktion verlaufe zwischen den Werten linear. Da die Funktionen ja auf dem Bildschirm auch nur durch Dreiecke linear zwischen den Kontrollpunkten interpoliert wird, ist das genau das Ergebnis das man auch sieht.
Angenommen man würde die Funktionen immer bei ganzen Werten ausrechnen und in der Höhenkarte speichern:
Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.