/// <summary>
    /// Retourne si deux vecteurs sont parallèles
    /// </summary>
    /// <param name="gauche">Le vecteur de gauche dans l'éditeur</param>
    /// <param name="droit">Le vecteur à droite dans l'éditeur</param>
    /// <returns></returns>
    static public bool EstParallèle(Vecteur gauche, Vecteur droit)
    {
        bool NonParallèle = true;

        float[] ks = new float[gauche.NbDimensions];
        for (int j = 0; j < gauche.NbDimensions; j++)
        {
            ks[j] = gauche[j] / droit[j];
        }
        int i = 0;

        while (NonParallèle && i < ks.Length - 1)
        {
            if (ks[i] == ks[i + 1])
            {
                NonParallèle = false;
            }
            else
            {
                NonParallèle = true;
            }
            i++;
        }

        return(NonParallèle);
    }
示例#2
0
    /// <summary>
    /// S'occupe de calculer les différentes opérations sur les plans et les bases
    /// </summary>
    public void Calculer()
    {
        bool EstPlanOuEspace;

        switch (typeVérif)
        {
        case VérificationBase.TEST_PLAN:
            EstPlanOuEspace = Vecteur.EstUnPlan(new Vecteur(scriptVecteurGauche.GetDataVecteur), new Vecteur(scriptVecteurCentre.GetDataVecteur));
            scriptRésultatPlan.AfficherRésultat(EstPlanOuEspace);
            break;

        case VérificationBase.TEST_ESPACE:
            EstPlanOuEspace = Vecteur.EstUnEspace(new Vecteur(scriptVecteurGauche.GetDataVecteur), new Vecteur(scriptVecteurCentre.GetDataVecteur), new Vecteur(scriptVecteurDroite.GetDataVecteur));
            scriptRésultatEspace.AfficherRésultat(EstPlanOuEspace);
            break;

        case VérificationBase.ÉCRITURE_VECTEUR_PLAN:
            Vecteur résultatPlan = Vecteur.ÉcritureVecteurDansUnPlan(new Vecteur(scriptVecteurGauche.GetDataVecteur), new Vecteur(scriptVecteurCentre.GetDataVecteur), new Vecteur(scriptVecteurBas.GetDataVecteur));
            scriptRésultatVecteur.AfficherRésultat(résultatPlan);
            break;

        case VérificationBase.ÉCRITURE_VECTEUR_ESPACE:
            Vecteur résultatEspace = Vecteur.ÉcritureVecteurDansUnEspace(new Vecteur(scriptVecteurGauche.GetDataVecteur), new Vecteur(scriptVecteurCentre.GetDataVecteur), new Vecteur(scriptVecteurDroite.GetDataVecteur), new Vecteur(scriptVecteurBas.GetDataVecteur));
            scriptRésultatVecteur.AfficherRésultat(résultatEspace);
            break;
        }
    }
    /// <summary>
    /// Retourne le vecteur résultant de deux points.
    /// </summary>
    /// <param name="gauche">Le point de gauche</param>
    /// <param name="droit">Le point de droite</param>
    /// <returns>Retourne un vecteur</returns>
    static public Vecteur VecteurDeuxPoints(Vecteur gauche, Vecteur droit)
    {
        Vecteur résultat = null;

        résultat = Soustraire(droit, gauche);
        return(résultat);
    }
 /// <summary>
 /// Écris un vecteur dans un espace donné.
 /// </summary>
 /// <param name="gauche">Premier vecteur de l'espace.</param>
 /// <param name="centre">Deuxième vecteur de l'espace.</param>
 /// <param name="droit">Troisième vecteur de l'espace.</param>
 /// <param name="bas">Vecteur que l'on désir écrire dans l'espace.</param>
 /// <returns>Retourne un vecteur.</returns>
 static public Vecteur ÉcritureVecteurDansUnEspace(Vecteur gauche, Vecteur centre, Vecteur droit, Vecteur bas)
 {
     float[] résultat = new float[bas.NbDimensions];
     float[,] baseMatrice = new float[gauche.NbDimensions, 3];
     float[,] vecteurBas  = new float[bas.NbDimensions, 1];
     if (EstUnEspace(new Vecteur(gauche.DataVecteur), new Vecteur(centre.DataVecteur), new Vecteur(droit.DataVecteur)) && gauche.NbDimensions == 3)
     {
         for (int i = 0; i < gauche.NbDimensions; i++)
         {
             baseMatrice[i, 0] = gauche[i];
         }
         for (int i = 0; i < centre.NbDimensions; i++)
         {
             baseMatrice[i, 1] = centre[i];
         }
         for (int i = 0; i < droit.NbDimensions; i++)
         {
             baseMatrice[i, 2] = droit[i];
         }
         for (int i = 0; i < bas.NbDimensions; i++)
         {
             vecteurBas[i, 0] = bas[i];
         }
         Matrice baseMatriceInverse = Matrice.MatriceInverse(new Matrice(baseMatrice));
         Matrice matriceRésultat    = Matrice.Produit(new Matrice(baseMatriceInverse.DataMatrice), new Matrice(vecteurBas));
         for (int i = 0; i < matriceRésultat.NbLignes; i++)
         {
             résultat[i] = matriceRésultat[i, 0];
         }
     }
     return(new Vecteur(résultat));
 }
    /// <summary>
    /// Fait la vérification si deux vecteurs forment un plan
    /// </summary>
    /// <param name="gauche">Le vecteur de gauche dans l'éditeur</param>
    /// <param name="centre">Le vecteur central dans l'éditeur</param>
    /// <returns>si les vecteurs forment un plan</returns>
    static public bool EstUnPlan(Vecteur gauche, Vecteur centre)
    {
        bool estUnPlan;

        estUnPlan = EstNul(gauche) && EstNul(centre) && EstParallèle(gauche, centre);

        return(estUnPlan);
    }
 /// <summary>
 /// S'occupe d'initialiser composant et accède à leurs scripts pour pouvoir <para>
 /// accéder à certaines fonctionnalités des objects</para>
 /// </summary>
 void Start()
 {
     vecteur = null;
     GérerVecteur();
     scriptGradateur     = CtrlNbDimensions.GetComponent <GradateurControleur>();
     scriptOperations    = controleurOperations.GetComponent <OperationsControleurAbstrait>();
     nbDimensionsVecteur = scriptGradateur.Valeur;
     GénérationDesComposants();
     zonesDeTexte = CtrlComposants.GetComponentsInChildren <InputField>();
     ActivationDesPanneaux();
 }
    /// <summary>
    /// Calcule la norme d'un vecteur
    /// </summary>
    /// <param name="gauche">Le vecteur de gauche dans l'éditeur</param>
    /// <returns>La norme du vecteur</returns>
    static public float CalculNorme(Vecteur gauche)
    {
        float résultat;
        float intérieurRacine = 0;

        float[] vecteurGauche = gauche.DataVecteur;
        for (int i = 0; i < gauche.NbDimensions; i++)
        {
            intérieurRacine += Mathf.Pow(vecteurGauche[i], 2);
        }
        return(résultat = Mathf.Sqrt(intérieurRacine));
    }
 public void AfficherRésultat(Vecteur vecteurRésultat)
 {
     nbDimensionsVecteur = 0;
     if (vecteurRésultat != null)
     {
         float[] dataRésultat = vecteurRésultat.DataVecteur;
         nbDimensionsVecteur = dataRésultat.Length;
         for (int i = 0; i < nbDimensionsVecteur; ++i)
         {
             textes[i].text = dataRésultat[i].ToString();
         }
     }
     ActivationDesPanneaux();
 }
    /// <summary>
    /// Divise tous les composants du vecteur par la norme de celui-ci
    /// </summary>
    /// <param name="gauche">Le vecteur de gauche dans l'éditeur</param>
    /// <returns></returns>
    static public Vecteur Normalisation(Vecteur gauche)
    {
        float[] résultat      = new float[gauche.NbDimensions];
        float[] vecteurGauche = gauche.DataVecteur;
        float   norme         = CalculNorme(gauche);

        for (int i = 0; i < gauche.NbDimensions; i++)
        {
            résultat[i] = vecteurGauche[i] / norme;
        }
        Vecteur résultatVecteur = new Vecteur(résultat);

        return(résultatVecteur);
    }
    /// <summary>
    /// Recherche l'information nécessaire sur les Game Objects
    /// </summary>
    void Start()
    {
        calculer = gameObject.GetComponentInChildren <Button>();

        scriptVecteurGauche   = EditeurVecteurGauche.GetComponent <VecteurControleur>();
        scriptVecteurDroite   = EditeurVecteurDroite.GetComponent <VecteurControleur>();
        scriptGradateurDroit  = scriptVecteurDroite.CtrlNbDimensions.GetComponent <GradateurControleur>();
        scriptGradateurGauche = scriptVecteurGauche.CtrlNbDimensions.GetComponent <GradateurControleur>();
        scriptScalaire        = EditeurScalaire.GetComponent <ScalaireControleur>();
        scriptResultatVecteur = ZoneResultatVectoriel.GetComponent <RésultatControleurVecteur>();
        scriptRésultatNorme   = ZoneNorme.GetComponent <RésultatControleurNorme>();

        opérandeVecteurGauche = new Vecteur(scriptVecteurGauche.GetDataVecteur);
        listOpérations        = gameObject.GetComponentInChildren <Dropdown>();
        IdentifierOpérationActive();
    }
示例#11
0
    /// <summary>
    /// Fait le produit par un scalaire d'un vecteur
    /// </summary>
    /// <param name="gauche">Le vecteur de gauche dans l'éditeur</param>
    /// <param name="droite">Le scalaire à droite dans l'éditeur</param>
    /// <returns>Le vecteur résultant</returns>
    static public Vecteur ProduitVecteurScalaire(Vecteur gauche, float droite)
    {
        Vecteur résultat = null;

        if (gauche != null)
        {
            float[] dataProduitScalaire = new float[gauche.NbDimensions];
            float[] dataGauche          = gauche.DataVecteur;
            for (int i = 0; i < gauche.NbDimensions; ++i)
            {
                dataProduitScalaire[i] = dataGauche[i] * droite;
            }
            résultat = new Vecteur(dataProduitScalaire);
        }
        return(résultat);
    }
    /// <summary>
    /// Fait le calcul sur le(s) vecteur(s) selon l'opération sélectionnée et affiche la valeur dans le vecteur réponse ou la norme
    /// </summary>
    public void Calculer()
    {
        Vecteur résultat        = null;
        bool    retourneVecteur = true;
        float   résultatNorme   = 0;

        switch (opérationActive)
        {
        case OpérationsVectorielles.ADDITON:
            résultat        = Vecteur.Additionner(new Vecteur(scriptVecteurGauche.GetDataVecteur), new Vecteur(scriptVecteurDroite.GetDataVecteur));
            retourneVecteur = true;
            break;

        case OpérationsVectorielles.SOUSTRACTION:
            résultat        = Vecteur.Soustraire(new Vecteur(scriptVecteurGauche.GetDataVecteur), new Vecteur(scriptVecteurDroite.GetDataVecteur));
            retourneVecteur = true;
            break;

        case OpérationsVectorielles.PRODUIT_SCALAIRE:
            résultat        = Vecteur.ProduitVecteurScalaire(new Vecteur(scriptVecteurGauche.GetDataVecteur), scriptScalaire.Valeur);
            retourneVecteur = true;
            break;

        case OpérationsVectorielles.CALCUL_NORME:
            résultatNorme   = Vecteur.CalculNorme(new Vecteur(scriptVecteurGauche.GetDataVecteur));
            retourneVecteur = false;
            break;

        case OpérationsVectorielles.NORMALISATION:
            résultat        = Vecteur.Normalisation(new Vecteur(scriptVecteurGauche.GetDataVecteur));
            retourneVecteur = true;
            break;

        case OpérationsVectorielles.VECTEUR_RÉSULTANT:
            résultat        = Vecteur.VecteurDeuxPoints(new Vecteur(scriptVecteurGauche.GetDataVecteur), new Vecteur(scriptVecteurDroite.GetDataVecteur));
            retourneVecteur = true;
            break;
        }
        if (retourneVecteur)
        {
            scriptResultatVecteur.AfficherRésultat(résultat);
        }
        else
        {
            scriptRésultatNorme.AfficherNorme(résultatNorme);
        }
    }
示例#13
0
    /// <summary>
    /// Fait l'addition de deux vecteurs
    /// </summary>
    /// <param name="gauche">Le vecteur de gauche dans l'éditeur</param>
    /// <param name="droite">Le vecteur de droite dans l'éditeur</param>
    /// <returns>Un nouveau vecteur résultant</returns>
    static public Vecteur Additionner(Vecteur gauche, Vecteur droite)
    {
        Vecteur résultat = null;

        if (gauche != null && droite != null && gauche.NbDimensions == droite.NbDimensions)
        {
            float[] dataSomme  = new float[gauche.NbDimensions];
            float[] dataGauche = gauche.DataVecteur;
            float[] dataDroite = droite.DataVecteur;
            for (int i = 0; i < gauche.NbDimensions; ++i)
            {
                dataSomme[i] = dataGauche[i] + dataDroite[i];
            }
            résultat = new Vecteur(dataSomme);
        }
        return(résultat);
    }
示例#14
0
    /// <summary>
    /// Fait la soustraction de deux vecteurs
    /// </summary>
    /// <param name="gauche">Le vecteur de gauche dans l'éditeur</param>
    /// <param name="droite">Le vecteur de droite dans l'éditeur</param>
    /// <returns>Un nouveau vecteur résultant</returns>
    static public Vecteur Soustraire(Vecteur gauche, Vecteur droite)
    {
        Vecteur résultat = null;

        if (gauche != null && droite != null && gauche.NbDimensions == droite.NbDimensions)
        {
            float[] dataDifférence = new float[gauche.NbDimensions];
            float[] dataGauche     = gauche.DataVecteur;
            float[] dataDroite     = droite.DataVecteur;
            for (int i = 0; i < gauche.NbDimensions; ++i)
            {
                dataDifférence[i] = dataGauche[i] - dataDroite[i];
            }
            résultat = new Vecteur(dataDifférence);
        }
        return(résultat);
    }
 /// <summary>
 /// Crée un vecteur pour pouvoir faire des modifications sans changer l'original
 /// </summary>
 void GérerVecteur()
 {
     if (vecteur == null)
     {
         vecteur = new Vecteur(nbDimensionsVecteur);
     }
     else
     {
         float[] nouveauVecteur = new float[nbDimensionsVecteur];
         float[] ancienVecteur  = vecteur.DataVecteur;
         int     i = 0;
         while (i < nbDimensionsVecteur && i < vecteur.NbDimensions)
         {
             nouveauVecteur[i] = ancienVecteur[i];
             ++i;
         }
         vecteur = new Vecteur(nouveauVecteur);
     }
 }
示例#16
0
    /// <summary>
    /// Vérifie si un vecteur est non-nul
    /// </summary>
    /// <param name="gauche">Le vecteur de gauche dans l'éditeur</param>
    /// <returns>si le vecteur est non-nul</returns>
    static public bool EstNul(Vecteur gauche)
    {
        bool  NonNul;
        float sommeVérif = 0;

        for (int i = 0; i < gauche.NbDimensions; i++)
        {
            sommeVérif += Mathf.Abs(gauche[i]);
        }
        if (sommeVérif == 0)
        {
            NonNul = false;
        }
        else
        {
            NonNul = true;
        }
        return(NonNul);
    }
示例#17
0
    /// <summary>
    /// Vérifie si trois vecteurs forment un base
    /// </summary>
    /// <param name="gauche">Le vecteur de gauche dans l'éditeur</param>
    /// <param name="centre">Le vecteur central dans l'éditeur</param>
    /// <param name="droite">Le vecteur de droite dans l'éditeur</param>
    /// <returns>Si les vecteurs forment une base</returns>
    static public bool EstUnEspace(Vecteur gauche, Vecteur centre, Vecteur droit)
    {
        bool estUnEspace;

        float[,] matriceReprésentation = new float[gauche.NbDimensions, 3];
        for (int i = 0; i < gauche.NbDimensions; i++)
        {
            matriceReprésentation[i, 0] = gauche[i];
        }
        for (int i = 0; i < centre.NbDimensions; i++)
        {
            matriceReprésentation[i, 1] = centre[i];
        }
        for (int i = 0; i < droit.NbDimensions; i++)
        {
            matriceReprésentation[i, 2] = droit[i];
        }
        estUnEspace = (Matrice.Déterminant(new Matrice(matriceReprésentation)) != 0);

        return(estUnEspace);
    }