Rimmon Posted June 24, 2013 Posted June 24, 2013 Am si eu o nelamurire ,IsPlayerInRangeOfPoint , cum afla daca esti in acea razaIn cercsau patrat?[img width=500 height=312] Stiu ca e o prostie dar sunt curios... Massari e curva mea
MAC1 Posted June 24, 2013 Posted June 24, 2013 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.
Rimmon Posted June 24, 2013 Author Posted June 24, 2013 Mersi amandurora , pai chiar mi-ar prinde bine sa invat si ceva teorie... Cand aveti timp chiar va rog sa postati sa vad si eu cum stau lucrurile Massari e curva mea
MAC1 Posted June 24, 2013 Posted June 24, 2013 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: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^2Din 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.
Rimmon Posted June 24, 2013 Author Posted June 24, 2013 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
MAC1 Posted June 24, 2013 Posted June 24, 2013 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.
DarkyTheAngel Posted June 24, 2013 Posted June 24, 2013 PS: Am terminat liceul, sunt in proportie de 80% deja student la info.Ma crezi ca sunt la liceu si am "5" la matematica ?
MAC1 Posted June 24, 2013 Posted June 24, 2013 Ma crezi ca si eu sunt la liceu si am 5 la matematica ?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.
D@rksone Posted June 24, 2013 Posted June 24, 2013 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
DarkyTheAngel Posted June 25, 2013 Posted June 25, 2013 Ati deviat dintr-un subiect in altu' .Asta-i sectiunea de "off-topic" deci putem vorbi despre orice.
Rimmon Posted June 25, 2013 Author Posted June 25, 2013 Puteti da TC daca vreti... Massari e curva mea
Recommended Posts