"Radarowanie" pozycji |
Autor |
Wiadomość |
colobotwymiiata
Zjem cię
Twoja ulubiona misja: Swobodna na Krystalii
Pomógł: 6 razy Wiek: 20 Dołączył: 02 Lut 2009 Posty: 329 Skąd: Oleśnica
|
Wysłany: 21-02-2009, 10:53 "Radarowanie" pozycji
|
|
|
Chodzi mi o coś, co wykrywa w kolistej strefie, dookoła wybranego obiektu, np.: żeby robot sprawdzał czy w pobliżu rudy tytanu nie ma mrówki i czy można tam bezpiecznie pójść. Distance(ruda.position,mrowa.position) tutaj się nie sprawdza, bo mrówa to mrówka najbliżej robota, a nie rudy.
Fajnie by było w funkcji z wynikiem typu float.
Z góry dzięki(Jak się w ogóle da).
///Błędy! - DeiDara |
Ostatnio zmieniony przez DeiDara 26-02-2009, 09:24, w całości zmieniany 1 raz |
|
|
|
|
adiblol
Administrator forum FLOSS FTW!
Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy Dołączył: 21 Kwi 2008 Posty: 1313 Skąd: pokój odsłuchowy
|
Wysłany: 21-02-2009, 13:01
|
|
|
W ogóle się da, ale będzie to dość wolno działać. Poszukaj na oficjalnej stronie Colobota. |
_________________ 1Tbps Project && Telecomix Network
|
|
|
|
|
COLOBOT
Administrator sieci Założyciel portalu
Twoja ulubiona misja: Obie na Orfenii
Pomógł: 1 raz Dołączył: 07 Lut 2008 Posty: 353 Skąd: Jarocin
|
Wysłany: 09-02-2010, 16:33
|
|
|
Odświeżam, stary temat, ale pomysł zawsze się przyda. Można w łatwy sposób manipulować parametrami polecenia radar. Myślę, że obrazek wszystko wyjaśnia.
Nie jest to kolista strefa, ale i tak jest to obszar w pobliżu danego obiektu (czerwona kropka). Parametry odległości nie są trudne do określenia, jeśli chodzi o kąty to trzeba by wykombinować jakiś wzór dzięki któremu strefa działania radaru będzie jak najbardziej podobna do kwadratu. |
_________________ Bykom STOP
A niechaj narodowie wżdy postronni znają, iż Polacy nie gęsi, iż swój język mają.
|
|
|
|
|
FE4R
Twoja ulubiona misja: Saari - Inwazja
Pomógł: 4 razy Wiek: 24 Dołączył: 21 Paź 2009 Posty: 144
|
Wysłany: 09-02-2010, 19:24
|
|
|
COLOBOT, ludzie odkryli już funkcję search.
Wystarczy zastosować kod:
Kod: | object cel = radar(TitaniumOre);
object wrog = search(cel.position, AlienAnt);
if(distance(cel.position, wrog.position) < 35) instrukcje... |
|
|
|
|
|
Mrocza
Twoja ulubiona misja: Swobodna na Ziemi
Pomógł: 4 razy Wiek: 26 Dołączył: 29 Sie 2011 Posty: 249 Skąd: Lublin
|
|
|
|
|
Berserker
Dark Ness
Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy Wiek: 24 Dołączył: 24 Mar 2009 Posty: 496 Skąd: Bigos
|
Wysłany: 25-09-2011, 14:21
|
|
|
Nie, nie moze. Funkcja search() jest napisana tylko dla argumentow (int, point), funkcja radar ma zarowno (int, float, float, float, float, int, int) jak i ([] int, float float, float, float, int, int). Mozesz zawsze zdefiniowac wlasna funkcje search() (Przynajmniej powinienes moc, nie sprawdzalem w praktyce) |
_________________
|
|
|
|
|
Mrocza
Twoja ulubiona misja: Swobodna na Ziemi
Pomógł: 4 razy Wiek: 26 Dołączył: 29 Sie 2011 Posty: 249 Skąd: Lublin
|
Wysłany: 25-09-2011, 17:02
|
|
|
Chyba łatwiej byłoby po prostu użyć tej funkcji kilkukrotnie. Jeżeli w tablicy elementów jest niewiele. |
|
|
|
|
Berserker
Dark Ness
Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy Wiek: 24 Dołączył: 24 Mar 2009 Posty: 496 Skąd: Bigos
|
Wysłany: 25-09-2011, 19:57
|
|
|
Pomysl w ten sposob: jesli pojdziesz ta trudniejsza droga to wiecej sie nauczysz. Pozniej bedziesz mogl znalezc jeszcze latwiejsza droge dzieki temu, ze wczesniej poszedles trudniejsza. Zreszta kazda osobna funkcja oznacza duzo czytelniejszy program. |
_________________
|
|
|
|
|
Mrocza
Twoja ulubiona misja: Swobodna na Ziemi
Pomógł: 4 razy Wiek: 26 Dołączył: 29 Sie 2011 Posty: 249 Skąd: Lublin
|
Wysłany: 27-09-2011, 17:34
|
|
|
Nie wiem nawet jak mam się zabrać za robienie takiej funkcji. |
|
|
|
|
Berserker
Dark Ness
Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy Wiek: 24 Dołączył: 24 Mar 2009 Posty: 496 Skąd: Bigos
|
Wysłany: 27-09-2011, 21:37
|
|
|
2min ze stoperem w reku:
Kod: | extern void object::Rotfl()
{
object p;
int list[];
list[0] = Me;
list[1] = AlienSpider;
while(SA(list, position) != null)
{
p = SA(list, position);
turn(direction(p.position));
fire(1);
}
}
object SA(int [] list, point c)
{
object p = null;
object res = null;
int i;
float d = 1000;
for(i = 0; i < sizeof(list); i++)
{
if(list[i] == nan) continue;
p = search(list[i], c);
if(p != null)
{
if(distance2d(p.position, c) < d)
{
d = distance2d(p.position, c);
res = p;
}
}
}
return res;
}
|
Dobry przyklad jak uzywac tablic jako parametrow funkcji. Zapisac, oprawic i codziennie calowac. |
_________________
|
|
|
|
|
Mrocza
Twoja ulubiona misja: Swobodna na Ziemi
Pomógł: 4 razy Wiek: 26 Dołączył: 29 Sie 2011 Posty: 249 Skąd: Lublin
|
Wysłany: 27-09-2011, 22:47
|
|
|
Zaimponowałeś mi. Szacunk
[ Dodano: 27-09-2011, 22:47 ]
Zaimponowałeś mi. Szacunek |
|
|
|
|
adiblol
Administrator forum FLOSS FTW!
Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy Dołączył: 21 Kwi 2008 Posty: 1313 Skąd: pokój odsłuchowy
|
Wysłany: 28-09-2011, 00:48
|
|
|
Akurat to co Berserker napisał to jest łatwiejszy sposób. Trudniejszym ale możliwym jest wyznaczenie fragmentu koła.
angle = direction(pos);
dist = distance2d(pos);
I podstawiamy do radar(...) dodając jakiś margines, zależny od tego jak daleko ma to działać. Jednak to w dalszym ciągu podaje najbliższą robotowi a nie danemu punktowi. Jedyne wyjście to retobject(...) ale to jeszcze mniej wydajne niż search(...).
Berserker napisał/a: | Zapisac, oprawic i codziennie calowac. | Na pierwszy rzut oka przeczytałem "całkować"... |
_________________ 1Tbps Project && Telecomix Network
|
|
|
|
|
Berserker
Dark Ness
Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy Wiek: 24 Dołączył: 24 Mar 2009 Posty: 496 Skąd: Bigos
|
Wysłany: 28-09-2011, 15:35
|
|
|
Ja przedstawilem droge trudniejsza jesli chodzi o uzyte struktury. Jak ktos tego nie rozumie to moze sie meczyc wykorzystujac narzedzia od trygonometrii po calki, zeby w radarze sie bawic, co jest latwiejsze ale bardziej czasochlonne :S A tak to jest elegancka funkcja. |
_________________
|
|
|
|
|
Mrocza
Twoja ulubiona misja: Swobodna na Ziemi
Pomógł: 4 razy Wiek: 26 Dołączył: 29 Sie 2011 Posty: 249 Skąd: Lublin
|
Wysłany: 29-09-2011, 09:58
|
|
|
Ja jestem za rozwiązaniem Berserkera.
Kiedyś stanie się ono integralną częścią programu GrabersDefender.
Oczywiście za zgodą autora. |
|
|
|
|
Berserker
Dark Ness
Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy Wiek: 24 Dołączył: 24 Mar 2009 Posty: 496 Skąd: Bigos
|
Wysłany: 29-09-2011, 15:37
|
|
|
E? Prawa autorskie? Do jednej funkcji? A bierz, co chcesz. |
_________________
|
|
|
|
|
|