Page 1 sur 1
					
				Problème de math...
				Publié : mar. 06/juin/2006 15:14
				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.
 
			 
			
					
				
				Publié : mar. 06/juin/2006 15:43
				par Anonyme
				bon , je reponds tout seul à mes questions  
 
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  

 
			 
			
					
				Re: Problème de math...
				Publié : mar. 06/juin/2006 16:22
				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 !
 
			 
			
					
				
				Publié : mar. 06/juin/2006 16:37
				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.
@++
 
			 
			
					
				
				Publié : mar. 06/juin/2006 17:01
				par olivier
				
et en plus c'est vrai  
 
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 .
 
			 
			
					
				
				Publié : mar. 06/juin/2006 17:03
				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é.
			 
			
					
				
				Publié : mar. 06/juin/2006 17:07
				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.
			 
			
					
				
				Publié : mar. 06/juin/2006 17:23
				par Anonyme
				Un image vaut mieux qu'un long discourt.
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)
 
			 
			
					
				
				Publié : mar. 06/juin/2006 17:24
				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   
EDIT : BINGO, c'etait bien ca  
 
(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)  

 
			 
			
					
				
				Publié : mar. 06/juin/2006 17:24
				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)
 
			 
			
					
				
				Publié : mar. 06/juin/2006 23:17
				par Frenchy Pilou
				Regarde donc cette BD en format PDF de Jean Pierre Petit
"La CAO sans peine"
c'est gratoche  
 
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   
http://www.savoir-sans-frontieres.com/J ... nloads.htm 
			 
			
					
				
				Publié : mer. 07/juin/2006 7:48
				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
 
			 
			
					
				
				Publié : mer. 07/juin/2006 9:45
				par Anonyme
				Merci à tous !  
 
@Olivier , ton code est super  
 
@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  
 
@++
 
			 
			
					
				
				Publié : mer. 07/juin/2006 19:31
				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.