Comment calculer un angle entre trois coordonnées cartésiennes

Résolu/Fermé
Skymer
Messages postés
473
Date d'inscription
vendredi 6 décembre 2013
Statut
Membre
Dernière intervention
1 novembre 2018
- 2 juil. 2016 à 18:57
Skymer
Messages postés
473
Date d'inscription
vendredi 6 décembre 2013
Statut
Membre
Dernière intervention
1 novembre 2018
- 12 juil. 2016 à 12:08
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

KX
Messages postés
16597
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
26 septembre 2022
2 974
2 juil. 2016 à 20:39
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
Skymer
Messages postés
473
Date d'inscription
vendredi 6 décembre 2013
Statut
Membre
Dernière intervention
1 novembre 2018
73
3 juil. 2016 à 06:57
Merci beaucoup, je vais regarder..

Jusqu'à maintenant tu m'as beaucoup beaucoup beaucoup répondu
0
Skymer
Messages postés
473
Date d'inscription
vendredi 6 décembre 2013
Statut
Membre
Dernière intervention
1 novembre 2018
73
3 juil. 2016 à 07:32
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 ^^
0
KX
Messages postés
16597
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
26 septembre 2022
2 974
3 juil. 2016 à 11:11
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°
    }
}
0
Skymer
Messages postés
473
Date d'inscription
vendredi 6 décembre 2013
Statut
Membre
Dernière intervention
1 novembre 2018
73
9 juil. 2016 à 19:54
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
0
KX
Messages postés
16597
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
26 septembre 2022
2 974
9 juil. 2016 à 22:10
"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.
0