Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte più ampia, Dynamic Island più piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
A Londra, per il trentennale dei Toughbook, Panasonic ha presentato il tablet G3 e il 2-in-1 34. Con Jon Tucker, a capo dell'ingegneria europea, abbiamo parlato di ciò che non si vede: batterie, antenne, porte seriali e accorgimenti nati sul campo
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione
realme C100x scommette tutto, forse troppo, sulla batteria da 7500 mAh e sulla certificazione ArmorShell per farsi notare nella fascia più economica del mercato: lo abbiamo messo alla prova per capire a chi è rivolto questo smartphone che sacrifica un po' prestazioni, display e fotocamera per offrire l'autonomia migliore possibile a un prezzo decisamente contenuto
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: 16215
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: 16215
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


iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Costo della RAM alle stelle, Raspberry P...
Fastweb + Vodafone, nuova offerta contro...
Doctor Who, un intero episodio generato ...
Sony porta l'upscaling AI su PS5: arriva...
Tamoil taglia il prezzo dei carburanti p...
Gears of War: E-Day mostra i vantaggi de...
Halo Combat Evolved ora gira nel browser...
Auto cinesi alla conquista del mondo, ma...
Cynet 5.0 unifica la gestione dei siti e...
Samsung alza i prezzi: fino a 200 euro i...
POCO annuncia l'arrivo in Italia dei nuo...
Moonshot AI (Kimi) ruba le risposte di G...
GPT-Synopsys, OpenAI vuole trasformare l...
NetApp porta l'IA nella console e ONTAP ...
Saturno all'opposizione e Giove dietro l...
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: 06:17.


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