Jump to content

Range


Rimmon

Recommended Posts

Teoretic, nu e nici in cerc, nici in patrat, e in sfera, pentru ca e vorba de un sistem de referinta tridimensional.

Daca vrei, o sa fac o "analiza" amanuntita a functiei si o s-o postez pe-aici.

Dar nu stiu sigur cand o sa am ceva timp liber, ca-s destul de ocupat in perioada asta.

Link to comment
Share on other sites

Asa...am zis ca daca tot e sarbatoare azi, sa mai iau putin o pauza de la activitatile mele si sa-ti explic cum sta treaba cu functia asta.

Explicatia e asemanatoare cu cea de la GetPlayerSpeed (vezi topicul cereri tutoriale), pentru ca pe asta se bazeaza cam toata geometria tridimensionala.

Bun. Avem urmatoarea situatie generala:

7Ddeob7.png

Ca sa intelegi cat de cat, trebuie sa fixam cateva lucruri:

- chestia aia nu e un cerc, ci o sfera cu centrul O in originiea sistemului.

- liniile punctate sunt puse acolo sa arate faptul ca sfera aia nu e cerc, si ca are volum.

- linia portocalie (notata cu R) e raza sferei, adica segmentul care pleaca din originie si ajunge pana la marginea sferei, iar in joc, ea reprezinta distanta (range).

Originea (O) a sistemului xOy reprezinta coordonata tridimensionala in care vrem sa verificam daca se afla jucatorul.

Cum R este distanta pentru care vrem sa facem verificarea, se creeaza automat acolo o sfera de raza R si centru O. (imagineaza-ti ca din punctul O, adica de la coordonatele alea x,y,z din functie, duci segmente de lungime R in toate directiile, adica duci un numar infinit de segme...asa se creeaza o sfera).

In functia noastra, avem data raza (range), deci tot ce trebuie sa facem este sa vedem cum este distanta de la jucator la centru sferei fata de raza (daca e mai mare, inseamna ca jucatorul nu e in sfera, iar daca e mai mica, jucatorul se afla in sfera).

Toate bune si frumoase, noi stim lungimea razei (adica distanta de la origine (O) la un punct oarecare de pe sfera) (pentru ca e parametru in functie), insa nu stim distanta la care se afla jucatorul fata de origine (adica distanta de la O la A, lungimea segmentului OA).

Pentru a calcula distanta la care se afla jucatorul fata de origine (O), trebuie sa "descompunem" segmentul OA in functie de segmentele aflate pe cele 3 axe (ox,oy si oz).

Asta-i partea de geometrie de clasa a 7-a, o sa trec mai repede pe-aici pentru ca am mai explicat-o in topicul cu GetPlayerSpeed.

___________

B proiectia lui A in planul DBC => triunghi OBA dreptunghic => OA^2 = OB^2 + BA^2  => OA^2 = OB^2 + OE^2.

D proiectia lui B in planul EOD => triunghi ODB dreptunghic => OB^2 = OD^2 + DB^2 = OD^2 + OC^2

Din cele de mai sus => OA^2 = OC^2 + OD^2 + OE^2.

Acum ca am "descompus" OA-ul pe cele 3 coordonate, trebuie sa obtinem coordonatele in punctul A. (se afla cu functie -> GetPlayerPos(params)). Sa presupunem ca le-am salvat in punctul P(x,y,z) = P(C,D,E) -> adica proiectiile punctului A pe toate cele 3 axe. Originea, cum am spus la inceput, are si ea 3 coordonate x0,y0,z0, adica o scriem ca O(x0,y0,z0) -> x0,y0,z0 sunt parametrii din functie.

Analitic, aflam distanta OA care este egala cu OA = (C-x0)^2 + (D-y0)^2 + (E-z0)^2 = o sa ne dea un numar.

Si de aici, pur si simplu comparam cele doua segmente: OA si R, daca OA e mai mare decat R => jucatorul nu e in sfera, altfel => e in sfera.

Acum, ideea e ca eu am simplificat putin treaba, ca sa fie mai usor de inteles, pentru ca sfera aia trebuia sa fie pusa si ea intr-un alt sistem de axe xOy, dar nu schimba prea mult problema, ca s-ar fi identificat niste versori din ambele sisteme, insa daca s-ar uita un profesor de mate peste chestia asta mi-ar reprosa lucrul asta.

_____

Daca nu ai inteles anumite lucruri lasa un reply sau da-mi PM si-ti raspund cand am timp.

Link to comment
Share on other sites

Hmm...daca as fi si eu prin clasa a 11-a sau a 12-a cum esti tu probabil as fi inteles mai multe...

Am inteles cat de cat cum sta treaba si cum se afla daca tu esti in acea raza dar pentru mine ca abia am trecut in clasa a 9-a e cam greu :))

Mersi ca ti-ai facut timp si ai explicat...

PS:Ar trebui sa le adaugi la tutoriale ( tutorialele cu viteza si cu raza )

Massari e curva mea

Link to comment
Share on other sites

Nu au ce sa caute la tutoriale, pentru ca nu-s tutoriale...sunt doar niste explicatii. Nu-s menite sa ajute utilizatorii de pe forumul asta in scripting.

Si daca stii geometrie tridimensionala, si daca nu stii, la nivelul la care se programeaza in PAWN, nu ai nevoie de informatii asa "complexe" (ma rog, ele nu-s complexe deloc, sunt destul de simple).

In fine, ideea principala la tot ce am scris mai sus e ca functia IsPlayerInRangeOfPoint(params) verifica daca raza sferei formata din coordonate si "range" e mai mare decat distanta de la jucator, la centrul sferei.

PS: Am terminat liceul, sunt in proportie de 80% deja student la info.

Link to comment
Share on other sites

Ma crezi ca si eu sunt la liceu si am 5 la matematica 21.gif?

Am trecut si eu prin asta...in clasa a XI-a cand am dat de analiza matematica. La algebra aveam 8-9, pe cand la analiza numai 5 si 6 (ma rog, am luat si un 2). Insa in clasa a XII-a a inceput sa imi placa mult analiza si am avut numai 10 pe linie, dar m-a stricat algebra cu vreo 2 note de 8 si mi-a iesit media 9 (si pe primul si pe al doilea semestru).

//later edit: Am deviat de la subiect pentru ca omul m-a intrebat ceva si era urat sa nu-i raspund.

Link to comment
Share on other sites

Ati deviat dintr-un subiect in altu' . Ati inceput sa va insirati toate notele si viata de elev, oricine a trecut prin momente grele la scoala/liceu/facultate,  nimeni nu e geniu (din cate stiu) .

Avand in vedere ca MAC1 te-a rezolvat Rimmon, pot da T/C?

Rareori ne gândim la ceea ce avem, dar mereu la ceea ce ne lipseşte

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.