Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Rozmieszczanie lokacji na mapie 2d
gadeawzuki
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 1
Dołączył: 14.01.2009
Skąd: Kraków

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


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 (IMG:style_emoticons/default/smile.gif) ), czy może napotkał się ktoś na jakiś algorytm pomocny przy moim problemie.

Pozdrawiam.
Go to the top of the page
+Quote Post
timon27
post
Post #2





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

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


Doprecyzuj.
JAkiej mapie?
Rozumiem że to twoja mapa, jak np. do gry, 1000x1000 jest wyrażone w pixelach?
Jakim okręgu? o jakim promieniu?

Ten post edytował timon27 16.03.2014, 20:34:36
Go to the top of the page
+Quote Post
gadeawzuki
post
Post #3





Grupa: Zarejestrowani
Postów: 24
Pomógł: 1
Dołączył: 14.01.2009
Skąd: Kraków

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


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





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

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


oto chodzi:
x = axisX + cos(angle) * radius
y = axisY + sin(angle) * radius
?
Go to the top of the page
+Quote Post
timon27
post
Post #5





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

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


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");


Ten post edytował timon27 16.03.2014, 21:11:31
Go to the top of the page
+Quote Post
gadeawzuki
post
Post #6





Grupa: Zarejestrowani
Postów: 24
Pomógł: 1
Dołączył: 14.01.2009
Skąd: Kraków

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


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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: 18.09.2025 - 19:14