Problème de math...

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Anonyme

Problème de math...

Message par Anonyme »

les maths & moi sa fait 2 :?

je voudrais savoir comment connaitre l'angle entre 2 points sur l'écran

en gros l'inverse de cela :
- en admetant que angle = 20
- le point(x,y) est à 10 pixel sur l'angle 20°.

x = x + 10 * cos(Angle * 2 * 3.1415 /360)
y = y + 10 * sin(Angle * 2 * 3.1415 /360)

Merki.
Anonyme

Message par Anonyme »

bon , je reponds tout seul à mes questions :D

Voici une p'tite proc, pas très fiable , mais qui fonctionne à peu près :



Code : Tout sélectionner


#Deg = 2*#PI/360

Procedure Distance(x1,y1,z1,x2,y2,z2)
Protected Result.f
Result = Sqr(  Pow(x1-x2,2) + Pow(y1-y2,2) + Pow(z1-z2,2) )
ProcedureReturn Result
EndProcedure

Procedure ReturnAngle(x1,y1,x2,y2)
Protected Distance.l,Xa.l,Ya.l

Distance = Distance(x1,y1,0,x2,y2,0)


For a = 0 To 360

Xa = X1 + Distance * Cos(a*#Deg)
Ya = Y1 + Distance * Sin(a*#Deg)

If Xa = x2 And Ya = y2 
ProcedureReturn a
EndIf

Next a


EndProcedure
si quelqu'un peut m'aider à l'améliorer :wink:
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Problème de math...

Message par SPH »

Cpl.Bator a écrit :je voudrais savoir comment connaitre l'angle entre 2 points sur l'écran
Il n'y a pas d'ANGLE entre 2 points. Il y en a un (4 meme) a l'intersection de 2 droites. Par contre, entre 2 points, il y a une DISTANCE !
Anonyme

Message par Anonyme »

Il n'y a pas d'ANGLE entre 2 points. Il y en a un (4 meme) a l'intersection de 2 droites
tu es contradictoire, il y a forcement un angle entre le point A(x,y) et le point B(x,y). pour la distance je le SAIS aussi... :?

si tu as un exemple d'intersection, car je ne comprends pas du tout.
merci.


@++
olivier
Messages : 305
Inscription : mer. 05/janv./2005 12:58
Localisation : http://www.tib-net.com/meca/index.htm

Message par olivier »

Code : Tout sélectionner

les maths & moi sa fait 2 Confused
et en plus c'est vrai :wink:

Il existe un angle entre deux droite mais pas entre deux points. Sous entend tu les droites passant par l'origne 0,0, et tes points ?????

Il faut nous en dire plus .
Vive le temps libre !
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message par poshu »

non, non... Il n'y a pas d'angle entre deux point, SPH a raison. un angle, c'est entre deux droites/segments.

Oups, doublé.
Dernière modification par poshu le mar. 06/juin/2006 17:11, modifié 1 fois.
AWEAR
Messages : 264
Inscription : ven. 28/oct./2005 8:20
Localisation : Mayotte ( 976 ), Océan Indien, France

Message par AWEAR »

En regardant son code, j'ai plutôt l'impression qu'il s'agit de l'angle entre les deux points et l'axes des abscisses.
La vie est une rose dont il faut accepter les épines, mais la mienne est fannée, arrosée par le goût de mes larmes. (Soprano)
Anonyme

Message par Anonyme »

Un image vaut mieux qu'un long discourt.

Image


ps :en tout cas en topographie, pour désigner un objectif (tir d'artillerie), on doit connaitre l'angle(en millième) pour déterminer les coordonées de notre objectif (Angle/Distance/site)
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

AWEAR a écrit :En regardant son code, j'ai plutôt l'impression qu'il s'agit de l'angle entre les deux points et l'axes des abscisses.
Oui, je parierais aussi que c'est ce qu'il entend :lol:

EDIT : BINGO, c'etait bien ca :lol:
(100,100) et (200,200) ?
simple : 45°+180°

Plus serieusement, cela fait 180+X (mais je n'ai pas le temps la, je dois filer) :wink:
Dernière modification par SPH le mar. 06/juin/2006 17:26, modifié 1 fois.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Je te recopie un truc vite fait, si ça peut t'aider...

Code : Tout sélectionner

;******************************************************************************************************
; returns the dot product between 2 vectors a and b.
Procedure.f dot(ax.f, ay.f, bx.f, by.f)

 ProcedureReturn = (ax * bx) + (ay * by)

EndProcedure

;******************************************************************************************************
;Return the angle (rad) between two normalised vectors
Procedure.f angle_from_normalised_vectors(norm_vect1_x.f, norm_vect1_y.f, norm_vect2_x.f, norm_vect2_y.f)
 angle.f=ACos(dot(norm_vect1_x,norm_vect1_y,norm_vect2_x,norm_vect2_y))
 If norm_vect1_x<0
  angle=#pi+#pi-angle
 EndIf
 ProcedureReturn angle

EndProcedure

;******************************************************************************************************

x.f=100
y.f=100

dist.f=Sqr(x*x+y*y)
;normalize
x/dist
y/dist

debug angle_from_normalised_vectors(x,y,0,1)
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

Regarde donc cette BD en format PDF de Jean Pierre Petit
"La CAO sans peine"
c'est gratoche 8)
http://www.savoir-sans-frontieres.com/J ... _peine.htm
Y a tout, et comme il avait fait cela en basic en plus :)

Tu peux regarder les autres aussi (y en a 25) c'est très intéressant :D
http://www.savoir-sans-frontieres.com/J ... nloads.htm
Est beau ce qui plaît sans concept :)
Speedy Galerie
olivier
Messages : 305
Inscription : mer. 05/janv./2005 12:58
Localisation : http://www.tib-net.com/meca/index.htm

Message par olivier »

Bon voila expliquer comme cela on peut te répondre.

Code : Tout sélectionner

Procedure calcul_angle(xa,ya,xb=150,yb=150)

   StartDrawing(WindowOutput(0))
   DrawingMode(#PB_2DDrawing_Transparent)
   LineXY(xa,ya,xb,yb)
   
   LineXY(xb,yb,xb+100,yb)
   DrawText(xb-10,yb-10,"B")
   
   ;calcul de l'angle en radian
   
   ar.f=ATan((ya-yb)/(xa-xb))
   Debug ar
   ;conversion en degres (je suis pas un crac des radians, je préfère bosser avec les degrés)
   ad=ar*360/2/3.1415
   Debug ad
   
   ;ajout de la partie de l'angle suivant la position des points car Atang ne renvoie qu'un angle de -90 à 90
   If xa<xb And ya<yb : ad=180+ad :EndIf ; cas haut gauche
   If xa>xb And ya<yb : ad=360+ad :EndIf ;cas haut droite
   If xa<xb And ya>yb : ad=180+ad :EndIf ; cas bas gauche
   If xa>xb And ya>yb :           :EndIf ; cas bas droite

   ; reconversion en radian si tu en as besoins
   ar=ad*2*3.1415/360
   
   DrawText(xa-10,ya-10,"A "+Str(ad)+" "+StrF(ar))
   StopDrawing()
EndProcedure

xa=Random(200)
ya=Random(200)

OpenWindow(0,10,10,300,300,"clic sur l'image")

calcul_angle(xa,ya)



Repeat
   event=WaitWindowEvent()
   Select event
      Case #WM_LBUTTONUP
         calcul_angle(WindowMouseX(0),WindowMouseY(0))
   EndSelect
   
Until event=#wm_close


Vive le temps libre !
Anonyme

Message par Anonyme »

Merci à tous ! :D

@Olivier , ton code est super :wink:
@Pilou , je connaissais déjà ces liens, merki quand même ^^

et merci encore aux autres d'avoir essayé d'aidé un deumeuré (moi) en math :D

@++
Dräc
Messages : 526
Inscription : dim. 29/août/2004 0:45

Message par Dräc »

Ce qu’il y a de bien avec les maths, c’est qu’il existe plusieurs solutions…

Je ne sais pas si tu connais la notion de vecteur (incluant la norme d’un vecteur) et de produit scalaire ?
Ca risque d’etre un peu matheux à tes yeux, mais cela peut grandement t’aider dans tes problèmes d’angle, car la méthode est générale.

C'est la solution qu'a choisie djes.

Voici une bonne page http://fr.wikipedia.org/wiki/Produit_scalaire

N’oublis pas que l’angle donné par l’inverse de cos() est entre 0 et PI.
Cet angle sera tjrs l’angle le plus petit défini pas tes deux vecteurs.
Répondre