Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marathon: arriva il Fortnite hardcore
Marathon: arriva il Fortnite hardcore
Marathon è il titolo multiplayer competitivo del momento. Ecco quali sono le caratteristiche di gioco principali, insieme alle nostre prime considerazioni dopo qualche "run" nell'extraction shooter di Bungie
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
A New York HP ha messo al centro della scena HP IQ, la piattaforma di IA locale da 20 miliardi di parametri. L’abbiamo vista in funzione: è uno strumento che funziona, pensato per un target specifico, con vantaggi reali e limiti altrettanto evidenti
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
La PNY GeForce RTX 5080 Slim OC si distingue nel panorama delle GPU di fascia alta per il design compatto a due slot, ispirato alla NVIDIA GeForce RTX 5080 Founders Edition. In questo test analizziamo comportamento termico e prestazioni in gioco, valutando se il formato ridotto comprometta o meno l'esperienza complessiva rispetto alle soluzioni più ingombranti presenti sul mercato.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-10-2005, 15:13   #1
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
ho 3 vettori e devo ricavare un angolo

ESEMPIO 1
Ho 3 vettori che sono in pratica un triangolo che io ricavo

vDietro3 = pAI->Pos - pNodePath2[pAI->WayPos+1].Pos;
vDietro2 = pNodePath2[pAI->WayPos].Pos - pNodePath2[pAI >WayPos+1].Pos;
vDietro1 = pAI->Pos - pNodePath2[pAI->WayPos].Pos;

con le funzioni di trigonometria vorrei ricavare almeno un angolo tra 2 vettori

So solo che ottenendo l'angolo in gradi posso fare sin(angolo) e allora posso ricavare l'altezza del primo vettore oppure cos(angolo) e ricavare l'altezza del secondo vettore.

non sò come procedere

ESEMPIO 2
Un'altro modo che conosco è usare il dot di directx che è così:

vDietro3 = pAI->Pos - pNodePath2[pAI->WayPos+1].Pos;
vDietro2 = pNodePath2[pAI->WayPos].Pos - pNodePath2[pAI >WayPos+1].Pos;
vDietro1 = pAI->Pos - pNodePath2[pAI->WayPos].Pos;
vDietro4 = vDietro2;
D3DXVec3Normalize( &vDietro2, &vDietro3 );

angolo = dot( vDietro2, vDietro3 );
calcol=D3DXVec3Length(&vDietro4);
Altezza=sin(angolo)*calcol;

............ invece quì angolo è un numero che varia in continuazione e poi non capisco se è in gradi o radianti e quindi non riesci a capire se l'altezza trovata è giusta

????
okay è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2005, 15:28   #2
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16214
Il prodotto scalare di due vettori è pari al prodotto delle loro norme e del coseno dell'angolo formato.
Ossia: dati due vettori u e v che formano un angolo theta, vale sempre:

"u scalar v" = ||u|| ||v|| cos theta

Quindi, se hai u e v e vuoi ottenere theta, basta che fai:

theta = arc cos ("u scalar v" / (||u|| ||v||) )
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2005, 16:27   #3
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da Ziosilvio
Il prodotto scalare di due vettori è pari al prodotto delle loro norme e del coseno dell'angolo formato.
Ossia: dati due vettori u e v che formano un angolo theta, vale sempre:

"u scalar v" = ||u|| ||v|| cos theta

Quindi, se hai u e v e vuoi ottenere theta, basta che fai:

theta = arc cos ("u scalar v" / (||u|| ||v||) )
è quello che temevo, io sti segni da scienziati non li capisco se li mettessi tipo formula c++ sarebbe meglio per me e attinenti a quello che ho chiesto per il mio algoritmo.

theta = arc cos ("u scalar v" / (||u|| ||v||) )
significa:
theta = sin(u)/cos(v); //per caso??
se è così u e v come li ottieni oppure sono per caso le lunghezze dei miei 2 vettori ??

Ultima modifica di okay : 05-10-2005 alle 16:31.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2005, 16:38   #4
The3DProgrammer
Senior Member
 
Iscritto dal: May 2000
Messaggi: 1459
Quote:
Originariamente inviato da okay
è quello che temevo, io sti segni da scienziati non li capisco se li mettessi tipo formula c++ sarebbe meglio per me e attinenti a quello che ho chiesto per il mio algoritmo.

theta = arc cos ("u scalar v" / (||u|| ||v||) )
significa:
theta = sin(u)/cos(v); //per caso??
se è così u e v come li ottieni oppure sono per caso le lunghezze dei miei 2 vettori ??
no,
significa qualkosa del genere

Codice:
inline float scalar(const Vector& a,const Vector& b){

return a.x*b.x+a.y*b.y+a.z*b.z;

}

Vector a,b;

theta =acos(scalar(a,b)/sqrt(scalar(a,a))*sqrt(scalar(b,b))
a meno di errori grossolani, torno ora da Roma

ciauz

Ultima modifica di The3DProgrammer : 05-10-2005 alle 16:41.
The3DProgrammer è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2005, 16:44   #5
The3DProgrammer
Senior Member
 
Iscritto dal: May 2000
Messaggi: 1459
ah,

ho riletto il tuo post,se a e b sono normalizzati ovviamente theta = acos(scalar(a,b)), in quanto il modulo delle normali è pari ad 1

ciauz
The3DProgrammer è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2005, 16:52   #6
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da The3DProgrammer
ah,

ho riletto il tuo post,se a e b sono normalizzati ovviamente theta = acos(scalar(a,b)), in quanto il modulo delle normali è pari ad 1

ciauz
grazie a tutti e 2

ma theta, come ultima info, mi ritorna l'angolo in radianti o gradi. Grazie
okay è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2005, 17:27   #7
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
angolo = acos(scalar(vDietro2,vDietro1));

ma ho angolo che vale -1.#IND000
okay è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2005, 17:49   #8
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
così và bene:
angolo = cos(scalar(vDietro1, vDietro2));

ma questo valore è in gradi o radianti??
okay è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2005, 18:30   #9
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16214
Quote:
Originariamente inviato da okay
così và bene:
angolo = cos(scalar(vDietro1, vDietro2));

ma questo valore è in gradi o radianti??
In radianti, naturalmente.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2005, 19:16   #10
The3DProgrammer
Senior Member
 
Iscritto dal: May 2000
Messaggi: 1459
Quote:
Originariamente inviato da okay
così và bene:
angolo = cos(scalar(vDietro1, vDietro2));

ma questo valore è in gradi o radianti??

uhm...

non va bene... scalar ritorna già cos(theta), ergo cos(scalar(....)) = cos(cos(theta))

per ricavare theta devi usare la funzione inversa del coseno, che è appunto l'arcoseno ( la funzione C è appunto acos()).

ciauz
The3DProgrammer è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2005, 20:15   #11
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da The3DProgrammer
uhm...

non va bene... scalar ritorna già cos(theta), ergo cos(scalar(....)) = cos(cos(theta))

per ricavare theta devi usare la funzione inversa del coseno, che è appunto l'arcoseno ( la funzione C è appunto acos()).

ciauz

Aspettate un attimo.................. allora diciamola tutta (volevo verificare alcune certezze facendo alcuni calcoli)

dunque:

ho una spline.x formata da 466 vertici se navigo sulla spline sto a coordinate 0 se mi sposto dalla spline a destra o a sinistra ho un valora di scostamento che ho chiamato Dist quindi se Dist vale 0 io sto sulla spline.x.
Questo calcolo lo faccio tramite:
D3DXVec3Cross(&vRis1, &vBas, &vDir);

ed è corretto
per verificare che io lo possa fare in altri modi vi confermo questo:

posso distanziarmi tramite:
a=lenght(posizione attuale - vertice+1)
b=lenght(vertice+1 - vertice)
c=lenght(posizione attuale - vertice)

ecco con anche in questo modo ottengo lo scostamento (l'ho verificato) tramite appunto il formarsi dal calcolo sopra di un triangolo, quindi applicando la regola per trovare l'altezza, ottengo che l'altezza di questo triangolo equivale allo scostamento dal Path b=lenght(vertice+1 - vertice) come il calcolo del D3DXVec3Cross.

Stavo provando questo ed ultimo modo fatto con le leggi della trigonometria e cioè: In sintesi è così:



Quindi h = sin(19.5°) × 3.7 km.
sin(19.5°) = 0.3338, e quindi
h = 0.3338 × 3.7 km = 1.24 km, arrotondando il risultato ragionevolmente.

ECCO questo secondo me è l'altro modo per ricavare l'altezza/scostamento

il mio codice per far questo ora è:

vDietro1 = pAI->Pos - pNodePath2[pAI->WayPos+1].Pos;
vDietro2 = pNodePath2[pAI->WayPos].Pos - pNodePath2[pAI->WayPos+1].Pos;
vDietro3 = vDietro2;

D3DXVec3Normalize( &vDietro1, &vDietro2 );
angolo = sin(scalar(vDietro1, vDietro2));
calcol=D3DXVec3Length(&vDietro3);
Altezza=angolo*calcol;//Questo algoritmo (anche perchè l'angolo è già in radianti) è uguale alla figura ma con le verifiche che ho fatto non và bene

potete verificare anche voi.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2005, 20:36   #12
The3DProgrammer
Senior Member
 
Iscritto dal: May 2000
Messaggi: 1459
mi sembra corretto, con una eccezione:


angolo = acos(scalar(vDietro1, vDietro2))

poi puoi usare D3DXVec3Dot per il calcolo del prodotto scalare

ciauz
The3DProgrammer è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2005, 20:40   #13
The3DProgrammer
Senior Member
 
Iscritto dal: May 2000
Messaggi: 1459
per curiosità, che stai a fa?


ciauz
The3DProgrammer è offline   Rispondi citando il messaggio o parte di esso
Old 06-10-2005, 03:31   #14
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da The3DProgrammer
per curiosità, che stai a fa?


ciauz
AI per un un gioco

con tutto sto code avevo questa svista:
//Errore: normalizzavo vDietro1 su vDietro2
D3DXVec3Normalize( &vDietro1, &vDietro2 );
//Corrretto bisogna normalizzare i vettori
D3DXVec3Normalize( &vDietro1, &vDietro1 );
D3DXVec3Normalize( &vDietro2, &vDietro2 );


angolo = acos(scalar(vDietro1, vDietro2))
acos e asin ora mi ritorna un numero corretto

.... vado con le verifiche

ciao

Ultima modifica di okay : 06-10-2005 alle 03:49.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 06-10-2005, 05:21   #15
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
No purtroppo i conti nin tornano:

vDietro1 = pAI->Pos - pNodePath2[pAI->WayPos+1].Pos;
vDietro2 = pNodePath2[pAI->WayPos].Pos - pNodePath2[pAI->WayPos+1].Pos;
vDietro3 = vDietro2;//mantengo la distanza originale di vDietro2 su vDietro3
D3DXVec3Normalize( &vDietro1, &vDietro1 );
D3DXVec3Normalize( &vDietro2, &vDietro2 );
angolo = asin(scalar(vDietro1, vDietro2));//oppure acos
calcol=D3DXVec3Length(&vDietro3);
Altezza=angolo*calcol;
okay è offline   Rispondi citando il messaggio o parte di esso
Old 06-10-2005, 08:47   #16
The3DProgrammer
Senior Member
 
Iscritto dal: May 2000
Messaggi: 1459
Ma certo!

nn funzia xkè devi fare così

angolo = acos(D3DXVec3Dot(vDietro1, vDietro2));//calcolo l'angolo - usa D3DXVec3Dot invece di scalar
calcol=D3DXVec3Length(&vDietro3);
Altezza=sin(angolo)*calcol;

in quanto, come dicevi prima, cateto=sin(angoloOpposto)*ipotenusa. Acos ritorna l'angolo in radianti (se nn ricordo male) quindi devi fare calcol*sin(angolo)

certe volte sono proprio un testicolo
The3DProgrammer è offline   Rispondi citando il messaggio o parte di esso
Old 06-10-2005, 10:08   #17
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da The3DProgrammer
Ma certo!

nn funzia xkè devi fare così

angolo = acos(D3DXVec3Dot(vDietro1, vDietro2));//calcolo l'angolo - usa D3DXVec3Dot invece di scalar
calcol=D3DXVec3Length(&vDietro3);
Altezza=sin(angolo)*calcol;

in quanto, come dicevi prima, cateto=sin(angoloOpposto)*ipotenusa. Acos ritorna l'angolo in radianti (se nn ricordo male) quindi devi fare calcol*sin(angolo)

certe volte sono proprio un testicolo

no no non và altezza decresce fino ad arrivare a 0 e così via.
Invece Altezza dovrebbe essere sempre 3.3465248 circa come nel calcolo giusto dell'altezza del triangolo. In questo caso con algoritmo trigonometrico sembra che calcoli il piano quindi da se provo con cos decresce con sin aumenta ho la vaga impressione che sbaglio il passaggio dei cateti/vettori

a cammina---->
>>>>>....a....>>>>>>
.........../.|.\
......../....|h....\
...../.......|............\
n0-------------------n1

a cammina----->
>>>>>........a...>>>>>>
.............../.|...\
........../......|h....\
...../...........|.........\
n0-------------------n1

vedi sopra: a cammina e altezza calcolata con sin deve essere sempre uguale


il punto a è la posizione e và verso il nodo1 io devo conoscere h

se guardi sopra il code è:
a-n1
n0-n1//se n1-n0 è uguale ho numeri + senza forzare con un fabs


quel decrescere o aumentare mi sembra come se devo cambiare cateto per il calcolo......... mi sto impippando il cervello!

Ultima modifica di okay : 06-10-2005 alle 12:01.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 06-10-2005, 12:05   #18
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
che coglione è naturale che l'angolo cambia, adesso che noto quelle specie di figure che ho fatto, l'angolo cambia ed è giusto. è l'altezza che calcolo male manca un solo passaggio o calcolo.

In definitiva l'angolo cambia sempre quello che varia è la lunghezza di a-n0 e a-n1 (i vettori) mentre n0-n1 è sempre uguale.

ci devo ragionare un attimo sopra. (la figura bella sopra è di un tut per trigonometria (avessero sbagliato loro i calcoli!!))

se arrivate prima voi postate!!
okay è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
GeForce RTX 3080 raffreddata con un diss...
Proofpoint mette in sicurezza gli agenti...
Annunci falsi su Bakeca con dati veri di...
Attenzione alla truffa dell'assegno di A...
Addio al mito delle batterie a stato sol...
400 milioni e un obiettivo ambizioso: Re...
TCL 2026: la tecnologia SQD-Mini LED arr...
Gli aggiornamenti arriveranno, ma non si...
Monopattini elettrici: addio "Far W...
Mistral AI raccoglie 830 milioni di doll...
Hacker iraniani di Handala violano la Gm...
Chi è Eddie Dalton: il cantante d...
OVHcloud mette l'Italia al centro della ...
Zeekr 007 GT sold out in Cina, si passa ...
Hisense QLED 4K da 98'' e 85'' con 144Hz...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:14.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v