Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[ROZWIĄZANE] Jak wyznaczyć origin znajdujący się za plecami gracza?



  • Zamknięty Temat jest zamknięty
6 odpowiedzi w tym temacie

#1 Ossal

    Wszechwidzący

  • Użytkownik

Reputacja: 20
Życzliwy

  • Postów:273
  • GG:
  • Lokalizacja:Warszawa
Offline

Napisano 15.02.2015 01:23

Pytanie dość proste, odpowiedź nie koniecznie, siedzę nad tym trochę i nie wiele wymyśliłem :P
Chodzi o to, że potrzebuje funkcji wyznaczającej origin za plecami gracza jednostek X, za plecami czyli dokładnie przeciwny kierunek do miejsca w które gracz mierzy. Powiedzmy że mamy coś takiego:
amxx_1423959383__taga.png
 

A - Gracz
B - Miejsce w które mierzy
C - szukany punkt
x - odległość (zmienna do ustalenia późniejszego :D)

Czyli potrzebuję punkt po przeciwnej względem gracza stronie od miejsca gdzie mierzy (np get_user_aiming)
Oczywiście nie bierzemy pod uwagę wysokości (origin[2]) tylko [0] i [1].
Zacząłem już nawet rozpisywać funkcję i szukać na to matematycznego wzoru, ale utknąłem :P

Doszedłem do tego tylko że C znajduję się na tej samej prostej co A i B i kombinowałem z tym coś :)
Ma ktoś pomysł co zrobić?
Jeżeli odpowiedź  jest banalnie prosta to sory, zawiesiłem się :D

PS najlepiej origin we Float :D


Użytkownik Ossal edytował ten post 15.02.2015 01:28

  • +
  • -
  • 0

#2 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 15.02.2015 01:45

Warto użyć wektorów :) Oczywiście w matematycznym sensie.

Zakładam, że A i B są tablicami 3 elementowymi, zawierającymi współrzędne X, Y, Z.

1. najpierw wyznaczmy wektor patrzący w kierunku z A na B:

Z[0] = B[0] - A[0]
Z[1] = B[1] - A[1]
Z[2] = B[2] - A[2]
Zauważmy, że jest to wektor niezaczepiony (tj nie posiada współrzędnych początku i końca, posiada tylko przemieszczenie).

Teraz skróćmy (lub wydłużmy) wektor do długości x:

// tworzymy kwadrat bieżącej długości wektora. Szkoda operować na właściwych odległościach, lepiej uniknąć pierwiastkowania. 
sqdist = Z[0]*Z[0] + Z[1] * Z[1] + Z[2] * Z[2] 
sqx = x*x

// obliczamy proporcję między długością, którą chcemy otrzymać, a długością którą mamy. Tu już wyciągamy pierwiastek
multipler = sqrt(sqx / sqdist) 

// mnożymy Z przez tą proporcję
Z[0] *= multipler
Z[1] *= multipler
Z[2] *= multipler
Teraz wystarczy obrócić wektor i zaczepić go w punkcie A


Z[0] = -Z[0]
Z[1] = -Z[1]
Z[2] = -Z[2]

Z[0] += A[0]
Z[1] += A[1]
Z[2] += A[2]
I tak oto nasz wektor Z stał się punktem Z... a właściwie punktem C, czyli szukanym przez nas.
  • +
  • -
  • 2

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#3 Ossal

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 20
Życzliwy

  • Postów:273
  • GG:
  • Lokalizacja:Warszawa
Offline

Napisano 15.02.2015 23:11

Całkiem sensownie napisane, mógłby ktoś z tego zrobić stocka? :D


GwynBleidD (16.02.2015 12:19):
Lenistwo poziom master... wystarczy poskładać kod do kupy i wrzucić w funkcję...

  • +
  • -
  • 0

#4 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 16.02.2015 12:01

Puszczamy traceline na interesujaca nas odleglosc, lapiemy punkt, odejmujemy od niego origin gracza, zrobione.


GwynBleidD (16.02.2015 12:19):
Dość kosztowna obliczeniowo metoda :)
grankee (16.02.2015 23:06):
Czemu? Nikt nie mówił, że to ma być w prethinku, a jednorazowo chyba nie powali serwera :)
GwynBleidD (17.02.2015 12:44):
trochę jak strzelanie armatą do muchy, jeśli potrzebujemy stałą odległość od jakiegoś punktu to szkoda używać traceline. Traceline przydaje się gdy musimy np tą odległość określić lub zbadać co jest np na torze lotu pocisku.
grankee (17.02.2015 16:07):
ale zabijesz :D no dobra może i racja

  • +
  • -
  • 0

#5 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 16.02.2015 12:24   Najlepsza odpowiedź

http://amxx.pl/topic...rzedza-graczem/
  • +
  • -
  • 1

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#6 Ossal

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 20
Życzliwy

  • Postów:273
  • GG:
  • Lokalizacja:Warszawa
Offline

Napisano 18.02.2015 22:23

Dzięki :)


  • +
  • -
  • -1

#7 radim

    Godlike

  • Moderator

Reputacja: 939
Master

  • Postów:2 725
  • Steam:steam
  • Imię:Arkadiusz
  • Lokalizacja:Janów Lub.
Offline

Napisano 19.02.2015 20:26

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, report.png raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
  • +
  • -
  • 0

Chcąc napisać do mnie prywatną wiadomość, wpierw zapoznaj się ze stroną "O mnie" w moim profilu użytkownika [ radim ] !





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych