Próbuję przekonwertować współrzędną z jednego układu współrzędnych na inny, aby móc narysować ją na obrazie.
Zasadniczo docelowy układ współrzędnych jest następujący:
X range: 0 to 1066
Y range: 0 to 1600
(tylko standardowy obraz, na który rysuję, o wielkości 1066 x 1600)
Pozycja, którą próbuję narysować na obrazie, ma dokładnie ten sam rozmiar, ale układ współrzędnych jest inny. Rozpiętość wszystkich współrzędnych to 1066 x 1600.
Ale współrzędnym przykładem byłoby:
(111.33f, 1408.41f)
(-212.87f, 1225.16f)
Zakres tego układu współrzędnych wynosi:
X range: -533.333 to 533.333
Y range: 533.333 to 2133.333
Wydaje mi się, że to BARDZO prosta matematyka, ale z jakiegoś powodu tego nie rozumiem.
Jak przekonwertować podane współrzędne na pierwszy układ współrzędnych?
2d
coordinates
Geesu
źródło
źródło
Odpowiedzi:
Możesz znormalizować pierwszą wartość, da to wartość z zakresu [0,1]. Można to traktować jako procent X, procent odwzorowany na wartość między wartością minimalną i maksymalną. Następnie możesz dowiedzieć się, gdzie procent ten należy do docelowego układu współrzędnych, sprawdzając, jaką wartość stanowi procent X w układzie docelowym. Użyję kodu Java jako języka przykładowego, ale jestem pewien, że pojęcia są wystarczająco jasne, aby tłumaczyć na dowolny język.
Więc znormalizuj:
Korzystając z przykładu, wpisz:
Następnie znajdź, gdzie leży w systemie docelowym. Z czymś takim
Lub użyć swoich wartości:
Na przykład przy wartości x 1000 zamapowałbyś ją na docelowym układzie współrzędnych
467.29
.Alternatywnie , jeśli układy współrzędnych będą zawsze takie same, możesz wstępnie obliczyć stosunek między nimi.
Więc:
źródło
To prosta matematyka:
src - źródłowy układ współrzędnych
res - system koordynacji wyników
Edycja - wyjaśnienie matematyki
( src - src_min ) / ( src_max - src_min )
przekłada go na układ współrzędnych zaczynający się od zera o równej długości źródłowego układu współrzędnych(0.0, src_max - src_min )
. Następnie skaluje wartość do układu współrzędnych(0.0, 1.0)
.* ( res_max - res_min )
wartość ta jest skalowana do układu współrzędnych rozpoczynającego się od zera z długością układu koordynacji wyników(0.0, dst_max - dst_min)
+ res_min
tłumaczy wartość na wynikowy układ współrzędnych(dst_min, dst_max)
źródło
Podstawowe równanie transformacji współrzędnych 2D (w algebrze, bez uwzględnienia obrotu) to:
otrzymuje dwa punkty w TargetCoordinate (T1, T2), które odpowiadają dwóm punktom w SourceCoordinate (S1, S2)
TranslateFactor
iScalingFactor
są przyznawane poprzez rozwiązanie:które wynikają:
W twoim przypadku dla współrzędnej x
A zatem,
Współrzędna y postępuj zgodnie z tą samą procedurą
źródło
Dokonując kilku założeń:
Następnie pojawia się pytanie: jaka jest homogeniczna macierz transformacji dla mojej zmiany podstawy?
Aby odpowiedzieć na to pytanie, najpierw potrzebujemy odpowiedzi na trzy dodatkowe pytania:
Zdefiniuj odpowiedzi na te trzy pytania w następujący sposób:
Zatem jednorodna macierz transformacji jest:
Moja konwencja polega na tym, że punkty są reprezentowane przez wektory rzędowe, co jest normalną konwencją grafiki komputerowej; matematycy i fizycy często używają przeciwieństwa.
źródło