Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Rozmieszczanie lokacji na mapie 2d
Forum PHP.pl > Forum > PHP
gadeawzuki
Witam. Natrafiłem na trudny element w programowaniu mojego projektu. Chodzi o sposób rozmieszczania elementów (o polu 1x1) na kwadratowej mapie o dowolnej wielości przykładowo 1000x1000 pól. Elementy mają się rozkładać od środka czyli od elementu o danych x500 y 500. Element = użytkownik, czyli jedno pole na mapie. Elementy muszą rozkładać się po kolei po okręgu. Jak to rozgryść od strony programistycznej? Czy tutaj ma szansę działać jakiś rand() ze sprawdzaniem sporej ilości warunków (bądź małej, jeżeli ktoś mi pomoże rozwiązać ten problem prosto smile.gif), czy może napotkał się ktoś na jakiś algorytm pomocny przy moim problemie.

Pozdrawiam.
timon27
Doprecyzuj.
JAkiej mapie?
Rozumiem że to twoja mapa, jak np. do gry, 1000x1000 jest wyrażone w pixelach?
Jakim okręgu? o jakim promieniu?
gadeawzuki
Może być wyrażone w pikselach, ale nie musi. Po prostu pole 1 na 1 niezaleznie jakiej jednostki, mapa ma 1000 na 1000 jednostek. Okrąg narasta wraz z przyrostem userów, czyli 1 user = 1 punkt na mapie o wielkości 1 na 1. Czym więcej userów tym większy okrąg się rozrasta od środka.
PrinceOfPersia
oto chodzi:
x = axisX + cos(angle) * radius
y = axisY + sin(angle) * radius
?
timon27
ok.
NAjlepiej na mysql, bo jeśli robisz gre to wiadomo że mysql musisz mieć.
Najpierw utwórz tabelę zajęteośći z kolumnami:
- współrzędna lewa
- współrzędna prawa
- odległość od środka
- user
Następnie wypełnij ją automatem:
  1. for($i=0;$i<1000;$i++){
  2. for($j=0;$j<1000;$j++)}
  3. $r=...//z pitagorasa
  4. mysql_query("insert into mapa values ($i,$j,$r,'')";
  5. }}

Na razie pole user jest puste == nikogo tam nie ma.
Gdy będziesz chciał kogoś wsadzić na mapę poszukasz najbliższego środka miejsca:
  1. $r=mysql_query('SELECT FROM mapa where user='' order by r LIMIT 1');
  2. $gdzie_l=mysql_result($r,0,'lewo');
  3. $gdzie_r=mysql_result($r,0,'prawo');


i potem go tam wsadzisz:

  1. mysql_query("UPDATE mapa SET user='$user' where lewo=$gdzie_l and prawo=$gdzie_r");
gadeawzuki
Rozwiązanie wydaje mi sie ciekawe, niestety musze iść spać, bo jutro do pracy, ale wieczorem będę o tym myślał, więc mogę mieć ewentualne pytania, więc liczę na pomoc na PW smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.