CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Problème d'algorithmes

halo4ever
halo4ever
Niveau 6
14 septembre 2006 à 23:31:01

Salut,

J´essaye de trouver un algorithme qui calculerait l´angle d´une ligne sur un plan 2D
en ayant pour info seulement que les coordonnées des 2 points.

Quelqu´un aurait deja utiliser quelque chose comme ca ?

Merci

Fvirtman
Fvirtman
Niveau 10
15 septembre 2006 à 01:08:29

l´angle par rapport au vector Ox de ton plan ?

Le vecteur Ox est normalisé (par exemple (1,0) en 2D (marchera aussi en 3D

Tu calcules le vecteur directeur de ta ligne :
si tu as un point A et un point B, le vecteur directeur est le vecteur AB normalisé, qu´on appellera V.

Tu sais que :

Ox.V = cos(angle) // produit scalaire de vecteurs
normalisés

donc
angle = acos(Ox.V)

ton angle ABSOLU sera entre 0 et Pi.

// si tu veux juste l´angle absolu, et non orienté
, arrete toi la.

Si tu veux un angle orienté, ce sera un peu plus complexe :
il faut savoir si ton Ox est "a gauche" ou "a droite" de V.
S´il est a gauche, alors ton angle sera positif, s´il est a droite, tu prendras -angle.

Pour cela, tu calcules le déterminant des 2 vecteurs (regle du Gamma), et en fonction de son signe, tu sais s´il est a gauche ou a droite.

Si tu veux un angle dans un espace 3D, c´est plus compliqué : il te faut le vecteur N normal au plan considéré, soit Z = Ox^V (produit vectoriel), soit Alpha = Z.N (produit scalaire)

Le signe Alpha te donnera l´orientation de "angle"

halo4ever
halo4ever
Niveau 6
15 septembre 2006 à 01:29:58

C´est exactement ce que j´ai trouver Fvirtman !
Merci pour les reponses

Mais je crois que jai le probleme de "langle oriente" mon prog maffiche langle de 0 a 180 et de 180 a 0 mais en mirroir (je code en DB) donc la rotation de mon sprite est normal pour les premier 180 mais pour la deuxieme moitie il tourne en mirroir... donc avec les vecteurs je peux regler ca si jai bien compris ?

Fvirtman
Fvirtman
Niveau 10
15 septembre 2006 à 01:35:55

Tout a fait !

Si tu es sur un plan 2D, calcule un déterminant :

Soit Ox(x,y) et V(a,b)
(je pense que Ox vaut (1,0) dans ton cas simple non ?)

Le determinant est :

d = xb-ya, donc si x=1 et y=0
d = b

Autrement dit, le SIGNE de b (+ ou -) dira si tu es a gauche, ou a droite de Ox.
Il te suffira d´appliquer ce signe a l´angle absolu que tu as calculé, et normalement, tout est bon :)

Ce que je t´ai marqué plus haut était pour un cas quelconque dans l´espace.

halo4ever
halo4ever
Niveau 6
15 septembre 2006 à 01:52:27

Merci infiniment !
Je test ca a l´instant et je te dit ou j´en suis !

halo4ever
halo4ever
Niveau 6
15 septembre 2006 à 01:58:47

Aaaaah je suis perdu dans ta formule Ox(x,y)

V est ma ligne oui? donc a et b sont les coordonnees de cette ligne

Ox correspond a la longueur de ma ligne oui? alors Ox(x,y) correspond a quoi !?

Fvirtman
Fvirtman
Niveau 10
15 septembre 2006 à 08:36:21

Ox est le vecteur x de la base du plan dans lequel tu travailles.
Si tu travailles dans le plan 2D non tourné, bien droit, Ox vaut (1,0)

Sinon, donne moi les données que tu as, je te dirai comment faire a partir de la.

halo4ever
halo4ever
Niveau 6
15 septembre 2006 à 14:36:34

Ah ok jai compris merci !

En fait c´etait tout bete: si y est negatif, tu fais "-angle" et s´il est positif, il reste "angle" :fier:

Merci encore Fvirtman :content:

Fvirtman
Fvirtman
Niveau 10
15 septembre 2006 à 14:47:44

c´est ça :)

et dans un cas simple, c´est tout simple :)
Mais sache que cet algo peut etre généralisé en 3D, dans un espace quelconque

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware