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 :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, żeteraz 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
|
|
|
|
|
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 . |
_________________ 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 |
_________________
|
|
|
|
|
|