[SCRÂȘIT] [FOSȘIT] [CLIC] BERTHOLD HORN: Vorbim despre fotogrammetrie și, în special, despre orientare absolută. Și analizăm mai multe detalii pentru acesta decât vom face pentru celelalte aspecte ale fotogrammetriei, deoarece o mare parte se va baza pe ceea ce facem aici. Și am descoperit că rotația este partea care este greu de manevrat. Așa că am vorbit despre diferite moduri de a reprezenta rotațiile. Și am ales cuaternioni de unitate. Și motivul principal pentru aceasta este că, având în vedere toate avantajele pe care le-am discutat înainte, cel mai important lucru pentru noi este că putem obține o soluție în formă închisă pentru cele mai puțin grave probleme. Deci, într-un anumit sens, avem o modalitate obiectivă de a obține un, citat, „răspunsul cel mai potrivit”, care este mai dificil cu celelalte notații. Apoi am vorbit despre cum să manipulăm aceste lucruri. Sunt două operațiuni care ne interesează în mod deosebit. Una este compoziția rotațiilor. Dacă faci rotații succesive, ce se întâmplă? Iar celălalt este rotirea unui vector. Deci compoziția rotațiilor este doar înmulțire. Și o putem reprezenta în diferite moduri. Pentru cei dintre noi care au crescut cu vectori, poate că maparea acestuia în scalari și vectori este cea mai intuitivă. Deci avem această formulă. Și este de fapt destul de eficient în ceea ce privește compoziția rotațiilor. În ceea ce privește calculul, este mult mai puțină muncă decât înmulțirea a două matrice ortonormale 3 cu 3. Dar pentru mare parte din ceea ce facem, ceea ce este mai important este cealaltă operație, care este rotația unui vector. Și pentru asta, avem acea formulă în care ne rotim în patru spațiu folosind q. Și apoi ne rotim folosind conjugatul q. Și cumva, ajungem înapoi într- o lume tridimensională reală. Și pentru asta, din nou, dacă vrem să ne gândim doar la vectori, un mod în care îl putem scrie este -- așa că dacă nu vrem să ne gândim prea mult la operațiunile din lumea cuaternionilor, putem face această operație direct folosind vectori și scalari. Și acesta, avem un dezavantaj. Este nevoie de ceva mai multe operații aritmetice decât înmulțirea unei matrice 3 cu 3 cu un vector. Deși am văzut că modurile de rescriere au fost, am refolosit crucea q r care reduce oarecum numărul de operații. Și apoi trebuie să conectăm acest lucru la alte notații. Deci, de exemplu, vrem să-l raportăm la notația axelor și unghiurilor. Și acolo, avem formula lui Rodriguez, unde pălăria omega este vectorul unitar în direcția axei. Și asta ne oferă o singură convertire pe care o dorim. Așa că putem folosi asta pentru a-- q dot-- îmi pare rău pentru scrisul de mână. Și când identificăm aceste două formule, descoperim că de fapt q este cos omega peste 2 și omega hat este... ei bine, să vedem. Altfel. vectorul q este omega hat sine theta peste 2. Oh, lasă-mă să fac acel theta. Îmi pare rău. Criteriul nostru de rotație arată așa. Și astfel încât să putem citi imediat axele, va fi paralel cu partea vectorială. Și dacă vrem, putem citi unghiul folosind a10 pe raportul dintre partea reală și mărimea părții imaginare. Deci, aceasta este o modalitate de conversie între două dintre aceste forme diferite. Acum, avem opt. Deci nu vrem să trecem prin toate cele opt. Dar cealaltă, care este importantă pentru noi, din moment ce trăim într-o lume în care domină matricele ortonormale, trebuie să fim capabili să conversim înainte și înapoi între acestea. Și deci dacă extindem acea formulă folosind acel izomorfism cu matrici ortogonale 4 cu 4, atunci am obținut asta. Și am extins asta. Și când ne uităm la acea matrice, aflăm că are părți simetrice și părți simetrice oblice. Și putem folosi asta pentru a ne ajuta în conversia de la o formă la alta. Deci, în primul rând, dacă ni se oferă cuaternionul, acest lucru ne permite să calculăm foarte ușor matricea ortonormală. Deci, în această transformare, este 4 cu 4. Dar nu ne pasă de primul rând și prima coloană pentru că acesta este un cuaternion special care reprezintă un vector în care partea scalară este 0. Deci toată prima coloană și primul rând ne spune că, dacă avem un cuaternion complet imaginar , atunci când efectuăm această transformare, primim înapoi unul dintre acestea. Așa că ne-am întors în lumea vectorilor. Deci aceasta este singura cale de conversie. Cealaltă cale este puțin mai puțin evidentă, parțial pentru că vom avea o matrice 3 cu 3. Deci avem nouă numere. Iar răspunsul nostru are doar trei grade de libertate. Vrem doar axele și unghiul. Și așa ai făcut o parte din asta. Dar o parte pe care o putem face este să ne uităm la urma acelei matrice, acea submatrice 3 pe 3, și cred că ajungem cu ceva de genul 3q pătrat minus - deci merge doar pe diagonală. Și, desigur, q0 am spus că acolo a fost cosinus de jumătate din unghi. Și apoi această parte, fiecare dintre acestea este proporțională cu sinusul jumătății unghiului și este un vector unitar. Deci, dacă luăm pătrat dintre acestea, ar trebui să obținem sinus pătrat theta peste 2. Deci urmă egală cu aceasta. Și apoi putem manipula asta în diferite moduri. Am putea adăuga cos pătrat theta peste 2 plus sinus pătrat theta peste 2 este egal cu 1 pentru a scăpa de acel sinus pătrat theta. Așa că putem adăuga asta fără a schimba nimic. Sau o putem scădea. Deci, dacă îl scădem, obținem acel lucru care este mai simetric decât cosinus și sinus. Și, desigur, aceasta este formula unghiului dublu. Deci sunt doi cosinus teta. Oh, avem nevoie de minus 1. Și din asta, putem rezolva pentru cosinusul teta este 1 jumătate de urmă de R minus 1. Deci imediat, asta vă permite să testați rapid dacă matricea de rotație ar putea fi chiar o matrice de rotație. Pentru că dacă trasarea ajunge să fie prea mare sau prea mică, cosinusul teta poate fi doar între plus și minus 1. Deci asta limitează valoarea urmei. Deci este mult mai ieftin decât să verifici dacă este și normal. Acum, acesta este o modalitate de a obține unghiul. Nu este o modalitate bună pentru că problemele din theta sunt egale cu 0 pentru că avem acel lucru. Suntem sus pe curbă și o mică schimbare a înălțimii corespunde potențial unei schimbări mari a teta. Și, în mod similar, deci da, acest lucru este adevărat, dar nu acesta este modul de a calcula theta. Deci ce facem? Ei bine, folosim elementele off-diagonale, nu? Deoarece elementele off-diagonale depind toate de sinusul lui theta peste 2. Și apoi depinde dacă vom folosi partea simetrică, cum ar fi q,x, q,y, care ar depinde apoi de sinusul pătrat al teta peste 2 sau partea asimetrică, care este q,0, q,z, care va depinde de sinus theta peste 2, cosinus theta peste 2, care este formula unghiului dublu pentru sinus theta. Deci, oricum, trebuie să obțineți sine theta, astfel încât să puteți utiliza apoi atan2 și să evitați această problemă, deoarece acolo unde aceasta este proastă, sine theta este bună. OK, deci asta e o cale de urmat. Dar pentru a-l face cu adevărat explicit, să dăm de fapt o formulă de inversare completă. Și fac asta mai ales pentru a vă vaccina împotriva formulelor de conversie care au fost publicate pentru că nu sunt bune. Deci, în acest sens, unde, da, matematic ai terminat. Ai asta. Dar de fapt, în ceea ce privește acuratețea numerică, nu. OK, deci având în vedere matricea de trei câte trei, r, putem calcula diferite sume. Și să începem cu o diagonală. Deci avem matricea noastră de trei pe trei acolo. Și dacă ajungem cu diagonala, obținem asta dacă adunăm 1, nu? Mai este că 1. Apoi îl putem combina în diverse alte moduri. Deci, acesta este un fel ca și cum, știți, încercați toate modalitățile posibile de scădere și adăugare de termeni pe diagonală, ca și cum diagonalele în afara diagonalelor nu ar exista. Și ta-da. Acum, luăm doar rădăcini pătrate. Deci aceasta este o abordare. Desigur, problema este că există o ambiguitate a sinusului, deoarece, în fiecare caz, putem calcula aceste sume și diferențe și apoi împărțim la 4 și luăm rădăcina pătrată și avem o componentă a Quaternionului. Dar nu știm dacă este plus sau minus. Și da, știm că plus q este același cu minus q. Dar asta este mai mult. Acest lucru ne permite 16 opțiuni diferite de sine. Deci, chiar dacă permiteți răsturnarea sinusului Quaternionului. Asta ne lasă cu 8. Deci asta înseamnă că nu ar trebui să ne bazăm doar pe această metodă. Dar ceea ce putem face este să le calculăm, apoi să alegem cea mai mare pentru acuratețea numerică și să le rezolvăm. Deci, să presupunem că această sumă este cea mai mare, atunci o vom folosi și o vom folosi în mod arbitrar versiunea pozitivă, deoarece avem că minus q este același cu q, așa că putem alege. Putem face o alegere arbitrară și rezolvăm asta. Deci, să numim asta q,i. Și apoi, trebuie să mergem la off-diagonale. Și, din fericire, sunt părți simetrice și asimetrice pe care le putem scoate. Acum, acest lucru este puțin mai implicat decât metodele publicate, dar funcționează. Este rezistent. Este robust. Este rezistent la probleme numerice. Deci, adunând și scăzând părțile corespunzătoare în afara diagonalei , obținem șase relații mai mult decât avem nevoie. Dar așa cum funcționează, am ales una dintre acestea și am rezolvat-o din diagonală. Și apoi intrăm în trei dintre acestea și rezolvăm pentru restul. Deci, de exemplu, dacă am rezolvat pentru q,y, aceasta implică q,y, aceasta implică q,y și aceasta implică q,y. Așa că le-am ales pe cele trei pentru a rezolva patru q, 0, q, x și q, z. Deci, în mod corespunzător, dacă avem... deci acesta este un mod direct de a trece de la Quaternion la matricea de rotație. Adică, putem merge și indirect. Mai întâi putem găsi axa și unghiul și apoi scriem matricea de rotație în termeni de axă și unghi. Și este mai complicat mai ales pentru că avem nouă numere și ar putea fi zgomotoase și am dori să obținem cel mai bun rezultat posibil din acele nouă numere. OK, deci din cele 56 de moduri de conversie între diferite reprezentări, am făcut patru. Și asta ar trebui să fie suficient. Așa că putem să facem conversie înainte și înapoi între lucrurile cu care suntem mai familiarizați - poate nu între matrici cu spin slab, dar nu le folosim prea mult, cu excepția mecanicii cuantice. BINE. Și ai făcut o parte din asta la teme și nu vreau să repet asta. Dar permiteți-mi să vorbesc despre ceva în special, scalarea. Până acum, am presupune că transformările sistemului nostru coordonat au fost rotația și translația. Și în multe cazuri, asta este tot ce există. Dacă avem date reale privind timpul de zbor pentru măsurarea distanțelor, de obicei nu există nicio îndoială cu privire la factorul de scară, deoarece cunoaștem viteza luminii cu mai multă precizie decât la care poți arunca un băț, deși există adesea o eroare în offset. Și cum ajungem la scară? Ei bine, este destul de ușor să intri la scară -- de exemplu, dacă greșim linia de bază. Așa că avionul nostru zboară făcând o fotografie și face o altă fotografie. Și știm viteza avionului și știm ora, așa că știm cât de departe... știm linia de bază. Dar cât de exact îl știm cu adevărat? Așadar, dacă încercăm să împletim bucăți din teren pe care le-am obținut cu două poziții succesive ale camerei, atunci ar trebui să permitem o mică diferență de scalare, deoarece știm distanța destul de precis, dar nu perfect. Și căutăm o precizie foarte mare în reconstrucția topografică. Deci, cum să te descurci cu asta? Ei bine, să presupunem că... nu este greu. Găsim din nou că centroidul mapează centroidul, chiar și cu introducerea scalării. E foarte ușor. Doar diferențiați în ceea ce privește traducerea. Setați rezultatul egal cu 0. Și apoi mutam originea la centru și obținem aceste coordonate prime. Deci acum, să ne uităm la asta. Deci, iată o posibilă versiune a problemei pe care încercăm să o rezolvăm și, acum, am scăpat de traducere trecând la centroid. Și acum, avem o rotație necunoscută și avem o scalare necunoscută. Asta e o parte nouă. Și așa ar putea dori să stabilim o problemă cu cele mai mici pătrate. Și, desigur, norma este produsul punctual al acestui lucru cu el însuși. Deci îl putem înmulți. Primim patru termeni. Și apoi suma celor patru termeni este suma a patru sume. Și așa ajungem cu... așa că este foarte asemănător cu ceea ce am făcut înainte. Și cum găsim optimul? Ei bine, bineînțeles, facem doar diferențe în ceea ce privește s. Acest lucru este deosebit de ușor acum. Este doar un scalar. Și setăm rezultatul egal cu 0. Și primul termen scade, iar apoi obținem al doilea termen. Oh, aici, desigur, folosim faptul că dimensiunea acestui vector este aceeași cu dimensiunea vectorului rotit. Deci rotația nu schimbă dimensiunea. OK, acesta este egal cu 0. Și astfel putem rezolva pentru s. Ei bine, hai să dăm nume acestor lucruri. Să-i spunem Sr, ca să nu fie nevoie să le scriem de prea multe ori, și să-i spunem D, și să-i spunem Sl. Deci avem S egal cu D peste Sl. Tocmai am rezolvat asta pentru D. Putem uita 2. Și astfel, în acest moment, nu știm răspunsul pentru că nu avem încă rotația. Dar în aceeași situație în care am fost cu traducerea, putem elimina factorul de scară din considerare acum. Și apoi, la sfârșit, ne întoarcem și folosim această formulă pentru a calcula factorul de scară. Deci, ține totul cuplat, încât nu putem face asta independent de rotație. Acum, am vorbit mai devreme despre simetrie. De ce ne rotim de la coordonata stânga la coordonata dreapta, mai degrabă decât de la coordonata dreapta la coordonata stânga? Și o metodă ar trebui să fie într-adevăr simetrică, prin aceea că, dacă calculezi inversul, ar trebui să obții inversul. Deci, matricea de rotație pe care o obțineți ar trebui să fie transpunerea matricei de rotație și așa mai departe. Deci, aici, dacă mergem acum din sens invers, dacă ne uităm la această problemă, atunci ne așteptăm să obținem un factor de scară care este inversul acelui factor de scară, nu? Pentru că mergem de la sistemul coordonat dreapta la stânga. Mergeam de la stânga la dreapta înainte. Și dacă chiar o rezolvi, o înțelegi. Deci, din nou, o poți face, dar nu este același răspuns. Nu este inversul. Ce ne-am aștepta este ca acest prim să fie 1 peste S și, în general, nu este. Deci asta sugerează că aceasta nu este o metodă bună. Și ce se întâmplă? Ei bine, ceea ce se întâmplă este că metoda celor mai mici pătrate încearcă să facă erorile cât mai mici posibil. Și o modalitate de a face acest lucru este de a face coordonatele de transformare mai mici până la un punct. Așa că puteți cam trișa făcând factorul de scară puțin mai mic decât ar trebui să fie cu adevărat, deoarece micșorați lucrurile și le micșorați. Și apoi invers, dacă mergi în cealaltă direcție, micșorezi celălalt sistem de coordonate. Deci niciunul dintre acestea nu este cu adevărat acceptabil. Și așa ne uităm la un alt termen de eroare, cel la care te-ai uitat în problema temelor în cazul 2D. Și astfel, în acest caz, vom ajunge cu o eroare care arată astfel, în care Sr, Sl și D sunt definite acolo. Și asta e frumos pentru că S nu apare aici în acel termen care are rotația în el. Avem doar acești alți termeni. Și astfel putem diferenția doar în raport cu S, setați rezultatul egal cu 0, deoarece derivata acelui 0 față de S este 0. Și astfel, asta înseamnă că S pătrat este Sr peste Sl. Și acum, dacă merg în cealaltă direcție, voi obține S bara pătrat este Sl peste Sr. Și asta este inversul. Deci această metodă este mult de preferat. De asemenea, are proprietatea că nu avem nevoie de corespondențe. Deci este la fel ca și traducerea, în care suntem capabili să mapam centroid la centroid. Nu aveam nevoie de corespondență pentru asta. Aici, este foarte convenabil să nu avem nevoie de... singurul termen care depinde de corespondență este acela. Avem nevoie doar de acestea, care spun practic, ai acest nor de puncte. Cât de mare este? Și apoi aveți celălalt nor de puncte. Cât de mare este? Ei bine, factorul de scară este raportul dintre aceste două dimensiuni. Este foarte intuitiv. OK, așa că ne lasă cu problema de-- astfel încât să ne putem ocupa de translație și scalare într-un mod fără corespondență și, de asemenea, fără rotație. Nu trebuie să luăm în considerare rotația. Ei bine, putem separa problemele. Deci asta ne lasă cu partea de rotație. Și am petrecut ceva timp cu asta, așa că nu o voi revizui în detaliu. Doar rețineți că, în cele din urmă, avem de maximizat, deoarece aceasta a fost o minimizare, dar avem semnul negativ, deci trebuie maximizat. Și N, desigur, este o matrice de patru pe patru, despre care putem arăta că este simetrică. Nu este evident că este. Și acum, avem o problemă de calcul. Doar diferențiam în raport cu q și setăm rezultatul egal cu 0 - ei bine, nu chiar. Avem acea constrângere. Și asta este la fel de bine pentru că, în caz contrar, răspunsul este 0 pentru că diferențiază asta și obții 2N,q. Cum faci asta? Ei bine, sunt sigur că vă amintiți aceste formule și așa mai departe... deci toate în anexă. Bine, deci dacă îl setăm egal cu 0, ei bine, există un răspuns foarte convenabil , care este că q este 0. Sau privit într-un alt mod -- acesta este unul extrem. Ei bine, de fapt încercăm să maximizăm, așa că am merge pe altă cale. Am face doar q să crească. Putem face q cât de mare ne place. Și deci nu există maxim... ei bine, infinit. Deci, evident, nu este satisfăcător. Trebuie să ținem cont de constrângere. Și așa cum am văzut în slide-uri data trecută, o modalitate de a face asta este utilizarea multiplicatorilor Lagrange - o metodă foarte elegantă și este descrisă în anexă. Dar acesta este un caz special în care putem scăpa cu ceva mai simplu numit coeficient Raleigh. Așa că Raleigh a făcut tot felul de lucruri interesante, inclusiv munca în optică. Și s-a confruntat cu această problemă de a încerca să găsească un extremum. Și așa i-a venit ideea, ei bine, cum pot preveni ca asta să fugă făcându-se foarte mare? Îmi pare rău, acest lucru este transpus acolo, da. Ei bine, doar împart la dimensiunea lui q. Deci nu există niciun avantaj să faci q foarte mare, nu? Deci, dacă vă gândiți la ea ca direcții într-un spațiu, această cantitate este constantă de-a lungul oricărei raze, deoarece oriunde mă voi afla, voi împărți la lungimea lui q în sine. Deci asta creează o funcție diferită, cea care nu merge la infinit. Dar asta este constantă de-a lungul oricărei raze și exact asta ne dorim. Vrem să găsim raza, direcția razei care o face cât mai extremă posibil. Da? PUBLIC: Care este atunci matricea? BERTHOLD HORN: Oh, deci ăsta e lucrul pe care l-am scos de unde-- a dispărut-- de unde am luat reprezentarea unui produs Quaternion cu o matrice ortogonală rotativă de patru pe patru. Deci asta e cheia... PUBLIC: Îi poți spune q, într-adevăr? BERTHOLD HORN: Nu. Unde este spațiu? Ei bine, hai să luăm asta. Doar o scurtă trecere în revistă a acelei părți, așa că nu o voi copia totul, doar la început. Deci am avut această sigma peste... nu? Acesta a fost lucrul pe care am încercat să-l maximizăm. Și apoi am scris-- mai întâi, am dus asta pe cealaltă parte pentru a-l face mai simetric, așa că-- oh, scuze. Și apoi am folosit acea notație în care am reprezentat asta ca... acum, înainte, am extins- o în altă parte. Am convertit q într- o matrice de patru cu patru și am înmulțit cu acest Quaternion. Și acum, o facem invers. Și apoi, pentru că acesta este un produs punctual, acesta este transpunerea. Și apoi obținem 2 transpuneri R transpun li, R,ri. Și, desigur, aceasta este suma. Și q nu depinde de i, așa că putem scăpa de asta. Deci este acea matrice. Deci este derivat din date, din corespondențe. OK, deci cum găsim asta? Ei bine, acum, este o problemă de calcul destul de simplă . Doar diferențiam în raport cu q și udăm rezultatul egal cu 0. Și este un raport, așa că folosim regula pentru diferențierea unui raport. Și așa mai întâi, diferențiază numărătorul. Obținem 2N,q împărțit la aceasta. Și apoi trebuie să adăugăm termenul care implică numitorul. Deci obținem minus 1 peste q punct T q,0 pătrat 2,q și q,0 N,q. Deci aceasta este doar formula pentru a lua derivata unui raport, iar acest 2,q aici este derivata lui q transpune q în raport cu q. Și acesta ar trebui să fie 0. Deci asta înseamnă că N,q este-- și acesta, desigur, este un scalar, o constantă. Și ce ne spune asta despre q? Că înmulțim o matrice cu q și obținem o versiune la scară a lui q-- deci vector propriu, nu? Deci q este un vector propriu. Și acum, încercăm să maximizăm acest lucru. Deci trebuie să știm pe care dintre vectorii proprii să alegem. Și este destul de ușor de observat că dacă N este lambda q, atunci acest raport de aici va fi lambda q transpose q peste q transpose q este lambda. Și astfel, pentru a o maximiza, alegem valoarea proprie. Alegeți cea mai mare valoare proprie. Vrem să maximizăm acest raport. Și modalitatea de a face acest lucru este să alegeți q să fie vectorul propriu corespunzător celei mai mari valori proprii. Și atunci toată chestia asta este egală cu acea valoare proprie. Deci, evident, nu ați dori să alegeți o valoare proprie mai mică decât cea maximă. OK, și deci singurul punct critic este faptul că există această constrângere. Dar constrângerea este mult mai ușor de gestionat decât constrângerile pe care le-am avut cu matricele normale. Deci putem face asta într- un mod foarte simplu... coeficientul Raleigh. Deci câteva lucruri pe care le întrebăm de obicei după ce am, citat, găsit soluția, unul este, când eșuează? Și celălalt este, de câte puncte avem nevoie? Câte corespondențe? Și deci să începem cu asta. Deci, în toate aceste probleme fotogrammetrice, acesta este un punct important. Și atât de bine, putem aborda acest lucru din punctul de vedere al proprietăților acestei matrice N. Dar este un pic o problemă de care să vă faceți griji. Și singular este câte valori proprii sunt diferite de zero și așa mai departe? Să o facem doar intuitiv. Deci, în primul rând, putem spune, ei bine, câte lucruri căutăm? Căutăm șase. Dacă căutăm translație sau rotație, căutăm șase. Dacă adăugăm scalarea, s- ar putea să căutăm șapte. Deci, fiecare corespondență de măsurare, există un punct în 3D și un punct în 3D despre care spunem că sunt același. Deci valorează trei corespondent... trei constrângeri, nu? Deci căutăm șase lucruri. Deci, hei, avem nevoie doar de două corespondențe, nu? Asta presupunând că nu există redundanță în acele informații. Ei bine, să începem cu o corespondență. Deci iată un obiect. Și apoi avem un al doilea obiect. Și vrem să știm cum se rotește unul față de celălalt. Și, desigur, cunoaștem dualitatea dintre două obiecte, un sistem de coordonate, sau un obiect, două sisteme de coordonate. Deci, să facem cele două obiecte, un sistem de coordonate. Și, evident, acest lucru nu o va face pentru că pot muta chestia asta. Îl pot roti în jurul acelui punct fără a schimba acea corespondență. Și, de asemenea, îl pot roti în jurul acestei axe. Este doar o constrângere foarte mică... ei bine, trei constrângeri din șase posibilități dimensionale. Deci nu este suficient de bun. Deci hai să alegem două. Să presupunem că calculul nostru foarte gros din spate sugerează că doi ar trebui să fie suficiente, deoarece fiecare dintre acei corespondenți ne oferă trei constrângeri. Este foarte puternic să spunem că acest punct este peste acel punct. Și astfel obținem trei dintr- o corespondență, trei dintr-o a doua corespondență. Asta face șase. Căutăm șase grade de libertate. Poate asta va merge. Ei bine, ce crezi? Adică, dacă leg două obiecte împreună în două puncte, este suficient pentru a le combina rigid? Sau a mai rămas un anumit grad de libertate? Deci este greu de văzut pentru că este în 2D. Ei bine, desenați axa respectivă și luați unul dintre obiectele din rotiți-l în jurul acelei axe. Deci nu, asta nu funcționează. Și motivul este că atunci când facem a doua măsurătoare, nu primim trei lucruri noi. Informația este redundantă. De ce? Ei bine, pentru că există distanța dintre cei doi care este fixă. Și este adevărat că avem șase numere, dar există și unul care nu valorează nimic nou. Și deci avem doar cinci constrângeri. Deci da, ne-a mai rămas doar unul și are sens perfect. Mai avem un singur grad de libertate. Ne putem roti în jurul acestei axe. Deci OK, deci durează trei. Este nevoie de trei corespondențe pentru a funcționa. Și metoda pe care am depreciat-o la început folosea trei corespondențe. Deci, din acest punct de vedere, nu suntem mai buni. Avem nevoie de exact același număr de corespondențe ca acea metodă despre care am pooh-poohed și am spus că nu este foarte bună. OK, deci o întrebare este -- am mai întâlnit asta în lumea 2D -- există vreo modalitate de a generaliza transformarea astfel încât să se potrivească? Aici, cu trei puncte, obținem nouă constrângeri. Și, desigur, sunt extrem de redundante, deoarece distanțele dintre puncte sunt aceleași. Și așa, cu scalarea, suntem până la șapte. Deci asta merge deja în direcția corectă dacă adăugăm scalarea. Trebuie să mai adăugăm două, astfel încât să folosim pe deplin și să avem nevoie de trei corespondențe. Deci o idee este, ei bine, ce zici de transformarea liniară generală ? Și am făcut asta în 2D. Și cred că, în 2D, am ajuns să avem șase grade de libertate. Ce este în 3D? Ei bine, așa că nu ne-am mai fi constrâns la matrici ortonormale. Și acesta este de fapt un lucru grozav, deoarece matricele ortonormale sunt cele care produc aceste probleme îngrozitoare cu constrângerile că sunt ortonormale. Și asta pare corect. Are nouă numere în el. Deci nouă constrângeri din trei corespondențe se potrivesc cu asta, așa că se pare că aceasta este, probabil, generalizarea de care avem nevoie. Ei bine, din păcate, nu tocmai pentru că avem și traducere. Deci transformarea liniară generală are 12 elemente în 3D. Aveam șase în 2D. Și deci nu există un argument simetric frumos că, cu trei corespondențe, ar funcționa. Am avea nevoie de patru corespondențe. Și asta funcționează. Și este foarte elegant și foarte îngrijit. Cele mai mici pătrate ies frumos pentru că nu există niciuna dintre aceste constrângeri enervante - cum ar fi, determinantul matricei este unul. Dar nu aceasta este transformarea cu care avem de-a face în lumea reală, unde avem două sisteme de senzori care privesc lumea și, de obicei, se ocupă doar de rotație și translație, poate de scalare, dar nu atât de complet - acest lucru permite deformarea. a axelor și scalarea asimetrică, că axa x este scalată diferit de axa y și că există o înclinare și așa mai departe. Deci OK, deci revenind la analiza noastră a acestei metode, am spus ceva despre câte corespondențe avem nevoie. Deci o modalitate de a eșua este să nu ai suficiente corespondențe. Și dacă aveți doar două corespondențe, acea matrice N va fi singulară, ceea ce nu este suficient pentru ca metoda să nu funcționeze. Dar va avea mai mult de o valoare proprie care este zero și aceasta este o modalitate de a ne oficializa argumentul fluturând mâna. Dar e cam dezordonat, așa că nu am vrut să fac asta. Dar există un alt caz pe care vrem să-l analizăm și care este de fapt destul de interesant. Deci, cum găsim valorile proprii? Ei bine, folosim MATLAB. Sau, mai serios, trebuie să rezolvăm această ecuație caracteristică, care este obținută din acea matrice N. Deci, aceasta este ecuația care spune că determinantul lui N minus lambda i este 0. Deci acesta este determinantul unei matrice de patru pe patru care are minus lambda în jos pe diagonală, scăzut din diagonală. Și când luăm determinantul, obținem combinații de lambda de ordinul al patrulea. Așa că va arăta așa. Acum, matricea noastră N este o matrice particulară care a fost obținută în acest fel. Și de fapt, putem spune mai multe despre asta. Am menționat deja asta ultima dată. Nu este ușor de arătat, dar C,3 este urma matricei care se întâmplă să fie 0. Ei bine, este ușor să arăți că este o urmă a unei matrice. Nu este ușor să arăți că este 0. Deci, oricum, este 0, ceea ce face ca această ecuație să fie mai ușor de rezolvat. De fapt, de obicei, primul pas în rezolvarea unei ecuații de ordinul al patrulea este eliminarea termenului de ordinul al treilea. Ei bine, deja sa întâmplat. Deci suntem înaintea jocului. Dar ceilalți? Deci aceasta este urma unei alte matrice. Deci, acestea altele nu sunt 0, deci ce este această matrice M? Ei bine, matricea M este locul cu care am început de fapt. Acesta este ceea ce ai calcula când ai primit corespondențele. Ce-i asta? Acesta este un produs diadic. Deci luăm învingătorul în sistemul de coordonate din stânga și îl înmulțim cu învingătorul în sistemul de coordonate din dreapta . Dar mai degrabă decât transpunerea primelor ori a doua, care ne oferă un produs punctual, facem asta. Și asta ai văzut. Deci aceasta este o matrice de trei câte trei. Tocmai am trecut prin date, corespondență cu corespondență. Și calculăm acest produs diadic și îl adunăm într-un total și obținem acea matrice N, care este, desigur, trei câte trei. Și se dovedește că matricea de patru pe patru N are termeni care pot fi calculați din această matrice. Deci, acesta este de fapt cel mai eficient mod de a obține N. Cerneți toate datele și calculați M. Apoi, la sfârșit, calculați N din el. OK, următorul lucru - să presupunem că determinantul lui M este 0. Să presupunem că M este singular. Ei bine, asta este destul de util pentru că asta înseamnă că C,1 0. Și apoi putem rezolva cu toții această ecuație fără a fi nevoie să mergem la vreun manual special sau ceva de genul, pentru că atunci avem lambda la al patrulea plus C,2 lambda pătrat plus C,0 este 0. În acest caz, se reduce la acea problemă. Și ce ecuație folosim pentru a rezolva asta? Deci se pare că are lambda la al patrulea, ceea ce înseamnă că ar trebui să folosim Ferrari sau Cardano. Dar, desigur, este pătratic în lambda pătrat, nu? Așa că aplicăm doar pătratica. Deci este un caz deosebit de ușor. Și așa s-ar putea să vă întrebați, ei bine, cui îi pasă? Acesta este un caz special. Ei bine, se pare că este un caz particular care este interesant din punct de vedere geometric. Are de-a face cu repartizarea punctelor. Și astfel această matrice N poate avea vreo 0 valori proprii, care sunt potențial problematice. Și când se întâmplă asta? Ei bine, unul este atunci când punctele sunt coplanare. Până acum, am vorbit despre nori de puncte, precum țepii unui arici de mare. Și potrivim două dintre acestea. Așa că rotim unul în aliniere cu celălalt. Dar acest lucru se aplică la fel de bine dacă toate aceste puncte sunt într-un plan. Și atunci ce se întâmplă? Ei bine, dacă există un plan, atunci toate punctele noastre din acel plan și putem desena o unitate normală cu planul, iar produsul punctual trebuie să fie 0. Deci să presupunem că toate punctele din dreapta sunt într-un plan . Acum, cu eroarea noastră de măsurare care implică că punctele din stânga sunt și ele într-un plan, dar este posibil să nu fie nevoie să facem această restricție. S- ar putea să existe o eroare de măsurare, iar ceilalți s-ar putea să nu fie exact în avion. Deci, ceea ce am făcut aici este că am desenat centroidul. Deci am mutat deja totul pe centroid. Și, prin urmare, pot scrie ecuația planului în această formă simplă. Produsul punctual - componenta oricăruia dintre acești vectori în această direcție este 0. Aceasta este definiția unui plan. Bine, atunci, este același lucru cu r,i transpune n. Și apoi pot merge la M, n pălăria este-- OK, deci dacă punctele sunt coplanare, atunci avem determinantul lui M este 0. Și atunci acea problemă este deosebit de ușor de rezolvat. Acum, nu am arătat invers, ceea ce ar trebui, și anume că, dacă determinantul lui M este 0, punctele sunt coplanare. Dar cred că poți vedea cum să faci asta fără prea multe probleme. Acum, în acest caz, de fapt, putem rezolva problema mai simplu. Să presupunem că lucrurile sunt drăguțe și ambele sunt coplanare, atât norul de puncte din stânga, cât și norul de puncte din dreapta. Așa că pot desena aceste două avioane. Deci iată un avion. Deci toate punctele din sistemul de coordonate din stânga sunt un singur plan. Toți cei din mâna dreaptă sunt în celălalt plan. Desenul nu este deosebit de bun. Ei bine, două avioane... deci tot nor de puncte din stânga, nor de puncte din dreapta . Deci, pot descompune problema în doi pași. Unul pas este rotirea unui plan, astfel încât să zboare deasupra celuilalt plan, apoi o rotație în plan și am terminat. Deci singurele două lucruri-- pot descompune întreaga rotație 3D în două rotații foarte simple. Acum, pentru a face asta, ar trebui să găsesc acest unghi. Și trebuie să găsesc această axă. Și axa este paralelă cu n,1 cruce n,2. Dacă avem două plane care au normale n,1 și n,2, ele se intersectează într-o dreaptă, care este paralelă cu n,1 traversează n,2. Și unghiul, desigur, îl pot obține foarte ușor. Iau produsul punctual. Asta îmi dă cosinusul. Iau produsul încrucișat, iar mărimea acestuia îmi dă sinusul. Și apoi folosesc atan2. OK, deci am acces. Am unghiul, ca să pot construi Quaternionul. Și apoi rotesc toate punctele dintr-unul dintre sistemele de coordonate. Și acum, cele două avioane sunt unul deasupra celuilalt. Și acum, trebuie doar să iau rotația în acel plan, astfel încât aceste puncte să se alinieze. Deci, aceasta este o problemă 2D cu cele mai mici pătrate, așa cum ați rezolvat în problemele legate de teme. Desigur, este într-un avion care este undeva în 3D, dar oricum destul de simplu. Deci este interesant că cazurile speciale în care lucrurile s- au schimbat în ceea ce privește dificultatea de soluționare corespund și unor lucruri care sunt relevante din punct de vedere fizic. Deci OK, deci să vedem. Unde să merg mai departe? Nu vreau să trec prea repede la orientarea relativă. Vreau ca asta să se cufunde pentru că este ca un triumf. Avem o soluție în formă închisă. Și, din păcate, până acum, nu există una pentru orientare relativă. Dar folosim multe din aceleași instrumente -- reprezentarea pentru rotație și așa mai departe. Dar vreau să mă uit la alte aspecte. Una dintre ele este cele mai mici pătrate. Tot ce am făcut în acest curs sunt cele mai mici pătrate. Și dacă vorbești cu prietenii tăi mai sofisticați, ei vor spune, o, asta e inutil pentru că nu este robust. Și ce înseamnă asta? Ei bine, înseamnă că dacă ai zgomot frumos, cele mai mici pătrate este calea de urmat. Prin zgomot frumos, înțelegem ceva care are o distribuție rezonabilă, precum gaussian. Și problema cu care ne confruntăm în practică uneori este că multe dintre măsurători urmează o distribuție gaussiană. Dar, din când în când, primești ceva care este complet nasol. Și ce faci cu asta? Deci, cum ne descurcăm cu valorile aberante? Acum, puteți formula o nouă problemă de optimizare care utilizează altceva decât pătratul erorii - de exemplu, valoarea absolută a erorii. Dar nu mai are o soluție în formă închisă. Și deci există un schimb. Evident, nu avem o soluție în formă închisă. Ar putea fi mai multă muncă de calculat. Adesea nu este o problemă. Dar, de asemenea, este foarte greu să spui ceva în general despre asta. Cum ar fi, cum variază în funcție de parametri și așa mai departe. Dacă singurul mod în care obțineți răspunsul este să strângeți numerele, atunci nu aveți acea experiență plăcută a unei formule generale care spune, o, va varia liniar cu frecvența sau ceva de genul. Deci, acesta este un dezavantaj al plecării de la această metodă a celor mai mici pătrate. Deci, să presupunem că avem o problemă 2D și doar facem o potrivire a liniei. Deci există linia noastră cu cele mai mici pătrate. Dar acum, să presupunem că există un punct de date care este complet năucit. Ei bine, asta are un pătrat imens de eroare. Și așa va trage soluția ta dramatic în această direcție. Deci asta e intruziunea. Și ar fi puțin mai bine dacă ar fi valoarea absolută a erorii pentru că, atunci, nu ar trage la fel de tare. Dar ar fi și mai bine dacă ai spune, oh, punctul ăsta e pur și simplu nebunesc. Uită-l. Și există abordări diferite în acest sens. Așadar, se pune problema să se ocupe robust de valorile aberante. Acum, de fapt, merge mai departe decât atât, că puteți arăta că există anumite probleme în care, dacă zgomotul este gaussian, atunci cele mai mici pătrate vă oferă cel mai bun răspuns posibil. Nu este doar fluturarea mâinii, ci probabilitatea maximă, toate acele lucruri minunate. Deci, cum ne descurcăm cu această problemă? Ei bine, există diverse abordări. Cel despre care voi vorbi se numește RANSAC, Random Sample-- Nu știu-- Acord. Și Fischler și Bolles l-au inventat la SRI, Stanford Research Institute, care este conectat într-un fel la Stanford, deși, pentru că fac lucrări clasificate, nu este atât de strâns conectat ca o celulă C. Seamănă mai mult cu Lincoln Labs. Oricum, au avut probleme precum navigarea prin satelit și măsurarea, nu știu, pozițiile stelelor, giroscoape. Și ocazional, aveau o eroare masivă, care le-ar strica complet rezultatul, chiar dacă, de cele mai multe ori, erorile s-au comportat bine. Au urmat o distribuție plăcută, lină, fără prea multă răspândire. Deci care este ideea? Pasul unu, eșantion aleatoriu. Deci, dacă iau un eșantion aleatoriu din aceste puncte și nu există prea multe valori aberante, există șanse mari să nu o lovesc și voi obține un rezultat bun. Și de unde știu că am ales eșantionul aleatoriu și cât de mare? Deci sunt mai multe întrebări. Cât de mare este un eșantion aleatoriu? Ei bine, recomandarea lor a fost minimul necesar pentru a repara transformarea. Deci, în cazul nostru de orientare absolută, ar fi trei. Acum, știm că dacă obținem 1.000 de corespondențe, vom obține rezultate mult mai bune decât cu trei. Merge ca 1 peste rădăcina pătrată a lui n. Deci, aceasta limitează acuratețea, așa că alți oameni vă recomandă să utilizați mai mult. Și atunci ce faci? Deci, acum, luați eșantionul aleatoriu și faceți cea mai bună potrivire, de obicei cele mai mici pătrate, deoarece este eficient și ușor de înțeles. Deci OK, apoi verificați câte date. Și, deci, ceea ce faci este, dacă asta te potrivește, atunci adaugi un fel de bandă. Și numărați câte dintre ele cad înăuntru. Și observați că acest lucru implică un fel de prag. Deci, în cazul nostru aici, să spunem că toate, cu excepția unui punct, se încadrează în acea bandă și spunem că am terminat. Dacă nu, luăm o altă probă aleatorie și facem din nou această operație. Și există tot felul de probleme interesante. Unul dintre ele este că trebuie să știți care este raportul dintre valorile interne și valorile aberante. Deci, trebuie să aveți un model al procesului dvs. de măsurare, deoarece acesta va controla modul în care setați pragul. Deci trebuie să știți ceva despre zgomot pentru a seta acel prag. Și atunci trebuie să știi câți. Deci există două praguri. Există aici un prag al trupei care determină dacă acestea sunt inliere sau nu. Și apoi este al doilea prag aici care spune... hopa, a speriat-o cu niște ecuații. Deci avem numere arbitrare acolo, care presupun că știți ceva despre date. Și asta funcționează destul de bine. Adică, cred că trebuie să ai o anumită limită pentru a nu face asta de un număr infinit de ori. Deci probabil că aveți o altă clauză de ieșire care spune, ei bine, dacă ați încercat 100 de eșantioane aleatorii, atunci să ne oprim, atunci, probabil, presupunerile dvs. despre model sunt greșite, iar pragurile nu sunt corecte. Deci trebuie să renunți. Și există variații ale acestui lucru. Deci ăsta e un punct bun. Încă nu am spus acest punct. Dar vorbim în mod specific despre orientarea absolută. Dar acest truc trebuie aplicat, dacă este necesar, dacă există valori aberante, la oricare dintre celelalte metode ale celor mai mici pătrate. Așa că abordarea celor mai mici pătrate este foarte atrăgătoare, deoarece obțineți o soluție în formă închisă de multe ori și obțineți o măsură a cât de mare este eroarea - abaterea standard - și toate aceste lucruri bune. Dar este întotdeauna supus problemei datelor proaste. Și deci aceasta este cu siguranță o metodă de luat în considerare în prezența datelor reale, care uneori au valori aberante. Da OK. Și există diferite variante ale acestui lucru. De fapt, numele acestuia, consens, sugerează într-un fel o abordare diferită, mai mult ca o transformare Hough. Deci, înainte de a citi ziarul, ceea ce am crezut că fac a fost următorul. Luați un subset aleatoriu. Faceți o potrivire și asta vă oferă un răspuns, cum ar fi panta și interceptarea unei linii drepte, să zicem, în acest caz. Și o faci din nou. Fă-o de un anumit număr de ori. Și apoi le trasați într-un spațiu de parametri. Și unele dintre ele se vor grupa strâns, iar unele dintre ele care au inclus valorile aberante vor fi departe. Și astfel vă puteți imagina o metodă de transformare Hough în care aveți o matrice de acumulatori în acest spațiu de parametri. Și ori de câte ori primiți un răspuns, creșteți celula respectivă în spațiul parametrilor. Și după ce ai făcut-o destul de des, cauți celula care are cele mai multe accesări. Și asta este cumva hibridizarea metodei RANSAC a lui Fischler și Bolles cu o metodă de transformare Hough. Și toate acestea sunt cam ad-hoc, dar sunt foarte utile în practică. Bine, ei bine, unul dintre lucrurile pe care le vom face puțin mai târziu este să găsim reprezentări pentru obiecte, în special pentru obiecte care nu sunt poliedre simple, ci mai complicate și, în special, obiecte care sunt aproape convexe, care ar putea să nu aibă un o mulțime de găuri. Și acea reprezentare este foarte utilă pentru detectarea lucrurilor și găsirea orientării lor. Și ne confruntăm cu aceleași probleme de orientare ca și aici. Și adesea, nu există o soluție în formă închisă. Deci o abordare este de a eșantiona spațiul de rotații. Și cum faci asta? Deci, din moment ce vorbim despre... permiteți-mi mai întâi să mă uit la eșantionarea unei sfere în 3D. Deci, o modalitate prin care o putem face este să folosim o anumită discretizare a latitudinii și longitudinii. Știi, am descoperit că sunt niște oameni care... Am uitat care este terminologia. Dar acolo unde aceste linii se intersectează, este ca un punct de convergență. Și dacă mergi acolo, ți se întâmplă ceva magic, mai ales dacă iei cristale. Și uneori, acestea sunt locuri greu accesibile, ca în mijlocul unei rezervații militare. Oricum, le probem. Și ce e în neregulă cu asta? Ne oferă o modalitate de eșantionare a întregului spațiu. Dar, evident, nu este o eșantionare uniformă. Aici sus, lângă poli, eșantionăm puncte care sunt foarte apropiate. Și asta înseamnă că este ineficient, că dacă am fi folosit unele dintre acele puncte din apropierea ecuatorului, am fi putut face o treabă mai bună , o muncă mai uniformă de eșantionare. Deci, există o mulțime de întrebări interesante care ies din asta. Una dintre ele este, ei bine, ne putem gândi la un sistem de coordonate mai bun, astfel încât, dacă eșantionați uniform în acele două coordonate, să obțineți o distanță frumoasă pe sferă? Ei bine, noroc cu asta. Poți să arăți că nu se poate. Deci ce altceva putem face? Ei bine, am putea genera aleatoriu theta și phi folosind o distribuție. Deci, să vedem, latitudinea trece de la minus pi peste 2 la pi peste 2 și longitudinea minus pi. Deci am putea împărți asta. Am putea avea un generator de numere aleatorii care merge între minus pi și plus pi și unul care merge între minus pi peste 2 și plus pi peste 2 uniform. Și, desigur, am avea exact aceeași problemă pentru că vom eșantiona regiunea polară mai puternic decât cealaltă regiune. Deci nu e prea bine. Deci, cum să rezolv asta? Ei bine, problema este că avem această suprafață curbată. Dacă am avea o lume carteziană, ar fi ușor de eșantionat. Dacă am un cub, pot avea doar o distribuție uniformă în x, o distribuție uniformă în y, o distribuție uniformă în z. Și sun de trei ori la un generator de numere aleatorii. Am un punct în acel spațiu. Și dacă fac asta mult, nu mă aștept să existe agregare, aglomerare sistematică, așa cum am făcut în cazul sferei. Deci, cum să treci de la asta la asta? Ei bine, un lucru de făcut este să înscrieți o sferă în cub și apoi să mapați cumva cubul pe sferă. Așa că o modalitate de a face asta ar fi să ne imaginăm originile în centrul acestui lucru. Și orice punct de pe sferă, tragem o linie și apoi aflăm unde intersectează sfera. În orice punct al cubului, eșantionăm... și acel punct ar putea fi în interiorul sferei. Deci, dacă se află în interiorul sferei, tragem acea linie și o proiectăm spre sferă în acest caz. Deci, pentru a fi clar, din nou, avem doar uniforme, așa cum majoritatea limbilor vă oferă posibilitatea de a genera numere aleatoare uniforme între 0 și 1. Le mapați pe acel interval în x, apoi încă un interval în y, un alt interval. în z. Există un punct în 3D. Și trebuie să o reduceți la suprafața unei sfere în timp ce doar vă normalizați. Deci aveți un vector trei. Doar luați versiunea vectorului unitar a acesteia și ați terminat. Deci asta îmi oferă o distribuție uniformă pe suprafața sferei? Nu, bine, așa că ne tremurăm din cap. Și asta pentru că, ei bine, cubul are aceste colțuri. Și astfel va exista o densitate mai mare de puncte în direcțiile colțurilor, atunci va fi acolo unde sfera este tangentă la cub. E mai bine, totuși. Acesta este doar de-- uit-- un factor de 4 peste pi, cred, sau pi peste 3-- nu-- 4 peste pi. Deci asta nu este prea rău. Deci, cum poți să faci mai bine? Cum poți să iei această idee și să o rezolvi, astfel încât să nu ai problema colțului? PUBLIC: Teselate formele. BERTHOLD HORN: Teselați formele... da, am putea tesela suprafața sferei folosind solide obișnuite, lucrurile magice despre care Platon și-a organizat societatea. Aceasta este cu siguranță o abordare bună. Există vreo modalitate de a elimina unele dintre aceste puncte pe care le generăm aici? OK, deci contracarand aceasta agregare in celelalte colturi, am putea introduce ceva greutate. Și, de exemplu, dacă am putea da punctelor atunci când sunt proiectate o pondere, am putea doar să o facem invers proporțională cu raza. Deci, dacă suntem departe, atunci... deci este o idee bună. O altă idee este să spunem, ei bine, am putea doar să aruncăm toate punctele care sunt în afara sferei. Și apoi, avem o distribuție aleatorie a punctelor într-o sferă. Deci, din nou, generăm puncte în cub. Dar apoi, verificăm dacă raza lor este mai mare decât 1. Și dacă este mai mare decât 1, o aruncăm afară. Și are un dezavantaj că nu generezi puncte la o rată fixă, că te costă mai mult, uneori, pentru că trebuie să te întorci și să-l regenerezi, și poate să-l regenerezi din nou. Deci există un dezavantaj. Dar ce se întâmplă atunci? Ei bine, atunci avem o eșantionare uniformă a interiorului sferei. Și asta este aproape destul de bun. Acum, trebuie doar să proiectăm toate aceste puncte pe suprafața sferei. Și dacă vrem să evităm o problemă numerică urâtă, am putea dori, de asemenea, să aruncăm toate punctele care sunt aproape de origine, deoarece, atunci, s-ar putea să avem numere pe care le împărțiți prin normalizarea vectorului pentru a-l face un vector unitar. S- ar putea să împărțiți la un număr mic, ceea ce va introduce unele erori și părtiniri. Astfel, generați puncte uniforme în cub. Arunci toate punctele deasupra unei anumite raze. Și arunci toate punctele care sunt sub o rază mică -- l-am desenat puțin acolo -- și apoi le normalizi. Și așa este eșantionarea punctuală a suprafeței sferei. Deci s-ar putea să nu ne pasă de sferă. Dar nu pot desena asta în 4D. Dar funcționează exact la fel, nu? Dacă vrem să avem o eșantionare uniformă și plăcută a spațiului 4D, într-un singur mod -- o eșantionare aleatorie -- o modalitate de a face acest lucru este exact acesta. Facem un echivalent cu patru dimensiuni al cubului. Deci generăm patru numere aleatoare pentru x, y, z și, să zicem, w. Și apoi, verificăm dacă suma noastră de pătrate este mai mare decât 1. Dacă da, încercați din nou. Dacă nu, atunci le transformăm într-o unitate Quaternion. Și asta ne oferă o modalitate foarte simplă de a obține o eșantionare uniformă a spațiului respectiv. Acum, s-a menționat poliedre regulate. Deci, acesta este un lucru important la care să te gândești. Deci ce sunt? Ei bine, sunt tetraedre, sunt hexaedre, octaedre, dodecaedre și icosoedre. Deci acestea sunt așa-numitele solide regulate, poliedre regulate. Asta înseamnă că toate fețele lor sunt la fel. Și acestea nu sunt singurele obiecte de interes, dar să începem cu acestea. Deci, dacă vrem să eșantionăm suprafața sferei, o altă modalitate este să proiectăm în exterior... ei bine, acestea evident nu sunt sfere. Dar vă puteți imagina că sunt plasate la origine și apoi proiectate pe sferă. Și obținem cercuri grozave oriunde există o margine pe unul dintre aceste obiecte. Și deci acesta este un mod de a împărți sfera într-un mod perfect regulat. Și care este problema? Ei bine, singurul lucru este că nu există prea multe fațete. Deci tetraedre, 4, 6, 8, 12, 20. Deci nu împărțim sfera foarte fin. Și așa cum a descoperit Platon, asta este. Nu mai sunt. Deci asta înseamnă că trebuie să subdivizăm. Și ați putea spune, ei bine, așteptați. Ce s-a întâmplat cu mingea de fotbal? Câte fețe pe o minge de fotbal? Uf, cum pot oamenii să joace jocuri și nici măcar să nu știe câți... oricum, 32. Deci este un amestec de dodecaedru și icosaedru. Și nu este în acest grup pentru că este un semi-obișnuit. Deci, cred că Platon primește credit pentru acestea. Și Arhimede primește credit pentru cel semi-regulat. Și există o grămadă de, nu știu, 14-- sau depinde de cum numeri. Deci aceste obiecte sunt toate propriile lor imagini în oglindă. Dar când ajungi la obiectul semi-regulat, există unul în care imaginea în oglindă este de fapt diferită. Cu alte cuvinte, nu îl puteți roti pentru a-l alinia cu el însuși. Și deci dacă numărați asta, este 14. Dacă nu numărați asta, este 13. Și mingea de fotbal este undeva aici, icosadodecaedrul. Deci, care este diferența? Ei bine, cele semi-regulate au încă fațete care sunt poligoane regulate, deci triunghiuri, pătrate, dodecaedre, hexagoane etc. Dar acum ai voie să ai mai multe tipuri. Deci aici, odată ce te-ai hotărât asupra triunghiurilor pentru fațete-- toate trebuie să fie triunghiuri-- aici, poți avea un amestec. Deci, mingea de fotbal este un amestec de hexagoane și figuri cu cinci fețe . Deci, asta vă oferă o varietate mai mare. Dar gândește-te la faptul că toate trebuie să aibă aceeași lungime de margine. Deci, de exemplu, dacă ați avut un obiect în care amestecați triunghiuri și pătrate, deoarece acestea au lungimi de margine potrivite, zona fațetei este diferită. Și, evident, există o formulă pentru asta, aria poligonului obișnuit în ceea ce privește numărul de muchii și lungimea muchiei. Bine, deci asta înseamnă că aici avem celule egale. Și astfel a fost foarte ușor să aibă o eșantionare uniformă. Acolo, este puțin mai complicat pentru că, acum, trebuie să ne ocupăm de faptul că fațetele nu sunt egale ca suprafață. Partea bună este că sunt mai multe. Deci asta este pe sferă în 3D. Vorbim despre o sferă în 4D. Așa că Platon și Arhimede nu s-au gândit prea mult la acestea. Deci nu putem recurge la ele. Dar acele cifre intră din nou în joc pentru că în 4D, vorbim despre rotații. Și căutăm modele regulate de rotații în acest spațiu. Și așadar, o modalitate prin care ne putem gândi la asta este în termeni de rotații ale acestor obiecte. Deci hai să facem una și să vedem cum merge. Deci, scopul aici este, din nou, să găsim câteva metode pentru a rezolva uniform spațiul de rotații, astfel încât, dacă, să zicem, facem o căutare - deci avem acest obiect în senzor și avem un model în bibliotecă , și încercăm să ne dăm seama, există vreo modalitate de a roti acest lucru pentru a-l alinia cu asta? Și asta ar putea face parte din recunoașterea faptului că avem mai multe obiecte în bibliotecă. Pe care dintre ele ne putem potrivi? Dar, desigur, nu le putem egala direct. Mai întâi trebuie să le facem rotite. Și apoi, cum alegem rotațiile? Ei bine, pentru a fi eficient. Nu vrem să eșantionăm părți din spațiul de rotație mai dens decât alte părți. Asta ar fi echivalentul cu a petrece tot timpul căutând în jurul polilor. Și așa că încercăm să găsim o modalitate uniformă de eșantionare a acestui spațiu ușor de imaginat. Dar să începem pur și simplu cu hexaedrul și să ne gândim la rotațiile lui. Și ei bine, în primul rând, este identitatea. Deci, ce vreau să spun prin rotații? Vreau să spun prin rotații că iei obiectul, apoi îl rotești și apoi fețele se aliniază cu fețele, iar marginile se aliniază cu muchiile, iar vârfurile se aliniază cu vârfurile. Bine, deci identitatea... în termeni de Quaternioni, asta arată. Are o parte vectorială 0 și o parte scalară de 1. Atunci ne putem gândi la o rotație, să spunem, despre x prin, să spunem, pi. Și așa va fi, să vedem, cosinus pi peste 2 este 0. Sinus pi peste 2 este 1. Deci acesta este acel Quaternion. Așa că doar o întoarce cu 180 de grade în jurul axei x. Și, firește, pot face același lucru cu y. Deci am deja patru rotații distincte care aliniază acel obiect cu el însuși. Ei bine, nu trebuie să mă rotesc la 180 de grade. Ei bine, ce zici de minus 180 de grade? Ei bine, desigur, este la fel, nu? Deci asta nu adaugă nimic. Dar m-aș putea gândi să rotesc pi peste 2. Deci hai să încercăm asta. Deci pi peste 2, acesta va fi cosinusul lui pi peste 4, care este 1 peste rădăcina pătrată a lui 2. Așa că înțeleg asta. Și acum, aici, aș putea vorbi despre minus pi peste 2 pentru că acestea două nu sunt la fel. Deci, acesta nu este negativul, deoarece partea reală nu și-a schimbat semnul, în timp ce cu acești tipi, dacă răsturn semnul lui x, primesc un Quaternion diferit, dar rețineți, minus q este aceeași rotație cu plus q . Așa că răsturn semnul pentru a obține un Quaternion diferit, dar este aceeași rotație. OK, deci pot face asta pentru x, y și apoi pot face asta pentru z. Deci primesc șase dintre ele. Am patru acolo. Deci avem 10 rotații, 10 mostre din spațiul care ne interesează. Și deci întrebarea este, sunt mai multe? Și există două moduri diferite de a proceda. Cel este geometric. Uită-te la diagramă. În câte alte moduri îl pot roti? Iar celălalt este să ne gândim la asta ca la un exercițiu de înmulțire a cuaternilor. Deci hai să facem una dintre ele. Așa că, de exemplu, aș putea să ies din masa aceea. Acum, pot încerca să generez întregul grup doar prin înmulțire, să iau ce am, să iau două perechi. Să luăm... pentru că nu este foarte interesant să luăm identitatea, dar haideți să luăm altceva. Bine, conform regulilor noastre de înmulțire, obținem 0 minus x punctul y, care este 0. Și apoi obținem 0 ori x plus 0 ori y plus x cruce y. Și deci este 0 și minus z. Hmm-- nu. Ei bine, asta e deja în tabel, nu? Deci asta nu se adaugă la tabel. Deci hai să luăm altceva. Să luăm câteva dintre acestea. 1 peste rădăcina pătrată a lui 2, 1, x, 1 a rădăcinii pătrate a lui 2, 1, y. OK, asta va fi mai interesant. 1 ori 1 este 1 minus x că y este 0. Și 1 peste pătratul lui 2 ne dă 1/2. Și atunci partea vectorială este de 1 ori y plus de 1 ori x plus x cruce y. Deci este 1/2, 1 și plus x pălărie, y pălărie, c pălărie. Deci asta e una nouă. Deci axa de rotație este 1, 1, 1. Și dacă doriți să faceți din el un vector unitar, este 1 peste rădăcina pătrată a lui 3. Și asta nu este în acest tabel. Și unghiul este cosinus theta al unui 2 este un 1/2, așa că să vedem. Asta înseamnă că theta peste 2 este pi peste 3. Deci theta este 2 pi peste 3. Deci, aceasta este o nouă rotație interesantă. Dacă te uiți la cub, acesta corespunde unuia dintre colțurile acestuia. Deci luăm originea și o conectăm la un colț, deci aceasta este axa. Și ne rotim cu 120 de grade. Și puteți vedea că aceasta este o rotație a cubului care ne aduce înapoi la alinierea cu noi înșine. Dacă ne rotim cu 120 de grade în jurul acelei axe, totul cade la loc. Și așa am ajuns aproape de timp. Dar putem proceda în două moduri. Unul este să te uiți la acel exemplu și la altele. Și obținem un total de 24 de rotații. Sau dacă suntem mai înclinați la matematică, putem merge pe această cale. Sau este distractiv să scrieți un mic program care doar implementează multiplicarea Quaternion și apoi construiește acest tabel luând produse în perechi și văzând dacă obțineți ceva nou. Și, în cele din urmă, veți epuiza și aveți 24 dintre ele în acel moment. OK, data viitoare, vom începe să vorbim despre orientarea relativă, care este mai relevantă pentru vederea binoculară.