2010-03-29 15 views
5

Uso le classi di geometria .net WPF per rappresentare le forme d'onda. Ho usato le trasformazioni della matrice per convertire dallo spazio delle coordinate dello schermo al mio spazio di coordinate per la forma d'onda. Tutto funziona alla grande ed è molto semplice tenere traccia della mia finestra e del ridimensionamento, ecc. Posso persino usare la trasformazione inversa per calcolare la posizione del mouse in termini di spazio delle coordinate. Io uso le classi di Scaling and Translation e poi una matrice personalizzata per fare il capovolgimento dell'asse y (non c'è una matrice prefabbricata per il flipping). Voglio essere in grado di tracciare queste forme d'onda anche su una scala di registro (o asse xo asse y o entrambi), ma non sono sicuro che ciò sia possibile anche con una trasformazione di matrice. Qualcuno sa se questo è possibile, e se lo è, qual è la matrice?Esiste una matrice di trasformazione in grado di scalare logaritmicamente l'asse xe/o y?

risposta

2

Le matrici sono trasformazioni lineari, quindi possono ridimensionarsi, ruotare, ecc. Ma non possono estendersi logaritmicamente. Questa è una trasformazione non lineare.

EDIT: Ma dovresti riuscire a farlo da solo, senza inutili problemi. (Non richiede una conoscenza di lin alg.) Voglio dire, se vuoi che l'asse x sia su una scala logaritmica, prendi il log delle coordinate x che stai rappresentando. La parte difficile è far funzionare la legenda della scala sul lato del grafico, che si riduce a trasformare ciascun valore di scala da x a 10^x (o qualsiasi base di logaritmo che si sta usando)

Quindi la leggenda sarebbe leggi:

1  10 100 1000 

anziché

1  2  3  4 
+0

Molto questo. –

+0

grazie, sì, ho pensato che potrebbe essere il caso, forse c'è un modo per creare la mia implementazione della classe Transform per fare cose non lineari? La classe di base astratta Transform sembra ancora utilizzare una matrice, e questa è probabilmente una necessità per fare le trasformazioni composite, quindi forse neanche questo è possibile. Suppongo che dovrò fare il ridimensionamento dei log da solo. Bummer. –

+0

è passato troppo tempo da quando ho preso l'algebra lineare –

0

Ebbene, chiaramente la matrice sarebbe questo:

(log(x)/x  0  ) (x) = (log(x)) 
(  0  log(y)/y) (y) = (log(y)) 

Ma ovviamente non è utile. Non è possibile scrivere una matrice costante per eseguire una trasformazione non lineare.

Problemi correlati