Oryginalna strona colobot.cba.pl umarła, gdy cba.pl przestało oferować darmowy hosting. To jest statyczny mirror, pobrany w 2018. ~krzys_h
 Polski Portal COLOBOTa - COLOBOT Polish Portal
Forum - Polski Portal COLOBOTa
Strona głównaStrona główna UżytkownicyUżytkownicy GrupyGrupy StatystykiStatystyki


Poprzedni temat «» Następny temat
Cel - pal!
Autor Wiadomość
pipok 


Dołączył: 24 Cze 2009
Posty: 53
Wysłany: 22-10-2009, 14:03   

Kod:
x = radar(Me);

h = x.position.z - topo(x.position);

a = distance2d(x.position, position);

c = a/h;
Tutaj zmienna h zawiera wysokość astronauty nad poziomem gruntu, jaki jest w miejscu gdzie się znajduje. To nie jest właściwe celowanie. To powinna być różnica wysokości astronauty i bota, względem tego samego poziomu odniesienia:
Kod:
h = x.position.z - position.z;



FE4R napisał/a:
W teorii to równanie:
c = a/h;
c=tan(n);
jest poprawne
Pomieszałeś matematyczny symbol równości z operatorem przypisania z języka programowania COLOBOTA. Oba zapisuje się znakiem '='.

To jest poprawny układ równań matematycznych :
Kod:
c = a/h
c = tan(n)
ale jako sekwencja instrukcji programu, nakazujących przypisanie wartości zmiennym, jest niedobre. W drugiej linijce nakazujesz, żeby program zmiennej c nadał wartość funkcji tangens dla argumentu n. Tylko że nigdzie wcześniej nie określiłeś, jaką wartość ma to n... Więc co ma wziąć, co ma wpisać do c w tej linijce? Tymczasem to właśnie kąt n masz policzyć, to jest ten nieznany kąt, o jaki trzeba nachylić lufę. Ale nigdzie go nie obliczasz...

Mamy wyliczoną wartość c i wiemy, że
Kod:
c = tan(n)
teraz szukamy n. Trzeba skorzystać z funkcji odwrotnej do funkcji tangens:
Kod:
c=tan(n) => n=atan(c)
Program powinien wyglądać tak:
Kod:
c = a/h;
n = atan(c);
aim(n);
To jest podane gotowe - łącznie z rysunkiem - w pierwszym liście tego tematu. Dokładnie to samo, co próbowałeś nam pokazać swoim programem. Z tą różnicą, że poprawnie zrobione :)
 
     
FE4R
Gość


Wysłany: 23-10-2009, 15:16   

Poniewaz moja trygonometria jest na poziomie gimnazjalnym, czyli dosc niskim, moglbys mi przyblizyc, co dokladnie oznacza funkcja 'atan', zamiast 'tan'?

A celem c=tan(n), bylo aby program obliczyl z jakiego kata tangens rowna sie a/h i ustawil lufe pod tym katem.

PS. Wybrobowalem twoj program w domu na swoim robocie i jest on troche niedokladny, znaczy sie -lufa nie podarza za celem. Dam link do filmu jak wroce ze szkoly(co jest powodem mojego pisania bez polskich znakow, za co przepraszam).
 
     
DemoLisH
Zbanowany


Wiek: 24
Dołączył: 20 Kwi 2008
Posty: 273
Skąd: Poznań
Wysłany: 23-10-2009, 15:22   

atan to arctangens czyli odwrotność tangensa, zamienia wartość tangensa na kąt
_________________
Compiling [Gość.exe]...

Zapraszam na grę zwaną League of Legends:
http://signup.leagueofleg...e98cec278372604
 
 
     
FE4R 


Twoja ulubiona misja: Saari - Inwazja
Pomógł: 4 razy
Wiek: 24
Dołączył: 21 Paź 2009
Posty: 144
Wysłany: 23-10-2009, 17:52   

A oto i film z problemem
http://www.youtube.com/watch?v=_oZwWoCf1Mc
 
     
pipok 


Dołączył: 24 Cze 2009
Posty: 53
Wysłany: 27-10-2009, 06:25   

FE4R napisał/a:
moglbys mi przyblizyc, co dokladnie oznacza funkcja 'atan', zamiast 'tan'?
atan() to ARCUS tangens, funkcja odwrotna do funkcji tangens. Czyli: atan(a/h) zwraca kąt, którego tangens równa się a/h.
FE4R napisał/a:
Wybrobowalem twoj program w domu na swoim robocie i jest on troche niedokladny, znaczy sie -lufa nie podarza za celem.
Hej, ale kod, który jest podany w pierwszym liście wątku to kod podstawowy, dla początkujących. Działa poprawnie przy pewnych założeniach. To jest najprostszy kod dla celowania. W szczególności nie obejmuje poprawek na ruch celu ani na przechylenie bota.

W Twojej sytuacji cel się porusza. To znaczy, że po uzyskaniu pozycji celu i obliczeniu kąta wzniesienia lufy, powiedzmy 20º, bot zaczyna wykonywać funkcje aim(20). Ale obrót lufy jest dość powolny. Zanim lufa osiągnie zadane pochylenie, to cel znajdzie się już w innym miejscu. Lufa ugania się za cieniem celu. Postaw bota celującego na płaskim terenie, a bota-cel na jakiejś górce, nieruchomo, i sprawdź czy lufa poprawnie go namierza.
 
     
FE4R 


Twoja ulubiona misja: Saari - Inwazja
Pomógł: 4 razy
Wiek: 24
Dołączył: 21 Paź 2009
Posty: 144
Wysłany: 27-10-2009, 10:46   

No akurat na nieruchomy cel ten program będzie działał, ale rzadko który cel jest nieruchomy.
Chciałem stworzyć program to obrony przed osami. Mógłbym ustawić działo na najwyższy kąt, ale to będzie chronić jedynie samego robota, a nie wszystkie przyjazne obiekty w promieniu strzału ~40 metrów.
Czy zatem powinienem jakoś zwiększyć precyzję robota? A może przyśpieszyć interpretowanie linijek?
 
     
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: 27-10-2009, 14:23   

FE4R napisał/a:
A może przyśpieszyć interpretowanie linijek?

To nic nie da, bo nie da się przyspieszyć fizyki w grze.
_________________
1Tbps Project && Telecomix Network

 
 
     
FE4R 


Twoja ulubiona misja: Saari - Inwazja
Pomógł: 4 razy
Wiek: 24
Dołączył: 21 Paź 2009
Posty: 144
Wysłany: 28-10-2009, 00:19   

Chociaż z filmu wynika, iż lufa robota nie podąża za celem ani jego cieniem, bo unosi się na wysokość, na której robot wcale nie był. Więc uważam, że to problem z obliczeniami.
 
     
pipok 


Dołączył: 24 Cze 2009
Posty: 53
Wysłany: 28-10-2009, 14:01   

FE4R napisał/a:
z filmu wynika, iż lufa robota [...] unosi się na wysokość, na której robot wcale nie był. Więc uważam, że to problem z obliczeniami.
Powiadam Ci - bota śledzącego postaw na płaskim podłożu, a cel utrzymaj w stałym położeniu i upewnij się, że to rzeczywiście problem z obliczeniami. Jeśli celowanie działa poprawnie dla nieruchomego celu, to znaczy, że "obliczenia" są ok. Przełącz kamerę na widok z zewnątrz i strzel, żeby się upewnić. Zawsze programy dla botów bojowych obserwuj z zewnętrznej kamery, a nie z perspektywy bota. Niestety, widok z kamery pokładowej bota powoduje problemy z celowaniem (jeśli dobrze pamiętam, nie jest w nim uwzględniane istnienie pochylenia, pitch).
 
     
Bartek c++ 


Twoja ulubiona misja: Tropica - Czas na atak
Pomógł: 6 razy
Wiek: 20
Dołączył: 07 Lip 2009
Posty: 390
Wysłany: 30-10-2009, 10:18   

shoter napisał/a:
Bartek c++ napisał/a:
yyyyyyyyyyyyyyyyyyyyyyyyyyyyy! co tu pisze do diabła!!!!!!!!!!!!!

Dajcie mu już bana...ja także tego nie rozumiem ale nie pisze durnych postów jak ten debil!
// już ma warna :) -adiblol

Nie jestem Debilem Shooter!!!!!!!!!!!!!!!!
_________________

 
     
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: 30-10-2009, 12:44   

Bartek c++ napisał/a:
Nie jestem Debilem Shooter!!!!!!!!!!!!!!!!

Na podstawie powyższego śmiem twierdzić, że jesteś. Shoter z jakiegoś powodu napisał swój nick przez jedno "o" i nie musisz go poprawiać. Poza tym nie używaj tylu wyrzykników. 3..4 wystarczą. Napisałeś "Debilem" z wielkiej litery, dlaczego?

Poza tym poprawiasz się, już wszyscy zapomnieli o tamtym poście, a tu taka plama :roll: .
_________________
1Tbps Project && Telecomix Network

 
 
     
Bartek c++ 


Twoja ulubiona misja: Tropica - Czas na atak
Pomógł: 6 razy
Wiek: 20
Dołączył: 07 Lip 2009
Posty: 390
Wysłany: 07-11-2009, 14:56   

Wtedy tego nie rozumiałem przepraszam.
_________________

 
     
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: 18-11-2009, 22:27   

Jakby ktos specjalnie dla mnie znalazl odleglosc uderzania w ziemie pocisku dziala fazowego od samego dziala (bez tych wszystkich odbic) to bym nawet sklecil program do obliczania kata nachylenia lufy :)

@edit

Kod:
float object::PhazerAngle(point a, point b)
{
float dist, dist2d, angle;
dist2d = distance2d(a, b)-10;
angle = asin(dist2d/50)/2;
return angle;

}


Wersja nadajaca sie do celowania tylko na plaskim terenie, dzisiaj po poludniu moze zrobie jeszcze dla latajacych, a z reszta mozecie sie pomeczyc sami :)
 
 
     
pipok 


Dołączył: 24 Cze 2009
Posty: 53
Wysłany: 19-11-2009, 09:20   

Cytat:
Kod:
float object::PhazerAngle(point a, point b)
{
float dist, dist2d, angle;
dist2d = distance2d(a, b)-10;
angle = asin(dist2d/50)/2;
return angle;

}


Berserker, z czego wynikają wzory w tej funkcji? Skąd jest wzięta stała -10, stała 50, stała 2? Dlaczego jest użyty akurat arcus sinus?
Mnie to wygląda na przypadkowy kod :)
 
     
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: 19-11-2009, 13:21   

[code]l = Vo^2 * sin2alfa/g[code]
Wzor na zasieg w rzucie ukosnym.
Jak sama nazwa wskazuje, arcus sinus sluzy do obliczania kata posiadajac sinus danego kata.
Za g podstawilem 10 (w koncu testowalem na Ziemi), Vo^2 wyszlo 500, niby wynik kosmiczny ale nie wnikam, stale to stale.
Wiec po przeksztalceniu:
[code]sin2alfa = l * g/Vo^2[/code]
Stala -10 zostala dodana po tescie, pocisk po prostu lecial nad celem i taka mrowke czy robala to by nie trafil. Nauczylem sie nie polegac na stalych w colobocie ze wzgledu na ogromna niedokladnosc wynikow O_O
_________________
 
 
     
Wyświetl posty z ostatnich:   

Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Polski Portal COLOBOTa © 2008 - 2012