13. maj 2008 - 12:29Der er
20 kommentarer og 1 løsning
Beregne afstande mellem punkter
Jeg har nedstående tabel, hvori jeg gemmer positionen for et "tag" når folk bevæger sig rundt i et lokale. Jeg skal nu have fundet ud af, om et bestemt tag (defineret ud fra deres ID, etc 2341) har været tættere på hianden end etc 30 meter. Værdierne i tabellen er opgivet i meter. Formlen for, at finde afstanden er: distance = sqrt ( (x1-x2)^2 + (y1-y2)^b )
Jeg bliver derfor nødt til at lave en form for temp tabel der viser afstanden fra 2341's positioner og til alle de andre tags positioner, SÅ længe afstanden er etc 30 eller mindre.
I praksis giver det nok ikke den store forskel, men jo, 30*30 betragtes af compileren som en konstant, og er meget hurtigere at beregne, end kvadratroden af noget variabelt...
Og det samme gælder "x*x" versus "power(2,x)" -Afhængigt af hvor smart compileren er.
pgroen - ja det er et interessant forsøg vi har gang i :)
jogii - jo du ku godt ha ret i, at de to tags etc skal ha mødt hinanden inden for en tidsramme der hedder 30 minutter... men det er vel at indsætte en t2.time - t1.time < 30 eller sådan?
pgroen, Enig jeg havde helt glemt det med tidsrammen og jeg er også spændt på hvordan det kommer til at performe. Det vi har gang i her er et forsøg på universitetet med lokalisering af personer og herefter finde ud af hvem der har været i "kontakt" med hvem. Jeg vil lige kigge på den nye funktionalitet der, og se om den er brugbar for os. Jeg er heller ikke den store fan af MS SQL, men den er blevet pålagt. Jeg er også mere til Oracle og MySQL (til de mindre ting)
SELECT DISTINCT t1.tag_id, t1.time FROM TAGdata t1, TAGdata t2
WHERE ( (t1.positionX - t2.positionX) * (t1.positionX - t2.positionX)) + ( (t1.positionY - t2.positionY) * (t1.positionY - t2.positionY)) < 30 *30 AND t2.tag_id = 2341 AND t1.tag_id != 2341 AND t1.time < '2008-05-13 13:37' AND t1.time > '2008-05-13 13:34' AND t2.time < '2008-05-13 13:37' AND t2.time > '2008-05-13 13:34'
Nogle der har nogle gode invendinger til dette? Ud fra dette får jeg at vide hvilket tag 2341 har været inden for afstanden, på hvilke tidspunkter. Korrekt?
Det ser såmænd rigtig nok ud, bortset fra at når du har t1.time med i din DISTINCT select får du ca. 700 forekomster pr. tag, forudsat at du logger hvert halve sekund, og at personerne i øvrigt står stille i den givne 3-minutters periode...
uha.. hehe.. det må blive når jeg finder lidt tid :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.