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
dexter00
post
Post #2





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:

  1. public function addStar() {
  2.  
  3. // znajdowanie najmniejszej gęstości poprzez sprawdzenienie ile razy występuje dany rekord np. obszar 1
  4. for ($i = 1; $i <= 20; $i++) {
  5. $news_count[$i] = $this -> db -> query("SELECT COUNT(*) AS like" . $i . " FROM star WHERE area LIKE " . $i . "") -> row_array();
  6.  
  7. }
  8. //otrzymuje tablice 1 do 20 gdzie mam ilość wystąpień:
  9. /*Array
  10. (
  11.   [1] => Array
  12.   (
  13.   [like1] => 0
  14.   )
  15.  
  16.   [2] => Array
  17.   (
  18.   [like2] => 0
  19.   )
  20.  
  21.   [3] => Array
  22.   (
  23.   [like3] => 0
  24.   )
  25.  
  26.   [4] => Array
  27.   (
  28.   [like4] => 0
  29.   )
  30.  
  31.   [5] => Array
  32.   (
  33.   [like5] => 1
  34.   )
  35. itd...
  36.  */
  37.  
  38.  
  39. // wybieram najmniejsza wartość
  40. $choose = min(array_filter($news_count));
  41.  
  42. //zapisuje do zmiennej v indeks tablicy
  43. $v = array_keys($choose);
  44.  
  45. /* koniec konców zmienna v ma zapisaną ostatni obszar z najmniejszą gęstością,
  46. * i tu mam problem jak zrobić żeby zmienna v nie była tablicą
  47. * tylko miała wartość tak jak poniżej np 20 bez słowa like, no i jak zrobić że
  48. * kiedy mam dwa obszary które mają np 0 jak losować z pośród nich
  49. *
  50. *
  51. * Zwracana tablica:
  52. Array
  53. (
  54. [0] => like20
  55. )*/
  56.  
  57. $newX = mt_rand(0, 512);
  58. $newY = mt_rand(0, 248);
  59. $newZ = mt_rand(0, 10);
  60.  
  61. // na koniec zwracam wartości potrzebne do zapisania w bazie danych
  62. //oraz sprawdzam czy taka gwiazdka juz nie istnieje
  63.  
  64. $query = $this -> db -> query("SELECT COUNT(id) FROM star WHERE x = ".$newX." AND y = ".$newY."") -> row_array();
  65.  
  66. if ($query['COUNT(id)'] > 0) {
  67.  
  68. echo "Taka gwiazdka istnieje sprĂłbuj jeszcze raz!";
  69.  
  70. } else {
  71. return array($newX, $newY, $newY, $area);
  72.  
  73.  
  74. }
  75.  
  76. }





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
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: 14.10.2025 - 22:30