Domanda

Supponiamo di avere una matrice di trasformazione arbitraria A come,

A =

    0.9966    0.0007   -6.5625
    0.0027    0.9938    1.0598
         0         0    1.0000

E un insieme di punti tali che le loro coordinate xey sono rappresentate da X E Y rispettivamente.

E supponiamo,

[Xf Yf] = tformfwd(maketform('projective',A),X,Y);

Ora,

[Xff Yff] = tformfwd(maketform('projective',inv(A)),Xf,Yf);
[Xfi Yfi] = tforminv(maketform('projective',A),Xf,Yf); 

[Xff Yff] E [Xfi Yfi] sembrano essere esattamente gli stessi (e dovrebbero).

È tforminv è lì solo per comodità o mi sto perdendo qualcosa?

È stato utile?

Soluzione

Lo premetterò dicendo che è mio miglior ipotesi...

È possibile che tforminv possono eseguire la trasformazione senza formare effettivamente la matrice inversa.Ad esempio, puoi risolvere un sistema di equazioni lineari Ax = b in due modi:

x = inv(A)*b;
x = A\b;

Secondo la documentazione per inv, la seconda opzione (utilizzando l'operatore di divisione della matrice) può funzionare meglio "sia dal punto di vista del tempo di esecuzione che dell'accuratezza numerica" ​​poiché "produce la soluzione utilizzando l'eliminazione gaussiana, senza formare l'inverso". tforminv può fare qualcosa di simile e quindi mostrare un comportamento generale migliore rispetto al passaggio della matrice inversa tformfwd.

Se fossi così propenso, potresti probabilmente provare una serie di diverse matrici di trasformazione e testare i due approcci (tforminv O tformfwd E inv) per vedere quanto sono accurati i risultati e quanto velocemente vengono calcolati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top