![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 15.11.2012 Skąd: warszawa Ostrzeżenie: (0%) ![]() ![]() |
Witam,
No więc z php rozpocząłem swoją przygodę nie dawno (na początku października), w tej chwili pracuje na frameworku- Codeigniter, i stanąłem przed takim zadaniem muszę napisać w php i mysql algorytm który będzie przypisywał mi trzy współrzędne X,Y,Z dodawanego obiektu (punktu) na obszarze (np. obrazku) o wielkości 2560x1240 px . A teraz do rzeczy: Dane: punkt (0,0,0) znajduję się w lewym górnym rogu grupy powierzchni roboczej. X - szerokość Y- wysokość Z- losowa wartość od 1 do 10 area- grupa do której należy obiekt (od 1 do 20 ) baza zawierająca dane obiektu: (IMG:http://www.wyslij.nazwa.pl/praca/baza.png) obszar jest podzielony na 20 części, każda ma swoją gęstość która będzie miała wyliczana dzięki danym z bazy (ilość wystąpień np 1 w kolumnie area) , (IMG:http://www.wyslij.nazwa.pl/praca/obszar.png) No i na czym polega trudność - przy dodawaniu nowego obiektu muszę zbadać gęstość każdego obszaru (1-20) następnie wybrać ten z najmniejsza gęstością i przypisać ją do obiektu, przypisać w obszarze (np.2) losowe współrzędne (z zakresu X- 0:512 i Y - 0:248 Z- losowo od 1 do 10). Nie wiem jak się do tego wszystkiego zabrać, jakieś podpowiedzi z jakich bibliotek, funkcji php,mysql mógłbym skorzystać przy tym zadaniu? Z góry dziękuję za pomoc (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 933 Pomógł: 460 Dołączył: 2.04.2010 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem czy dobrze zrozumiałem, ale obszar o najmniejszej gęstości (tj. najmniejszej liczby przypisanych punktów) możesz zrealizować jednym prostym zapytaniem.
Jako wynik otrzymasz nazwę (identyfikator) obszaru oraz liczbę przypisanych punktów. Nie wiem jak ustanawiasz te obszary, ale jeśli np. w bazie są współrzędne początku i końca obszaru, to teraz je pobierasz na podstawie wyniku poprzedniego zapytania. Załóżmy, że otrzymujesz już taki wynik:
I to chyba tyle? Ten post edytował b4rt3kk 15.11.2012, 17:32:59 |
|
|
![]() ![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 15.11.2012 Skąd: warszawa Ostrzeżenie: (0%) ![]() ![]() |
Super to co napisałeś nie do końca działa ale pomogło mi zrozumieć o co chodzi, po przeszukaniu googla powstało coś takiego:
No i nie wiem tylko jak rozwiązać problem w miejscu gdzie zaczyna się komentarz linia 46. Pozdrawiam (IMG:style_emoticons/default/smile.gif) Ten post edytował dexter00 15.11.2012, 20:32:27 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 933 Pomógł: 460 Dołączył: 2.04.2010 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Co do Twojego rozwiązania to tak: - w zapytaniu dajesz alias like$i co skutkuje tym co skutkuje:
Wykonujesz to w takiej pętli, że indeks tablicy wynikowej to również identyfikator dla area. I myślę, że nie ma co losować spośród kilku co mają identyczną wartość minimalną, bierzesz pierwszą z brzegu, to co wybierze skrypt i po dodaniu punktu to już nie będzie area z min, także nie będzie brało jej pod uwagę i tak po kolei. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 15.11.2012 Skąd: warszawa Ostrzeżenie: (0%) ![]() ![]() |
Super wielkie dzięki za pomoc! (IMG:style_emoticons/default/thumbsupsmileyanim.gif) a wiesz może co zrobić z obszarami które na początku mają wartość 0 (w sensie nie ma żadnego wpisu gdzie area ma wartość np.1) bo zapytanie nie bierze ich pod uwagę (IMG:style_emoticons/default/sad.gif)
Ten post edytował dexter00 16.11.2012, 10:42:20 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 933 Pomógł: 460 Dołączył: 2.04.2010 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Zapytanie nie bierze ich pod uwagę, bo one nie istnieją w Twojej tabelce, bo są tam tylko punkty, a area tylko przy okazji. To już nieco utrudnia sprawę. Chyba najprościej było utworzyć tabelkę obszarów, bo trudno żeby zapytanie pobrało coś czego nie ma.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 15.11.2012 Skąd: warszawa Ostrzeżenie: (0%) ![]() ![]() |
No i teraz moje tablice mają sens , już wszystko działa , tylko zastanawiam się czy to nie będzie za bardzo obciążało serwera bo pętla for wykonuje w sumie 20 zapytań do bazy (IMG:style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 933 Pomógł: 460 Dołączył: 2.04.2010 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
COUNT(*) działa bardzo szybko, użytkownik nie zauważy żadnej różnicy, jeśli będzie to tylko 20 zapytań. Jeśli się rozkręcisz do 10 000 czy 100 000 to wtedy czas się nieco wydłuży.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 15.11.2012 Skąd: warszawa Ostrzeżenie: (0%) ![]() ![]() |
Heh jednak nie działało już poprawiłem (IMG:style_emoticons/default/smile.gif) zastanawiam się czy spłaszczenie tablicy nie można zrobić w inny ładniejszy sposób (IMG:style_emoticons/default/smile.gif)
Ten post edytował dexter00 16.11.2012, 14:38:57 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 933 Pomógł: 460 Dołączył: 2.04.2010 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Możesz ją spłaszczyć w łatwiejszy sposób. Mianowicie, trzeba zacząć od zmodyfikowania zapytania:
Wszystko odbywa się w jednej pętli. I teraz $i to identyfikator obszaru (area), natomiast wartość $flat[$i] to liczba punktów w tym obszarze. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 20:43 |