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 :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:

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

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 .

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.

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)

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 :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:

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 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

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 ! :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

@++

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.