RISOLTO [C++] Equazioni con DirectXMath :D

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

Marcus Aseth

Utente Attivo
Messaggi
408
Reazioni
138
Punteggio
60
Questa domanda ha piu a che fare con matematica che programmazione (sto cercando di imparare entrambe contemporaneamente), ma questa mi pare sia la sezione più adatta :S

Ecco il mio codice con l'equazione da risolvere e le mie 2 soluzioni:

Codice:
//Esercizio 4
    //2 ((1, 2, 3) – x) – ( – 2, 0, 4) = – 2 (1, 2, 3)
  
    XMVECTOR VecA = XMVectorSet(1.f, 2.f, 3.f, 0.f);
    XMVECTOR VecB = XMVectorSet(-2.f, 0.f, 4.f, 0.f);

    //Solution 1
    // 2 (VecA - x) - VecB = - 2 VecA
    //     VecA - x - VecB = ((-2*VecA)/2)
    //                  -x = ((-2*VecA)/2) - VecA + VecB
    //                   x = (((-2*VecA)/2) - VecA + VecB)/-1
  
    //Solution 2
    // 2 (VecA – x) – VecB = – 2 VecA
    //          -2x - VecB = -2VecA - 2VecA
    //                 -2x = -4VecA + VecB
    //                   x = (-4*VecA + VecB)/-2

    XMVECTOR solution1 = (((-2 * VecA) / 2) - VecA + VecB) / -1;
    XMVECTOR solution2 = (-4 * VecA + VecB) / -2;

    cout << "Solution1  x = " << solution1 << endl;
    cout << "Solution2  x = " << solution2 << endl;

Output:
Solution1 x = {4,4,2}
Solution2 x = {3,4,4}

Ho commentato tutti i miei passaggi per trovare il vettore "x".
La seconda soluzione è giusta (stesso risultato sul libro) ma la prima soluzione dà il vettore sbagliato.
Qualcuno bravo con le equazioni che sà dirmi dove stà l'errore nella prima soluzione? :)
 
Cortesemente, scrivi in modo esplicito il sistema di equazioni perché così non si capisce nulla
 
Non capisco cosa intendi BAT00cent, mi pare tutto molto chiaro
Ho scritto i singoli passaggi a posta per quello o_O
Puoi farmi un esempio di cosa intendi?
 
Ultima modifica:
Intendo che quello che hai scritto non è matematica
coi vettori si possono risolvere sistemi di equazioni oppure rappresentare coefficienti di equazioni singole o isomorfismi di spazi vettoriali e tanta tanta altra roba
se scrivi
//2 ((1, 2, 3) – x) – ( – 2, 0, 4) = – 2 (1, 2, 3)
per me non significa niente, così come non significa nulla l'oscura notazione
XMVECTOR VecA = XMVectorSet(1.f, 2.f, 3.f, 0.f);
e simili che suppongo sia in C++ e che sembrerebbero coefficienti (ma di che?)
senza contare il fatto che chiunque legga il testo potrebbe NON sapere assolutamente nulla di programmazione ma esserti utile per un problema matematico
Ti basta fare una foto con lo smartphone e allegarla se non vuoi perdere tempo
lo dico per te: se hai un problema di matematica devi scrivere MATEMATICA, se poi stai facendo un programma che risolve il problema è un altro discorso.
Per scrivere un programma prima devi essere in grado di farlo "a mano" e poi tentare di tradurre il tutto in codice.
 
se scrivi
//2 ((1, 2, 3) – x) – ( – 2, 0, 4) = – 2 (1, 2, 3)
per me non significa niente

Ma non l'ho scritto io, quello è proprio il testo dell'esercizio :S
Io ho semplicemente assegnato un nome/variabile ai vettori3D (1, 2, 3) e ( – 2, 0, 4) soltanto per facilitarne la comprensione e compattare il tutto (sul ragionevole presupposto che tutti i numeri ritornati dalle operazioni della classe XMVECTOR sono corretti e quindi non serve vederli) :)

XMVECTOR è la classe Vector usata in DirectXMath, con tutti gli operatori overloaded per tutte le classiche operazioni con i vettori

In numeri quindi sarebbe:
Codice:
//Solution 1
    // 2 ((1, 2, 3) - x) - (-2, 0, 4) = -2 (1, 2, 3)
    //     (1, 2, 3) - x - (-2, 0, 4) = (-2,-4,-6) / 2
    //                            - x = (-1,-2,-3) - (1, 2, 3) + (-2, 0, 4)
    //                            - x = (-2,-4,-6) + (-2, 0, 4)
    //                              x = (-4,-4,-2) / -1
    //                              x = (4,4,2)
 
Ultima modifica:
Allora, ammesso di interpretare la x come un vettore a 3 dimensioni, a me esce fuori una unica soluzione dove
x = (3,4,4)
nella prima soluzione ad un certo punto hai diviso per 2 sbagliando perché hai dimenticato di dividere per 2 il vettore (-2,0,4)
dovevi fare così: raccogli il fattore 2 sul secondo vettore
2((1,2,3)-x)-2(-1,0,2)=-2(1,2,3) e dividendo per 2 ambo i membri rimane
(1,2,3) -x -(-1,0,2) = -(1,2,3)
porto x "a destra" dell'uguale (per cui cambia di segno) ed il vettore -(1,2,3) lo porto "a sinistra" (cambia segno anche lui)
(1,2,3) -(-1,0,2) +(1,2,3)= x ora scambio i 2 membri per comodità
x = (1+1+1, 2-0+2, 3-2+3)
x = (3,4,4)
unica soluzione
 
facepalm.jpg


Ora che mi hai mostrato l'errore sembra ovvio, dovevo dividere tutto in entrambi i lati per 2 e non solo quello che mi fà comodo...
La prossima volta non ci casco :D
Aggiungendo quella divisione mi da il giusto risultato, e più importante, ora capisco un pò meglio come si risolvono, thanks! :)
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top