[ROZWIĄZANE] Jak wyznaczyć origin znajdują...
Najlepsza odpowiedź sebul 16.02.2015 12:24
Ossal
15.02.2015
Pytanie dość proste, odpowiedź nie koniecznie, siedzę nad tym trochę i nie wiele wymyśliłem
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:
A - Gracz
B - Miejsce w które mierzy
C - szukany punkt
x - odległość (zmienna do ustalenia późniejszego )
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
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ę
PS najlepiej origin we Float
Użytkownik Ossal edytował ten post 15.02.2015 01:28
GwynBleidD
15.02.2015
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] *= multiplerTeraz 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.
grankee
16.02.2015
Puszczamy traceline na interesujaca nas odleglosc, lapiemy punkt, odejmujemy od niego origin gracza, zrobione.
radim
19.02.2015
Ten temat został zamknięty przez moderatora.
Powód: Pomoc udzielona
Jeśli się z tym nie zgadzasz, raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.
Z pozdrowieniami,
Zespół AMXX.PL