Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL]Algorytm przyporządkowujący losowo współrzędne na obszarze, Algorytm przyporządkowujący losowo współrzędne na obszarze
dexter00
post
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)



Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
b4rt3kk
post
Post #2





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


  1. public function addStar() {
  2.  
  3. // nie jest potrzebna żadna tablica, pojedyncze zapytanie da od razu pożądany wynik (spróbuj)
  4.  
  5. $resource = $this -> db -> query("SELECT COUNT(*) AS ile, area FROM star GROUP BY area ORDER BY ile ASC LIMIT 0,1") -> row_array();
  6.  
  7. // jeśli dobrze zrozumiałem w jaki sposób przekazujesz wyniki zapytania to poniższe wyświetli liczbę punktów w obszarze, oraz nazwę obszaru
  8. echo 'Liczba: '.$resource['ile'].'<br/>';
  9. echo 'Nazwa: '.$resource['area'];
  10.  
  11. $newX = mt_rand(0, 512);
  12. $newY = mt_rand(0, 248);
  13. $newZ = mt_rand(0, 10);
  14.  
  15. // na koniec zwracam wartości potrzebne do zapisania w bazie danych
  16. //oraz sprawdzam czy taka gwiazdka juz nie istnieje
  17.  
  18. $query = $this -> db -> query("SELECT COUNT(id) FROM star WHERE x = ".$newX." AND y = ".$newY."") -> row_array();
  19.  
  20. if ($query['COUNT(id)'] > 0) echo "Taka gwiazdka istnieje sprĂłbuj jeszcze raz!"; else return array($newX, $newY, $newY, $area);
  21.  
  22. }


Co do Twojego rozwiązania to tak:

- w zapytaniu dajesz alias like$i co skutkuje tym co skutkuje:

  1. "SELECT COUNT(*) AS ile FROM star WHERE area LIKE " . $i . ""


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.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.10.2025 - 08:56