Einzelnen Beitrag anzeigen

Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#18

AW: 2D- in 3D-Koordinate umrechnen

  Alt 16. Mai 2016, 16:52
Ah ja da ist ja der Fehler

Ich habe zwar oben von "mit Nullen auffüllen" geschrieben, aber das war nicht ganz richtig - wie mir gerade aufgefallen ist. Das Element unten rechts müsste dennoch 1 sein. (Stell dir eine Einheitsmatrix vor, in die man die kleinere Matrix hineinkopiert)
Zitat:
Wie sehe ich was eine Blockmatrix und was eine ganz normale Klammer ist?
Durch Erfahrung ^^ Also wenn da zwei Sachen übereinander oder nebeneinander in der Klammer stehen, ohne Symbol dazwischen, dann ist das eine Matrix.

Zitat:
determinant(inversion(M)) * (xy - a)
Das passt so nicht. (Fun Fact: Die Determinante der Inversen ist gleich dem inversen der Determinante. Du könntest das zu 1/determinant(M) vereinfachen.)
Du braucht die Determinante nicht, wenn du direkt die Inverse berechnest. (Du brauchst sie eventuell zur Berechnung der Inversen)

Ich habe mal deine Punkte von oben durchgerechnet mit Zwischenergebnissen. Vielleicht wird dann klarer, wie die Formeln in Code aussehen.
Grundlegendes zuer MATLAB-Syntax: Semikolon ( macht eine neue Zeile, vertcat verkettet vertikal, horzcat horizontal.
[1; 0; 0] ist also ein Spaltenvektor und gleichbedeutend mit vertcat(1, 0, 0)
Code:
A = [20; 100; 0]
B = [20; 100; 20]
C = [0; 100; 20]

a = [0; 100]
b = [50; 0]
c = [100; 200]

x = 50;
y = 90;

%% Ab hier sind Eingaben mit >> am Angang, der Rest ist das Ergebnis der vorigen Eingabe

>> xy = vertcat(x, y) % Untereinander schreiben
xy =
    50
    90
>> Basis2D = horzcat(b-a, c-a) % Nebeneinander schreiben
Basis2D =
    50   100
  -100   100
>> inv(Basis2D) % Inverse
ans =
    0.0066667   -0.0066667
    0.0066667    0.0033333
>> uv = inv(Basis2D) * ( xy - a )
uv =
          0.4
          0.3
>> Basis3D = horzcat(B-A, C-A)
Basis3D =
     0   -20
     0     0
    20    20
>> X = A + Basis3D * uv
X =
    14
   100
    14
Falls du mit 3x3 Matrizen rechnen musst, geht der letzte Teil so:
Code:
>> xy = vertcat(x, y) % Untereinander schreiben
xy =
    50
    90
>> Basis2D = horzcat(b-a, c-a) % Nebeneinander schreiben
Basis2D =
    50   100
  -100   100
>> Basis2D(3, 3) = 1 % Erweitern
Basis2D =
    50   100     0
  -100   100     0
     0     0     1
>> inv(Basis2D) % Inverse
ans =
    0.0066667   -0.0066667            0
    0.0066667    0.0033333            0
            0            0            1
>> uv = inv(Basis2D) * vertcat( xy - a, 0 )
uv =
          0.4
          0.3
            0
>> Basis3D = horzcat(B-A, C-A, [0; 0; 0])
Basis3D =
     0   -20     0
     0     0     0
    20    20     0
>> X = A + Basis3D * uv
X =
    14
   100
    14

Geändert von jfheins (16. Mai 2016 um 16:57 Uhr)
  Mit Zitat antworten Zitat