Interpolation



  • Hi,
    gleich mal ne kleine Skizze, die das Problem veranschaulicht ...

    x1,y1,z1 ------ x2,y2,z2
             |  x |
             |    |
    x3,y3,z3 ------ x4,y4,z4
    
    x... gesuchter Punkt
    

    Ich hab die 4 Punkte, die den gesuchten Punkt umgeben und die x- bzw. die z-Position des gesuchten Punktes gegeben und möchte die y-Position des Punktes daraus ermitteln.

    Welche Formel könnte ich verwenden?

    Danke

    M.T.



  • Es müsste so gehen, dass du eine Ebene durch 3 Punkte, welche ist egal, legst und dann mittels Inzidenzkriterium die y-Koordinate des gesuchten Punktes ausrechnest.



  • Hi,
    ich hab gerade mal im Netz nach dem Inzidenzkriterium gesucht. Ich hab eine einzige Seite gefunden, die nicht mal wirklich was damit zu tun hatte.
    Kannst du mal bitte hier kurz schreiben, wie man das berechnet?

    M.T.



  • Inzidenz bedeutet Zugehörigkeit, du suchst also einen Punkt, der zu der Ebene gehört. Für alle Punkte (P) der Ebene (mit A, B und C als die drei Eckpunke) gilt:

    P element R3 : P = A + r * ( B - A ) + s ( C - A ) mit r,s element R



  • Danke erst mal, aber was sin r&s in dieser Gleichung? Sind das die x/z Koordinaten des gesuchten Punktes?

    M.T.



  • Steht doch da: reelle Zahlen



  • Das ist meiner Meinung nach der Zahlbereich, aus dem sie stammen, jedoch nicht, das, was sie repräsentieren sollen

    M.T.


  • Mod

    r und s sind nicht x und z, es sind zwei zahlen die die zwei vectoren irgendwie skalieren, wenn du also die gleichung auflöst kannst du einen punkt P errechnen dessen x und z mit deinen gewünschten übereinstimmt und y steht dann auch drinne.

    was einfacher ist, berechne ne ebenengleichung (A*x+B*y+C*z+D=0), löse nach y auf und setze x und z ein, fertisch.

    (ebenengleichung bekommst du so:
    A B C ist X Y Z der flächennormale
    die normale der fläche punktprodukt mit einem eckpunkt, das ist D)

    rapso->greets();



  • Hi,
    hier mein Ansatz:

    //...
    
    D3DXPLANE plane;
    D3DVECTOR points[3];
    
    points[0]=this->engine->Vector((float)floor(x),(((float)this->data[(int)floor(temp_z)*this->terrain_width*4+(int)floor(temp_x)]/255.0f)-0.5f)*this->scale.y,(float)fl oor(z));
    points[1]=this->engine->Vector((float)ceil(x),(((float)this->data[(int)floor(temp_z)*this->terrain_width*4+(int)ceil(temp_x)]/255.0f)-0.5f)*this->scale.y,(float)floo r(z));
    points[2]=this->engine->Vector((float)floor(x),(((float)this->data[(int)ceil(temp_z)*this->terrain_width*4+(int)floor(temp_x)]/255.0f)-0.5f)*this->scale.y,(float)cei l(z));
    
    D3DXPlaneFromPoints(&plane,(D3DXVECTOR3*)&points[0],(D3DXVECTOR3*)&points[1],(D3DXVECTOR3*)&points[2]);
    
    return (plane.a*x+plane.c*z+plane.d)/(-plane.b);
    

    Es geht, wie man hier sieht, um die Höhenbestimmung auf einem Terrain ... nur hängt sich das Prog. auf, sobald die Formel beim return berechnet, da plane.b oft 0 ergibt - und Division durch 0 ...
    Was muss ich ändern?

    M.T.



  • Original erstellt von Manuel:
    Es geht, wie man hier sieht, um die Höhenbestimmung auf einem Terrain

    Das hatten wir erst vor kurzem



  • Ich habs geschafft ... es funktioniert.

    Danke euch

    M.T.


Anmelden zum Antworten