2010-03-29 13 views
5

Estoy usando las clases de geometría .net WPF para graficar formas de onda. He estado usando las transformaciones matriciales para convertir el espacio de coordenadas de la pantalla a mi espacio de coordenadas para la forma de onda. Todo funciona muy bien y es realmente simple hacer un seguimiento de mi ventana y escala, etc. Incluso puedo usar la transformación inversa para calcular la posición del mouse en términos del espacio de coordenadas. Utilizo las clases integradas de Escalado y Traducción y luego una matriz personalizada para hacer el volteo del eje y (no hay una matriz prefabricada para voltear). También quiero poder graficar estas formas de onda en una escala logarítmica (ya sea eje x o eje y o ambos), pero no estoy seguro de si esto es posible con una transformación matricial. ¿Alguien sabe si esto es posible, y si lo es, cuál es la matriz?¿Existe una matriz de transformación que pueda escalar logarítmicamente el eje xy/o?

Respuesta

2

Las matrices son transformaciones lineales, por lo que pueden escalar, rotar, etc. Pero no se pueden estirar logarítmicamente. Esa es una transformación no lineal.

EDITAR: Pero deberías poder tirar esto tú mismo, sin demasiados problemas. (No requiere conocimiento de lin alg.) Quiero decir, si desea que el eje x esté en una escala logarítmica, tome el registro de las coordenadas x que está graficando. La parte difícil es hacer que la leyenda de la escala funcione en el lado del gráfico, que se reduce a transformar cada valor de escala de x a 10^x (o cualquier base de logaritmo que esté usando)

Entonces la leyenda léase:

1  10 100 1000 

en lugar de

1  2  3  4 
+0

Mucho esto. –

+0

gracias, sí, pensé que podría ser el caso, ¿tal vez haya una manera de crear mi propia implementación de la clase Transform para hacer cosas no lineales? La clase base abstracta Transform todavía parece usar una matriz, y esta es probablemente una necesidad para hacer las transformaciones compuestas, por lo que quizás tampoco sea posible. Supongo que tendré que hacer un escalado de registro yo mismo. Gorrón. –

+0

Ha pasado demasiado tiempo desde que tomé álgebra lineal –

0

Bueno, claramente la matriz sería la siguiente:

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

Pero eso obviamente no es útil. No puede escribir una matriz constante para hacer una transformación no lineal.

Cuestiones relacionadas