Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Schimbare adresa DNS IPv4 pe rout...

Recomandare Barebone

Monede JO 2024

Suprasolicitare sistem electric
 CIV auto import

Mutare in MOZAMBIC - pareri, expe...

Scoatere antifurt airtag de pe ha...

Magnet in loc de clește pent...
 Cumparat/Locuit in apartament si ...

Pot folosi sistemul PC pe post de...

Sokol cu distorsiuni de cross-over

Filtru apa potabila cu osmoza inv...
 Kanal D va difuza serialul “...

Upgrade xiaomi mi11

securitate - acum se dau drept - ...

Farmacia Dr Max - Pareri / Sugest...
 

Software: matricea de transformare din puncte?

- - - - -
  • Please log in to reply
7 replies to this topic

#1
mireazma

mireazma

    Member

  • Grup: Members
  • Posts: 567
  • Înscris: 01.04.2007
Stie cineva vreo aplicatie care calculeaza matricea de transformare dandu-i 2 seturi de puncte?

#2
maccip

maccip

    46 ani

  • Grup: Senior Members
  • Posts: 33,261
  • Înscris: 06.01.2007
In primul rand trebuie sa stii precis ceea ce vrei.
Transformare liniara cred, din moment ce ai pronuntat cuvantul matrice. Dar e posibil sa vrei o transformare conforma.

O transformare are niste parametri. Numarul lor e dat de tipul transformarii, in general ai atatia parametri cate elemente ai in matricea de transformare.
Pentru o transformare liniara 3D oarecare ai nevoie de 9 parametri. (+3 de translatie eventual)
Dar daca vrei doar o transformare conforma, sunt 7 parametri. (cu tot cu aia 3 de translatie)
Daca nu vrei scalare, ai 6 parametri... etc.
Pentru o transformare 2D, ai nevoie in general de 4 parametri.(+eventual 2 de translatie) Pot fi 3 parametri daca vrei conforma.
Deci trebuie definit exact ce vrei.
O transformare intre 2 sisteme de coordonate, o transformare de vectori. Sunt diferente subtile, dar sunt.


Apoi..
Mai exista o cerinta interesanta.
Numarul de puncte.
Pentru a determina 7 parametri, in principiu ai nevoie de 7 ecuatii, adica 7 perechi de puncte corespondente.
Dar poti avea mai mult de 7 puncte. Poti avea 8.
In cazul asta, sistemul de ecuatii va fi incompatibil, dar e posibil sa-ti doresti o determinare a parametrilor prin metoda celor mai mici patrate.
In cazul asta vei scri ecuatiile sub alta forma, sunt mai multe metode, poti scrie ecuatii de conditie asupra seturilor de puncte in plus(metoda conditionata) sau poti folosi metoda lui Lagrange pentru a determina cei mai probabili parametri in paradigma sumei minime a patratelor erorilor.
Metoda se numeste regresie.
Metoda regresiei permite si o generalizare. Adica pot fi utilizate ecuatii neliniare, deoarece insasi metoda utilizeaza derivatele partiale.
In cazul asta, lucrurile se prezinta mult mai general.
O transformare neliniara, tot cu matrici se rezolva.

Eu nustiu niciun soft, insa se poate face in excel daca cunosti teoria generala.
Daca zici exact ce vrei sa faci, eu te pot ajuta, eventual iti fac programul in excel.
Depinde de cat de complexa e problema in realitate, trebuie sa dai mai multe detalii.

Edited by maccip, 26 September 2017 - 19:40.


#3
mireazma

mireazma

    Member

  • Grup: Members
  • Posts: 567
  • Înscris: 01.04.2007
Multumesc mult pentru informatii. Cred ca ma depaseste cu brio situatia dar trebuie sa o scot la capat cumva. Si recunosc ca in momentul asta te invidiez enorm si te respect in acelasi timp pt. cunostintele tale.
Obtinerea transformarii este doar un pas din ceva mai mare. Nici nu stiu daca este liniara sau conforma.
Sper sa nu ma fac de ras:
Ideea finala este ca vreau sa gasesc o corespondenta intre coordonatele unui plan (spatiu euclidian 2D) si coordonatele unei sfere. Mai precis:
Am doua puncte A(xA,yA) si B(xB,yB) intr-un plan. Vreau sa pot sa exprim curbura spatiului astfel ca d.p.d.v al lui A, B sa aiba alte coordonate decat (xB yB) - ca si cand cele doua se afla pe o sfera si B se afla mai aproape decat in mod normal (in plan, fara curbura). D.p.d.v. al lui B, de data asta A are alte coordonate decat (xA yA).
Sincer nu stiu cum sa fac asta decat, m-am gandit eu, printr-o transformare a lui B si apoi una inversa pt. A sau ceva in genul asta :D

#4
maccip

maccip

    46 ani

  • Grup: Senior Members
  • Posts: 33,261
  • Înscris: 06.01.2007
Hmm...
Nu inteleg exact ce vrei, incerc sa ghicesc.
1. Daca A si B sunt in plan, si au coordonate, atunci vor avea aceleasi coordonate in acel plan, planul nu are curbura, aici mi-e neclar.
Cat timp punctele raman pe plan, vor avea aceleasi coorsonate.

Daca se afla pe o sfera, atunci punctele A si B vor avea coordonatele fi si lambda specifice sferei. Poti alege si altfel sa le definesti, nu e nicio problema, insa curbura aferei va ramane...raza ei. hahhaa

Poti face o mapare intre coordonatele de pe sfera si alea din plan. Proiectiile cartografice fac asta.
x=f1(fi, lambda)
y=f2(fi, lambda)
Insa functiile alea 2 de mapare vor avea in blueprint apriori raza de curbura a sistemului de coordonate.
Functiile alea sunt in general neliniare. Poti sa le alegi intr-o infinitate de moduri asa cum si proiectiile cartografice sunt o sumedenie.
In general sunt impartite pe categorii.
Proiectii conforme care pastreaza unghiurile (adica unghiu ABC de pe sfera va fi intotdeauna egal cu ala corespondent pe sfera) In general proiectiile cartografice uzuale sunt conforme (Stereografica 70, UTM)
Proiectii echivalente care pastreaza ariile (Adica oricare ar fi o curba inchisa in interiorul sferei, aria acelei "calote" va fi egala cu aria curbei corespondente in planul de proiectie)
Proiectii echidistante (pe meridian, pe paralel, etc) astea pastreaza distanta de pe o anumita directie nedeformata. Nu e posibila o proiectie care sa pastreze ambele directii nedeformate, asa cum nu poti "indrepta" o felie de pepene fara s-o rupi, deformezi. Un coif de hartie poti (deoarece nu are curbura decat in varful de coif).

Mai sunt proiectii geometrice (cilindrice, conice, pe plan de proiectie) care in general proiecteaza intai sfera pe o suprafata desfasurabla (care poate fi "intinsa" fara sa fie deformata). Adica con, cilindru, plan.

Ok.
Acum, sa zicem ca ai X(B, L), Y(B, L) unde XY sunt in plan, BL sunt pe sfera (latitudine , longitudine)
E relativ usor sa gasesti inversa lor B(X, Y), L(X, Y) astfel..
Fiindca fiecare puncti se proiecteaza in alt punct(daca alegi o proiectie "normala", nu una aberanta), atunci functia proiectiei va fi inversabila.
Acum.. functie de ce tip de proiectie te gandesti, inversa e relativ usor de gasit.


Ca reper, poti folosi principiul de la proiectia UTM
https://en.wikipedia...ordinate_system
Dar, daca ai nevoie de ceva mai simplu, iti poti determina proiectia care sa te avantajeze. Poti alege o proiectie geometrica centrala pe un plan tangent la sfera in punctul A considerat originea sambelor sisteme de coordonate si formulele se simplifica mult.
Ai ceva de genul X=r tan(B)cos(L), Y=r tan(B)sin(L), asta deja e o proiectie simpla, cu B unghii masurat in centru sferei de la pol spre "ecuator"(adica cumva echivalentul paralelului de la pamant unde nordul e 0, ecuatorul e 90, polu sud 180), L fiind un fel de latitudine, ca pe pamant(pe meridian)
In cazul asta, daca nu gresesc cu ceva, formulele inverse vor fi B=arctan(radical(X2+Y2)/r), L=arctan(Y/X).
Merge pe jumatate de sfera. Daca vrei pe sfera intreaga, trebuie sa alegi o proiectie stereografica(cu polul in diametral opusul sferei, nu in centru ca la aia centrala) insa formulele sunt oleaca mai complicate.
Mare grija la arctan, mai bine folosesti atan2(y, x), o are excelul si orice limbaj de programare. Cu arctan tre sa vezi in ce cadran e unghiul L functie de valorile lui X si Y. Atan2 face asta automat.

Insa .. inca o data, daca te intereseaza raza de curbura, ea va fi r.
E in formulele proiectiei pe care o alegi. N-are nicio treaba cu puntele A si B.


Mai bine zici exact ce vrei sa faci cu toate astea. Sunt o infinitate de moduri de a "transforma" planul in sfera si viceversa. Cand faci o alegere din acea infinitate, alegerea deja contine r in blueprint.

Zi-mi daca are vreo legatura cu determinarea "curburii" spatiului din teoria relativitatii. Sau ceva similar. In cazul asta, ai nevoie de niste vectori, nu doar de o simpla proiectie. In principiu daca ai un camp vectorial, o lege "fizica" care-ti garanteaza paralelismul unui vector cu el insusi (adica un fel de giroscop matematic), poti determina daca spatiul in care se "desfasoara" acel vector este sau nu curbat.
E destul de complicat deoarece trebuie sa mergi pe matematica generala a "maparilor", matematica ce implica tensori, metrica spatiului si o ecuatie de "inchidere" a unui vector in transportul paralel al acestuia in jurul punctului unde vrei sa-i de termini curbura.
Acolo nu ai o metrica prestabilita, o determini pe baza ecuatiilor generate de acea lege "fizica" In cazul teoriei lui Einstein, legea aia fizica, pune de fapt echivalenta intre acceleratie si gravitatie. De acolo iese nazdravania asta cu curbura spatiului 3D.
Daca vrei s-o faci 2D, tot cam aia va fi calea, e mult mai usor ca-n 3D, dar.. lui Einstein i-a luat ceva timp s-o faca corect si complet. Si era Einstein, nu oricine.
Sper ca nu vrei asa ceva totusi, dar daca ai o problema clara in cap si vrei s-o rezolvi, de ce nu? Insa iti va lua ceva munca. E destul de greu sa arati ca spatiul e curbat din cauza unei legi fizice.
:D

#5
maccip

maccip

    46 ani

  • Grup: Senior Members
  • Posts: 33,261
  • Înscris: 06.01.2007
LE: am uitat sa zic ca intre un plan si o sfera nu exista nicio transformare liniara. O transformare liniara nu poate transforma planul decat tot intr-un plan (sau o dreapta in caz det=0 )
Poti liniariza ecuatiile, insa ajungi la tensori, e mai complicat decat o proiectie de pe sfera pe plan (proiectie cartografica practic), careia ii poti afla inversa mai usor.

#6
mireazma

mireazma

    Member

  • Grup: Members
  • Posts: 567
  • Înscris: 01.04.2007
Stai asa ca mi-am luat un pahar de "inspiratie" cu multe grade sa ma delectez cu ce mi-ai scris Posted Image
Asa...
Nu stiu daca esti profesor de fizica teoretica, lucrezi la vreun program spatial dar sigur ai satisfactii care putinor oameni le-a fost dat sa le cunoasca! Si bineinteles, nu ma refer la bani.

Revenind la subiect, nu e implicata teoria relativitatii sau vreun fenomen fizic.
Nici eu nu stiu 100% exact abordarea situatiei insa incerc sa fie una cat mai simpla si intuitiva. Este vorba despre un joc. Sunt programator (nu ma ridic chiar la inaltimea titulaturii Posted Image ) si fac un joc in care actiunea se petrece pe o sfera dar vreau sa folosesc cat mai mult coordonatele carteziene fiindca sunt cele mai simple si la indemana. Spatiul de joc este suficient de mare astfel incat o actiune "locala" sa fie in plan (curbura neglijabila - 0) iar actiunea "globala" pe sfera sa lege mai multe actiuni locale.
Initial am incercat sa folosesc direct coordonate sferice pt. ambele nivele ca sa nu am 2 sisteme insa nu mi-au reusit niste algoritmi si in plus nu par deloc solizi si sunt f. costisitori computational.
Apoi m-am gandit sa modelez un solid platonic (icosaedru) sau altceva, cu 3 axe de simetrie dar am probleme cu distanta care se intinde pe mai multe fete si la unghiuri arbitrare. Asa ca am ramas la sfera ca e... "izotropica" Posted Image

Din ce mi-ai spus cele mai potrivite mi se par:
1. Proiectia stereografica (fiindca e conformala - acum am inteles ce inseamna termenul - pastreaza unghiurile) si deci le pot calcula simplu, traditional, in plan.
2. Proiectia care pastreaza distantele (chiar daca pe o axa mai trebuie adaugate niste calcule in plus).
Ideea e sa calculez distanta si bearing-ul unui obiect fata de altul. Cu oricare dintre proiectiile astea scap mai ieftin computational vorbind, rasuflu usurat.

Multumesc inca o data pt. toate informatiile si mai ales fiindca simt ca sunt cu un pas mai aproape de realizare!

Edited by mireazma, 29 September 2017 - 19:21.


#7
maccip

maccip

    46 ani

  • Grup: Senior Members
  • Posts: 33,261
  • Înscris: 06.01.2007
Pai in cazul asta nu cred ca e nevoie deloc de asa ceva.
Folosesti coordonate ciclice si cu asta basta.
Daca alegi un ciclu de 1000 unitati, faci un fel de modulo 1000 (fmod din c++ pentru coordonate neintregi).
In felul asta vine ..998, 999, 0, 1, .... 998, 999, 0, 1, ...
La fel pe y.
Practic in sistemul "local" totul e perfect plan, doar ca aplici la toate calculele fmodul ala care trunchiaza la 1000.
Chiar daca geometria sistemului global nu e corecta, nu e nicio problema, coordonatele fiind ciclice, realitatea indepartata va functiona si aia coerent.
La coltul (0, 0) care e vecin cu (1000, 1000) nu va aparea nicio problema,

Practic e acelasi lucru ca si la cerc, Chiar daca coordonatele unghiulare se duc de la 0 la 360, nu apare nicio ruptura.
Bine, cercul are niste proprietati consistente cu geometria macro.
Dar daca in jocul tau nu tre sa reprezinti niciodata World-ul, nai treaba.
Poti reprezenta worldul, dar va aparea ca o harta planimetrica repetitiva.

Poti folosi coordonate unsigned int ca spatiu de coordonate in C++ sau net framework in context unchecked.
Tre sa faci cast tot timpul pentru functii trigonometrce, poate nu e o optiune prea buna, dar e o idee. Depinde de designul programului.

#8
maccip

maccip

    46 ani

  • Grup: Senior Members
  • Posts: 33,261
  • Înscris: 06.01.2007
Uite spre exemplu pentru jocul Life, ai la sfarsitul paginii un exemplu de coordonate ciclice in care ce dispare de la Nord, apare la Sud. La fel Est-Vest.
https://en.wikipedia...'s_Game_of_Life

E foarte usor de implementat. Poti repeta harta la infinit(o asezi langa ea insasi ca faianta pe perete), in felul asta Intre Limita Est si aia Vest respectiv Sud Nord, nu se va observa nicio discontinuitate
Insa harta va aparea multiplicata la infinit, asta apare doar daca vrei sa reprezinti worldul, altfel, daca reprezinti doar o parte din harta pe ecran, n-ai treaba, e ca si cum ai fi pe o sfera, dar fara sa te complici cu proiectii and shit.

Anunturi

Chirurgia endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate