Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-10-2005, 16: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, 16:28   #2
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16213
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, 17: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 17:31.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2005, 17: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 17:41.
The3DProgrammer è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2005, 17: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, 17: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, 18: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, 18: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, 19:30   #9
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16213
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, 20: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, 21: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, 21: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, 21: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, 04: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 04:49.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 06-10-2005, 06: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, 09: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, 11: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 13:01.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 06-10-2005, 13: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


Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
SpaceX: Elon Musk torna a parlare dei pr...
G.Skill risarcisce 2,4 milioni di dollar...
Test degli annunci su ChatGPT avviati: '...
TSMC approva investimenti record da quas...
L'IA agentica arriva anche sullo storage...
Euro digitale, il Parlamento UE cambia r...
Alphabet e la sua obbligazione centenari...
L'UE anticipa un intervento per bloccare...
Il Trump Phone esiste ma è molto ...
Frodi deepfake fuori controllo: perch&ea...
Consumano il 30% in meno: arrivano i nuo...
Tesla Semi svela i numeri definitivi: 80...
La Air Force statunitense vieta occhiali...
Wi-Fi Intel e Windows: le novità ...
Dongfeng sbarca 'a casa loro': il nuovo ...
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: 20:58.


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