Jump to content

Preciso de ajuda para guardar um novo valor em uma matriz em C++


Hugo Loco
 Share

Recommended Posts

Não estou conseguindo guardar os novos valores para uma matriz como na conta L2 = L2 - a(2,1)L1, o programa está guardando apenas o primeiro valor.

Estou usando a biblioteca Eigen/Dense.

Código: 

#include <iostream>
#include <Eigen/Dense>
using namespace std;
using namespace Eigen;
int main(){
    MatrixXd A(2,3),B(2,3);
    float v1[2],v2[2],p1[2],p2[2];
    int i,j;
   
    cout << "Digite os dados do ponto A1 da primeira reta: " << endl;
    cout << "Insira a coordenada x de A1: "; cin >> p1[0];
    cout << "Insira a coordenada y de A1: "; cin >> p1[1];
    cout << "Digite os dados do vetor diretor da primeira reta: "<< endl;
    cout << "Insira a coordenada x de v1: "; cin >> v1[0];
    cout << "Insira a coordenada y de v1: "; cin >> v1[1];

    cout << "Digite os dados do ponto A2 da segunda reta: " << endl;
    cout << "Insira a coordenada x de A2: "; cin >> p2[0];
    cout << "Insira a coordenada y de A2: "; cin >> p2[1];
    cout << "Digite os dados do vetor diretor da segunda reta: "<< endl;
    cout << "Insira a coordenada x de v2: "; cin >> v2[0];
    cout << "Insira a coordenada y de v2: "; cin >> v2[1];
    
    cout << "As retas inseridas foram: " << endl;
    cout << "r1: (x,y) = " << "(" << p1[0] << "," << p1[1] << ") + t[" << v1[0] << "," <<v1[1] << "]" << endl;
    cout << "r2: (x,y) = " << "(" << p2[0] << "," << p2[1] << ") + h[" << v2[0] << "," <<v2[1] << "]" << endl;
    
    A(0,0) = v1[0];
    A(0,1) = -v2[0];
    A(0,2) = p2[0] - p1[0];
    A(1,0) = v1[1];
    A(1,1) = -v2[1];
    A(1,2) = p2[1] - p1[1];

    cout << "Matriz obtida: " << endl << A << endl;
    
    if(A(0,0) == 0){         //Verificar se o termo a(1,1) e igual a 0, se for, vamos trocar L1 e L2
        cout << "Termo a(1,1) e igual a 0, vamos trocar L1 e L2" << endl;
        for(j=0;j<3;j++)
        {
            B(1,j) = A(0,j);
            A(0,j) = A(1,j);
            A(1,j) = B(1,j);
        }    
        if(A(0,0) == 1){
            cout << "a(1,1) = 1 --> Nada a fazer em L1" << endl;
            cout << "Matriz obtida: " << endl << A << endl;
        }
        else{
            if(A(0,0) != 0){
                for(j=0;j<3;j++){
                    A(0,j) = (1/A(0,0)) * A(0,j); 
                }
                cout << "a(1,1) != 1 --> L1 = L1/a(1,1)" << endl;
                cout << "Matriz obtida: " << endl << A << endl;
            }
        }
    }
    else{
        if(A(0,0) == 1){
            cout << "a(1,1) = 1 --> Nada a fazer em L1" << endl;
            cout << "Matriz obtida: " << endl << A << endl;
        }
        else{
            for(j=0;j<3;j++){
                A(0,j) = A(0,j)  / A(0,0);
            }
            cout << "a(1,1) != 1 --> L1 = L1/a(1,1)" << endl;
            cout << "Matriz obtida: " << endl << A << endl;
        }
    }
    
    if((A(1,0)) == 0){
        cout << "a(2,1) = 0 --> Nada a fazer em L2" << endl;
        cout << "Matriz obtida: " << endl << A << endl;
    }
    else        
    {
        for(j=0;j<3;j++){
            A(1,j) = A(1,j) - A(1,0) * A(0,j);
        }
        
        cout << "a(2,1) != 0 --> L2 = L2 - a(2,1)L1" << endl;
        cout << "Matriz obtida: " << endl << A << endl;
    }
        
    if(A(1,1) == 0){          //Se o termo a(2,2) e a(2,3) forem iguais a 0, as retas sao coincidentes senao, sao paralelas
        if(A(1,2) == 0){
            cout << "As retas sao coincidentes" << endl;
        }
        else{
            cout << "As retas sao paralelas" << endl;
        }
    }
    else{
        if(A(1,1) == 1){
            cout << "Nada a fazer em L2" << endl;
        }
        else{
            for(j=0;j<3;j++){
                A(1,j) = A(1,j) / A(1,1);
            }
        }
        if((A(0,1)) == 0 ){
            cout << "Existe ponto de intersecao" << endl << "A solucao eh t = " << A(0,2) << " e h = " << A(1,2) << endl;
            cout << "O ponto de intersecao e P = (" << v1[0] * A(0,2) + p1[0] << "," << v1[1] * A(0,2) + p1[1] << ")" << endl;
        } 
        else{
            for(j=0;j<3;j++){
                A(0,j) = A(0,j) - A(0,1) * A(1,j);
            }
            cout << "Existe ponto de intersecao" << endl << "A solucao eh t = " << A(0,2) << " e h = " << A(1,2) << endl;
            cout << "O ponto de intersecao e P = (" << v1[0] * A(0,2) + p1[0] << "," << v1[1] * A(0,2) + p1[1] << ")" << endl;
        }    
    }
    system("pause");
}

Screenshot_1.png

Edited by Hugo Loco
Link to comment
Share on other sites

  • 4 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...