DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   (X)HTML, JavaScript, DHTML, XML, CSS (http://www.devprotalk.com/forumdisplay.php?f=8)
-   -   Slozena geometrija - formula (http://www.devprotalk.com/showthread.php?t=11692)

mslavko 25. 09. 2013. 11:58

Slozena geometrija - formula
 
Imam jedan veliki problem koji pokusavam da resim vec dosta dugo, pokusao sam dosta toga (arcgis i sl) ali nikako ne ide...

Radim sa google mapama i dobijem rutu izmedju dve tacke kao i tacke izmedju koje ih povezuju.

CODE:

Kôd:

var request = {
    origin: document.getElementById("from").value,
    destination: document.getElementById("to").value,
    travelMode: google.maps.DirectionsTravelMode.DRIVING
  }

  // Make the directions request
  directionService.route(request, function(result, status) {
    if (status == google.maps.DirectionsStatus.OK) {
      directionsRenderer.setDirections(result);

      var crtamLinijuUzPut= new google.maps.Polyline({
    path: result.routes[0].overview_path,
    strokeColor: '#000',
    strokeOpacity: 0.5,
    strokeWeight: 100
  });

  crtamLinijuUzPut.setMap(map);

     
    } else {
      alert("Directions query failed: " + status);
    }
  });


result.routes[0].overview_path - Ovde se nalaze sve tacke izmedju lokacija koje kada se povezu dobija se ruta.

Ono sto bi zamolio nekog ovde ukoliko je radio ili zna kako se radi da prevede ovu formulu koju sam nasao a koja radi upravo ono sto mi treba, a to je da uzima vrednosti koordinata od tacaka pravi poligon.

FORMULA: http://dev.gentoo.org/~dberkholz/tut...o/siggraph.pdf
| |
|_____________ _Pi_____ |
|arccos(1-s*flatness/width)
| |

Ovo je neki Convolution algoritam ali ne znam kako da ga upotrebim nazalost

ONO sto zelim da postignem:




Znaci uz pomoc ovog skupa tacaka da dobijem nov skup tacaka pomocu koga moze da se nacrta poligon koji bi ustvari oznacavao podrucje na mapi , npr. 5 km od puta...

Gajba piva za svakog ko pomogne;)

Anakin14 25. 09. 2013. 14:29

Tvoj problem je sto stalno trazis neka gotova resenja za sve sto ti padne napamet. Probaj malo da se poigras i napravices to sto trazis.

prvo kopiraj niz koordinata u novi array:

Citat:

arraygore = result.routes[0].overview_path.slice(0);
zatim mu povecaj koordinate pozelji (izracunaj koliko povecanje je 5km)

Citat:

for (var i = 0; i < arraygore.length; i++) {
arraygore[i].nb = arraygore[i].nb + 0.5;
}
zatim nacrtaj novu liniju

Citat:

var crtamLinijuUzPutGore= new google.maps.Polyline({
path: arraygore,
strokeColor: '#000',
strokeOpacity: 0.5,
strokeWeight: 100
});

crtamLinijuUzPutGore.setMap(map);
sve ovo ponovi sa smanjivanjem koordinata i dobices jos 2 linije gore i dole od tvoje linije za onoliko koliko si povecao/smanjio koordinate. Posto hoces da racunas objekte u blizini puta ne treba ti ovo sto si nacrtao da i od starta i i cilja imas ceo krug od 5km, vec ti je dovoljno da u pravcu kretanja levo i desno od puta gledas rastojanje, sto bi ovako trebao da dobijes. E ovo je samo pocetak price, moras da racunas i pravac prostiranja jer ovo vazi apsolutno tacno samo za put koji se prostire "horizontalno" na mapi, moras da napravis funkciju koja izracunava pravac prostiranja da bi znao koje koordinate da povecavas i smanjujes, jer ako koristis uvek istu funkciju u slucaja puta jug-sever dobices liniju koja svaku tacku pomera na gore umesto na levo i desno, ako me razumes.

mslavko 25. 09. 2013. 15:18

I
 
:beer::beer::beer:

Ja sam uradio isto to samo na malo drugaciji nacin ali opet ne radi savrseno tj. u nekim slucajevima je odlicno a u nekim dolazi do presecanja linija:

Kôd:

directionService.route(request, function(result, status) {
    if (status == google.maps.DirectionsStatus.OK) {
      directionsRenderer.setDirections(result);
        var r = [];
        var z = 0.5;
        var bla = result.routes[0].overview_path;
        for(var i=0 in result.routes[0].overview_path) {
            r.push(new google.maps.LatLng(bla[i].lat()+z, bla[i].lng()-z));
        }
        bla.reverse();
        for(var x=0 in bla) {
            r.push(new google.maps.LatLng(bla[x].lat()-z, bla[x].lng()+z));
        }

        var prva = new google.maps.Polyline({
            path: result.routes[0].overview_path,
            strokeColor: "#00000",
            strokeOpacity: 1.0,
            strokeWeight: 2
        });

        prva.setMap(map);

        druga = new google.maps.Polygon({
            paths: r,
            strokeColor: "#FF0000",
            strokeOpacity: 0.8,
            strokeWeight: 2,
            fillColor: "#FF0000",
            fillOpacity: 0.35
        });

        druga.setMap(map);
     
    } else {
      alert("Directions query failed: " + status);
    }
  });

Evo ovde npr. je ekstra:



ali ovde na drugom primeru kada ruta ide nanize ondak izgleda ovako:



Ali upravu si , sad zaista pocinje ono najteze a to je odrediti pravac prostoranja a moja znanja matematike su po tom pitanju jako slaba. Svaka pomoc dobrodosla.


tu postoji jos jedan problem priliko pravca prostiranja a to je kruzna ruta...

mslavko 25. 09. 2013. 15:55


mslavko 05. 10. 2013. 15:35

odg
 
Mogu reci da sam korak blize resenju: DEMO: http://jsbin.com/uTATePe/6
KOD: http://jsbin.com/uTATePe/6/edit

ali opet na dole prikazanoj slici imam problema sa suzenjem paralelnih linija s obzirom da rastojanje mora da bude svda jednako



KAKO TO DA RESIM?

ivanhoe 06. 10. 2013. 03:05

Nemam vremena da gledam kod, ali mi izgleda kao da je problem sto ne pravis ove "unutrasnje" petlje koje su prikazane na figure 5. iz tvog prethodnog posta.

Ocigledno treba detektovati konkavnu stranu krive (verovatno kad ugao bude manji od nekog X) pa napraviti taj trace-back da bi se kompenzovalo kasnjenje u skretanju.

EDIT: krenuo sam nesto da filozofiram oko toga kako se rade ti koraci unazad, ali bolje da ne lupam, sigurno ima negde objasnjeno tacno

mslavko 06. 10. 2013. 14:31

Pa ima: http://antigrain.com/research/adaptive_bezier/ ali mi je sve totalno konfuzno

mslavko 14. 10. 2013. 14:32

Na korak do resenja
 
Konacno posle dugo dugo lutanja sam nasao kod koji moze da mi zavrsi posaotj. kod koji pravi offset poligon na osnovu linije: http://jsbin.com/oVIcowo/1/edit

Ovde kao sto vidite pravi se poligon na osnovu niza tacaka:

Kôd:

var polygons = [[{"X":72,"Y":59.45},{"X":136,"Y":66},{"X":170,"Y":99},{"X":171,"Y":114},{"X":183,"Y":125},{"X":218,"Y":144},{"X":218,"Y":165},{"X":226,"Y":193},{"X":254,"Y":195},{"X":283,"Y":195},{"X":292,"Y":202},{"X":325,"Y":213},{"X":341,"Y":234},{"X":397,"Y":245},{"X":417,"Y":248}]];
Ja sam u mom primeru ovo napisao ovako:

Kôd:

  var polygons = response.routes[0].overview_path;
a ostali deo koda dodao : http://jsbin.com/uTATePe/9/edit

Medjutim opet nemogu da iscrtam poligon oko rute
U konzoli nema gresaka.


Vreme je GMT +2. Trenutno vreme je 14:44.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.