Comment calculer un angle entre trois coordonnées cartésiennes [Résolu/Fermé]

Signaler
Messages postés
475
Date d'inscription
vendredi 6 décembre 2013
Statut
Membre
Dernière intervention
1 novembre 2018
-
Messages postés
475
Date d'inscription
vendredi 6 décembre 2013
Statut
Membre
Dernière intervention
1 novembre 2018
-
Bonjour (KX),
Comment fait-on pour calculer un angle entre trois coordonnées cartésiennes, je sais réellement que la question est BÊTE .. mais bon,
voilà un shéma très bien dessiner :p, appuyez pour zoomer, c'est plus nette (je sais que vous le saviez) :

1 réponse

Messages postés
15985
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
10 août 2020
2 651
Bonjour,

Aux dernières nouvelles je ne suis pas le seul sur ce forum :-)

Sinon, je pense que le produit scalaire est fait pour toi !

Voir la classe Math pour faire les calculs en Java :
https://docs.oracle.com/javase/8/docs/api/index.html?java/lang/Math.html
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 57443 internautes nous ont dit merci ce mois-ci

Messages postés
475
Date d'inscription
vendredi 6 décembre 2013
Statut
Membre
Dernière intervention
1 novembre 2018
56
J'ai fait mes recherches, donc le vecteur X est égal à (x+y), c'est ça non ?

Sinon comme tu as du remarquer, je suis jeune et donc je n'ai pas un grand niveau en math (d'ailleurs il y a une heure je ne savais ce qu'était un vecteur, je me coucherai moins bête ce soir grâce à toi), le point en math signifie un multiplier, alors pourquoi dans le dessin que tu m'as passé, la fraction d'abord multiplie deux vecteurs (X, Y) avec le signe d'un point, mais pas dans le diviseur, c'est un multiplier, je sais que je m'exprime mal pas besoin de me le site ^^
Messages postés
15985
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
10 août 2020
2 651
Les vecteurs, le produit scalaire, etc. sont des notions que l'on apprends au lycée.

Un vecteur représente une direction et un sens, il est donc (entre autre) assimilables à l'infinité de droites parallèles qui ont cette direction.

"le vecteur X est égal à (x+y)"
Non, si on prends deux points A(xA,yA) et B(xB,yB), le vecteur AB a pour coordonnées (xB-xA,yB-yA)

"le point en math signifie un multiplier"
Si on multiplie des nombres oui, mais pour les vecteurs et d'autres objets mathématiques le produit peut avoir des significations et des notations différentes.

Pour des vecteurs U et V, le vrai produit vectoriel se note U^V dont le résultat est un vecteur. Mais le produit noté U.V qui nous intéresse est un produit scalaire, c'est à dire que son résultat n'est pas un vecteur mais un nombre (un scalaire).

De plus, pour un vecteur U, la notation ||U|| désigne la norme du vecteur, c'est un peu la taille du segment représenté par ce vecteur, c'est donc encore un nombre.
Donc le multiplier qui est en bas, avec une croix, c'est bien le produit de deux nombres, contrairement au produit qui est en haut, avec un point, qui est le produit de deux vecteurs.

Ci-dessous le code en Java, tu verras qu'au final les calculs sont très simples.

public class Vector {

    public final double x;
    public final double y;

    /**
     * Création d'un vecteur à partir de ses coordonnées.
     */
    public Vector(double x, double y) {
        this.x = x;
        this.y = y;
    }

    /**
     * Création d'un vecteur à partir des coordonnées de deux points.
     */
    public Vector(double xA, double yA, double xB, double yB) {
        this(xB - xA, yB - yA);
    }

    /**
     * La norme du vecteur this.
     */
    public double norm() {
        return Math.sqrt(x * x + y * y);
    }

    /**
     * Le produit scalaire entre this et v.
     */
    public double scalarProduct(Vector v) {
        return x * v.x + y * v.y;
    }

    /**
     * L'angle (en radians) entre les vecteurs this et v.
     */
    public double angle(Vector v) {
        return Math.acos(scalarProduct(v) / (norm() * v.norm()));
    }

    /**
     * Exemple.
     */
    public static void main(String[] args) {
        double aX = 0, aY = 0; // A(0,0)
        double bX = 1, bY = 0; // B(1,0)
        double cX = 1, cY = 1; // C(1,1)

        Vector u = new Vector(aX, aY, bX, bY); // AB
        Vector v = new Vector(aX, aY, cX, cY); // AC

        double a = u.angle(v); // BÂC
        System.out.println(Math.toDegrees(a)); // 45°
    }
}
Messages postés
475
Date d'inscription
vendredi 6 décembre 2013
Statut
Membre
Dernière intervention
1 novembre 2018
56
Merci, mais du coup, cela me fait réaliser, qu'il faudrait peux être que j'attends d'avoir fini le lycée, puis me remettre à la prog.. Merci comme même
Messages postés
15985
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
10 août 2020
2 651
"il faudrait peux être que j'attends d'avoir fini le lycée, puis me remettre à la prog"
Ici ton programme fait des calculs de niveau lycée, un jour tu feras peut-être des programmes de physique, de l'informatique de gestion, de la finance, etc. d'un niveau qui te dépasseront complètement.

On ne te demandera jamais d'être un expert dans ces domaines avant de commencer à programmer, mais de savoir t'adapter à la demande quitte à demander à tes utilisateurs plus de précision sur le besoin (comme te donner la formule exacte pour un calcul).

Bref, il ne faut pas t'arrêter parce que tu n'as pas compris cet exemple là en particulier, tu peux continuer à apprendre la programmation et les techniques qui y sont associées, mais peut être en prenant des exercices plus simples où toutes les informations dont tu as besoin te sont déjà données, afin de te concentrer sur la partie programmation uniquement.

Tu peux par exemple faire un tour sur CodinGame.
Messages postés
475
Date d'inscription
vendredi 6 décembre 2013
Statut
Membre
Dernière intervention
1 novembre 2018
56 >
Messages postés
15985
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
10 août 2020

Oui merci, cette nuit j'y avais réfléchi ... Ce ne serait qu'une "perte de temps" dans cette apprentissage, je n'ai qu'à apprendre d'autre choses, avant que je sois prêt à apprendre les autres ^^

Je n'ai pas fait de grande recherche sur ce que tu m'as donné, mais ça me parait un peu trop enfantin ...
D'ailleurs si tu aurais une idée de programme ... Je suis dans le truc genre calculatrice / morpion (j'ai tous fait des prototypes ... Ils marchent à peine, j'arrête à partir du moment où cela va devenir trop facile... Si je sais en plus que je ne vais pas le partager...)

Mon unique problème c'est l'imagination ... On dit : il faut trouver d'abord le prblm avant la solution (le problème : c'est que j'en ai aucun...A part ce problème là ...)
On dit aussi de recopier les programmes déjà existant ... Oui mais ils sont souvent trop dur ...