Höhenberechnung eines Punktes
Übersicht

schalliBetreff: Höhenberechnung eines Punktes |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das ist eine mathematische Frage.
Also, ich habe eine Heightmap und daraus ein Meshterrain berechnet. Ich will mit Hilfe der Heightmap die Höhe herausfinden. Wenn ich beispielsweise den Punkt x=1.5 y=5.6 habe, dann kann ich mit Floor und Ceil die umliegenden Punkte berechnen: x1=1 x2=2 y1=5 y2=6 Die Höhe dieser Punkte kann ich aus der Heightmap auslesen. Aber wie kann ich nun berechnen, wie hoch der ursprüngliche Punkt liegt? EDIT Die umliegenden Punkte sind: x1,y1 x1,y2 x2,y1 x2,y2 |
||
![]() |
Badudel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich versteh nicht ganz - warum kannst du die Höhe der umliegenden Punkte herausfinden, aber die des gewünschten Punktes nicht? | ||
Wir werden dem Schwein schon schlachten, auch wenn ihm quiekt.
Zum Teufel mit das Grammatik! |
schalli |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Weil die umliegenden Punkte als Pixel auf der Heightmap vermerkt sind, der dazwischen aber nicht. | ||
Theovention - meine Homepage |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzBasic: [AUSKLAPPEN] Local Height# = HeightMap( X1, Y1 )*( X2 - X# )*( Y2 - Y# ) + HeightMap( X2, Y1 )*( X# - X1 )*( Y2 - Y# ) + HeightMap( X1, Y2 )*( X2 - X# )*( Y# - Y1# ) + HeightMap( X2, Y2 )*( X# - X1 )*( Y# - Y1 ) |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
schalli |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Noobody:
Super, das hat geklappt! Danke. |
||
Theovention - meine Homepage |
schalli |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich muss das ganze hier leider noch mal mit einem Doppelpost "ausgraben", denn ich habe noch eine Frage dazu. Ich benutze bei mir jetzt mit Erfolg Noobodys Code, aber bei einem Freund gibt das ganze beim Y Wert ein NaN (Not a Number) zurück.
Mein Code zur Höhenberechnung ist: BlitzBasic: [AUSKLAPPEN] Function MTerrainY#(xpos#,zpos#) Ich hab keine Ahnung, woran es liegen kann. Er hat XP, ich Vista, aber das kann auch nicht der Fehler sein, denn ich konnte es auf einem XP-PC erfolgreich testen. |
||
Theovention - meine Homepage |
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das mit dem NaN(Not a Number) ist komplett vom Betriebssystem unabhängig.
Weist aber auf so Rechnungen wie 0/0 hin. 1/0 = infinity -1/0 = -infinity 0/0= NaN |
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
Blitzjockey |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich kann es mir so auch nicht direct erklären, anhand Deiner Code.
Was Du vielleicht zur weitere Einschränkung noch machen könntest, ist der hmp#= -teil noch mal weiter aufteilen. Du hast ja 4x "HeightMap( X1, Y1 )*( X2 - xpos# )*( Y2 - zpos# )" da stehen (bzw, vergleichbare Termen.) Wenn Du die noch mal in 4 separate Abschnitten schreibst, würde es vielleicht mehr ergeben, bzw, vielleicht sogar das Problem lösen. Das kannst Du ja so machen: ersetze BlitzBasic: [AUSKLAPPEN]
durch BlitzBasic: [AUSKLAPPEN]
Weiter glaube ich dass Du BlitzBasic: [AUSKLAPPEN] Function HeightMap(hx,hy) eventuell mit BlitzBasic: [AUSKLAPPEN] Function HeightMap#(hx,hy) korrigieren könnte. Damit ist es sicher gestellt das es ein Float zurück gibt, und kein abgeschnittene Integer. Nur weil Du auch Ret# schreibst, anstatt Ret%. Aber das dürfte nicht der Fehler sein. Bin mal gespannt ob das was interessantes ergibt. |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die einzige Möglichkeit, bei der da ein NaN herauskommt, ist, wenn mindestens einer der Operanden NaN ist.
Da du ja schon überprüft hast, ob xpos#, ypos#, X1, Y1, X2 und Y2 vor der Berechnung schon NaN sind, muss der Zugriff auf HeightMap() NaN zurückliefern. NaN entsteht entweder bei 0/0, Sqr von negativen Zahlen, ACos/ASin mit Zahlen kleiner als -1 oder grösser als 1 oder Log() mit Zahlen <= 0. Ich würde also den Code auf solche Befehle untersuchen. Was ich mir bei deinem Code auch noch vorstellen kann, ist, dass du auf Stellen des Arrays zugreifst, die ausserhalb der Grösse des Arrays liegen. Da bei dir X1 etc. nicht überprüft werden, ob sie im Array liegen, kann es passieren, dass ohne Debugger einfach irgendwo im Speicher gelesen wird. Dabei kommt natürlich nur Müll heraus, je nach dem auch NaN. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group