2010-03-29 8 views
5

Używam klas geometrii .net WPF do wykresu przebiegów. Używałem przekształceń macierzowych do konwersji z przestrzeni współrzędnych ekranu na moją współrzędną przestrzeni dla przebiegu. Wszystko działa wspaniale i bardzo łatwo jest śledzić moje okno i skalowanie itp. Potrafię nawet użyć transformacji odwrotnej do obliczenia pozycji myszy w kategoriach przestrzeni współrzędnych. Używam wbudowanych klas Skalowanie i tłumaczenie, a następnie niestandardowej macierzy do odwracania osi Y (nie ma matrycy prefabrykowanej do przewracania). Chcę być w stanie wykreślić te przebiegi również w skali logarytmicznej (oś x lub oś y lub obie), ale nie jestem pewien, czy jest to nawet możliwe z transformacją macierzy. Czy ktoś wie, czy to możliwe, a jeśli tak, to jaka jest matryca?Czy istnieje macierz transformacji, która może skalować logarytmicznie oś X i/lub Y?

Odpowiedz

2

Macierze są transformacjami liniowymi, więc można je skalować, obracać itd. Nie można jednak rozciągać logarytmicznie. To nieliniowa transformacja.

EDYCJA: Ale powinieneś być w stanie wykonać to samodzielnie, bez zbędnych kłopotów. (Nie wymaga znajomości lin.) Chodzi mi o to, że jeśli chcesz, aby oś x była na skali logarytmicznej, weź logi współrzędnych x, które są wykresami. Najtrudniejszą częścią jest sprawienie, by legenda skali działała po stronie wykresu - sprowadza się to do transformacji każdej wartości skali od x do 10^x (lub jakiejkolwiek bazy logarytmu, której używasz).

Tak więc legenda czytaj:

1  10 100 1000 

zamiast

1  2  3  4 
+0

Bardzo wiele. –

+0

dziękuję, tak, myślę, że tak być może, może istnieje sposób, aby stworzyć własną implementację klasy Transform, aby robić rzeczy nieliniowe? Klasa abstrakcyjna bazująca na Przekształceniu nadal wydaje się wykorzystywać macierz, i jest to prawdopodobnie konieczne do wykonywania złożonych transformacji, więc może to również nie jest możliwe. Chyba będę musiał sam wykonać skalowanie logów. Bummer. –

+0

To było zbyt długo, odkąd wziąłem liniową algebrę –

0

Cóż, wyraźnie matryca byłaby to:

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

Ale to oczywiście nie jest użyteczne. Nie można zapisać stałej macierzy do transformacji nieliniowej.

Powiązane problemy