Question de trigonométrrie

Résolu
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 - 3 mai 2014 à 19:07
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 - 6 mai 2014 à 22:22
Bonjour,

J'aimerai connaitre la formule qui permet de connaitre le "point d'arrivée" en x, y d'un rayon.
Je m'explique, je pose au hasard un point sur l'écran et à partir de là je trace des rayons tous les 10° (de 0 à 350) et ce jusqu'au bord d'un cadre.
Pour l'instant, ne connaissant pas cette formule, j'incrémente la longueur de chaque rayon tant que celui-ci ne sort pas des dimensions du cadre.
Mais il y a sûrement une méthode qui permette d'éviter ce bidouillage par un savant calcul en tenant compte, je suppose, du centre (qui est le point posé au hasard) et des dimensions du cadre.
Je peux aussi imposer un rayon maximum et faire un clipping de la région du cadre, mais je souhaite quand même savoir si il a une possibilité de calcul.

Merci d'avance,

Cheyenne

--

9 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
Modifié par cs_ShayW le 3/05/2014 à 21:35
Bonjour
Pourquoi ne pas tracer des segments à partir du cadre vers le point
    
-----------------------------
\
\
\.
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
4 mai 2014 à 01:58
Bonjour ShayW,

Un plaisir de te retrouver !
Oui, je comprend bien ton idée, mais justement comment déterminer où se situe le point x,y du cadre pour revenir vers le centre en tenant compte de l'angle ?
En fait ce qu'il me faudrait est le calcul de la longueur du rayon en fonction du centre et de l'angle afin de toujours atteindre un des bords du cadre ou bien déterminer directement le "point d'arrivée".

Cheyenne

--
0
Bonjour cs_cheyenne,

Perso j'irais plutôt sur une analyse par équation de droite

chaque droite possède une équation
a x + b = y (droite du rayon)
c x + d = y (droite du segment correspondant au coté)

Tu peux résoudre pour l'intersection de 2 droites:
y = (ad -bc) / (c -a)
si a <> 0 et c <> a
et en déduire de même x = (d -b)/(a-c).

(Si c <> a les droites sont parallèles donc à moins d'être confondu il n'y a pas de solution.)

Ca c'est une solution pour des droites, comme tu travailles sur des segments si ta paire de résultat (x;y) n'appartient pas au segment, il n'y a pas d'intersections.


Déjà je simplifie les calculs en faisant apparaître le pt (0,0) dans toutes mes équations.
Sur l'ensemble de ton graphique je fais une translation pour déterminer le centre des rayons en (0,0)
Par conséquent je déplace les 4 segments qui représentent les bords de la même manière.
Si je trouve une intersection je ferais la translation inverse sur ce point.

Chaque angle possède un sin et cos
ils représentent donc un point avec l'origine des rayons
(donc on a 2 points ce qui permet d'obtenir une équation de droite)

Si tu connais :
a x + b = y (Equation du rayon ou ici b sera toujours =0)

on a donc l' Angle en Radian de -PI a PI
a = sin angle / cos angle
b = 0 ( a verifier )
=> ax = y

2 cotés sont horizontaux (résoudre l 'intersection par les y)
c x + d = y => soit y = d (on connais d)
a x = d soit x= (d/a)

2 cotés sont verticaux (résoudre l 'intersection par les x)
a x + b = y => soit x = c (on connais c)
a c + b = y

Ne pas oublier de faire une translation inverse sur les points trouvés et ensuite vérifier que le résultat appartient au segment des cotés (un rectangle.contains peut faire l'affaire)
( en m'excusant d'avance si j ai fais une erreur )

Bonne prog
CGSI3
0
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
Modifié par CGSI3 le 4/05/2014 à 11:41
J'ai essayé rapidement de créer une class a ce sujet
Elle permet de tester l'intersection de 2 équations de droites et par conséquence avec un segment
C'est peut être un peu conséquent comme code mais ça donne une idée ^


  Public Class segment
        Private _P1 As PointF
        Private _P2 As PointF
        Public c As Double 'y = cx+d
        Public d As Double 'd = y - cx
        Private _Translation As SizeF

        Public Sub New(ByVal P1 As PointF, ByVal P2 As PointF, ByVal Translation As SizeF)
            _Translation = Translation
            _P1 = P1 + Translation
            _P2 = P2 + Translation
            If (_P2.X - _P1.X) = 0 Then
                c = 0
            Else
                c = (_P2.Y - _P1.Y) / (_P2.X - _P1.X)
            End If
            d = _P1.Y - (_P1.X * c)
        End Sub

      
        Public Function Intersection(ByVal a As Double, ByVal b As Double) As PointF
            Dim retour As New PointF
            If c = 0 Then ' 2 cotés sont horizontaux (résoudre l 'intersection par les y) 
                retour.X = CSng(_P1.X)
                retour.Y = CSng(_P1.X / a)
            ElseIf d = 0 Then '  2 cotés sont verticaux (résoudre l 'intersection par les x) 
                retour.Y = CSng(_P1.Y)
                retour.X = CSng((_P1.Y - b) / a)
            Else 'quelconque
                If c <> a And a <> 0 Then
                    retour.X = CSng((d - b) / (a - c)) 'x = (d -b)/(a-c)
                    retour.Y = CSng(a * retour.X + b)
                Else : retour = Nothing
                End If
            End If

            ' Ne pas oublier de faire une translation inverse sur les points trouvés et ensuite vérifier que le résultat appartient 
            ' au segment des cotés (un rectangle.contains peut faire l'affaire) 
            Dim ok As Boolean = False
            If Not (retour.X >= _P1.X Xor retour.X <= _P2.X) Then
                If Not (retour.Y >= _P1.Y Xor retour.Y <= _P2.Y) Then ok = True
            End If
            If Not IsNothing(retour) And ok Then
                Return retour - _Translation
            Else : Return Nothing
            End If
        End Function
    End Class


Qu'on utiliserai comme ceci:

Dim a As New segment(New PointF(7, 0), New PointF(7, 7), New SizeF(-4, -3)) 
' point d'un coté + origine des rayons

'Pour angle de -Pi a +Pi

Dim Ang as double=b = sin (angle) / cos (angle) 
Dim R As PointF = a.Intersection(ang, 0) 
' Equation d'un rayon    




Attention a la translation de L'équation transmise en dehors du sujet
Ce code peut être largement simplifié puisque dans Ax+b=y ; B=0 dans ce cas
On peut donc supprimer toutes référence a la variable b dans la Function Intersection pour optimiser

en espérant la aussi ne pas avoir fais d'erreur
--
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
4 mai 2014 à 12:13
Bonjour CGSI3,

Merci pour toutes ces explications ainsi que pour le code.
Celui-ci me semble être du VB.Net que je vais tenter d'adapter au VB6 avec lequel je travaille, ce que je n'avais pas précisé.

Pour simplifier j'ai écrit que je traçais une droite du point x,y à l'un des bords selon l'angle. En fait je dessine une spline qui s'appuie, pour l'instant, sur un seul point intermédiaire. Je vais optimiser en rajoutant des points en fonction de la longueur du rayon.

Cheyenne
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
4 mai 2014 à 13:31
Bonjour, il faut faire attention aux sous catégories, tu as posté ton message dans Visual Basic, et non dans Visual Basic/VB6.
Je dépalce
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
4 mai 2014 à 13:58
Je te prie de bien vouloir m'excuser pour cette erreur.

Amicalement de Cheyenne
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
Modifié par cs_ShayW le 4/05/2014 à 12:09
Une autre approche
Je partage en 4 parties le cadre autours du point comme le cercle
trigonométrique
le premier segment celui qui correspond à l'angle 0 a une longueur
W1

   
______w1______________
|
|
0 .__R_____________ |
\x |
R1---> \ |
\ |
\ | H1
\ |
\ |
\ |
\ |
Tx et Ty

le premier segment R = W1
x= 10 (l'angle entre R et R1)
tx = R
ty/R = tang(x)
ty = R*tang(x)
ty = W1/2 * tang(x)
au fur et à mesure x incrimente ty augmente

dessine les segments dans le quart du bas à droite

donc il faudrait dans une boucle
x = x-10
tant que W1/2 * tang(x+10) < = H1
c'est encore à annalyser
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
6 mai 2014 à 12:20
Bonjour ShayW,

Je reviens vers toi,
Ton idée est intéressante mais ce que je souhaite est justement d'éviter de passer par une boucle, ce que je fais déjà.
C'est une méthode empirique qui consiste à prendre un rayon supérieure à la diagonale du rectangle et à le diminuer jusqu'à ce que le point x,y(défini par le cosinus et le sinus de l'angle) soit contenu dans le rectangle. Ou bien faire l'inverse, partir d'un petit rayon et l'augmenter jusqu'à la limite autorisée. Cela marche très bien mais oblige à faire une boucle pour chaque rayon.

J'ai aussi essayé de tracer avec un très grand rayon et de clipper la zone utile. Juste pour le dessin c'est bien, mais travaillant en fait avec un Bitmap en mémoire je ne dois pas renseigner un x ou y dépassant les limites du tableau.

Bonne journée.

Cheyenne
0
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
4 mai 2014 à 13:32
Je viens de tester le code que j'ai proposé.
Il fonctionne, cependant j'ai une erreur sur les segments horizontaux. Sur tout autre type de droite cela fonctionne bien
Je chercherais l'erreur ce soir.
Bonne journée


--
0
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
Modifié par CGSI3 le 4/05/2014 à 20:28
Je viens d'optimiser la class pour un rectangle
Elle fonctionne bien sur mon appli
Je peux même poser le centre des rayons en dehors du rectangle ce qui n'est pas trop le but mais ca donne un tracé assez intéressant.
Je vous laisse transposer en vb6


    Public Class segment2
        Public R1 As PointF ' les 2 coins du rectangle  
        Public R2 As PointF ' les 2 coins du rectangle  
        Public T As SizeF ' le centre des rayons
        Public Segm As New List(Of PointF) ' Le retour des points calculés

        ' Initialisation de la class
        Public Sub New(ByVal C1 As PointF, ByVal C2 As PointF, ByVal Translation As SizeF, ByVal Portions As Double)
            T = Translation : R1 = C1 - T : R2 = C2 - T
            For Angle As Double = -Math.PI To Math.PI Step Math.PI / Portions
                Dim a As Double = Math.Tan(Angle) 
                Calcul(a, R1.X, False) ' Calcul selon les 4 cotés et leurs inclinaisons
                Calcul(a, R1.Y, True)
                Calcul(a, R2.X, False)
                Calcul(a, R2.Y, True)
            Next
        End Sub

        Public Sub Calcul(ByRef a As Double, ByRef Alpha As Single, ByRef Horizontal As Boolean)
            Dim ok As Boolean = False, Pt As PointF
            If Horizontal Then
                Pt = New PointF(CSng(Alpha / a), Alpha)
                If Not (Pt.X >= R1.X Xor Pt.X <= R2.X) Then ok = True
            Else
                Pt = New PointF(Alpha, CSng(Alpha * a))
                If Not (Pt.Y >= R1.Y Xor Pt.Y <= R2.Y) Then ok = True
            End If
            If ok Then Segm.Add(Pt + T)
        End Sub
    End Class


J'initialise la class et je récupère les données sur la variable Segm

Dim a As New segment2(New PointF(200, 200), New PointF(400, 400), New SizeF(350, 350), 16)
' les 2 coins du rectangle , le centre des rayons, le nombre de rayons

For Each Seg As PointF In a.Segm
       ' Trace le segment de (350, 350) au Point Seg

Next 


Je chercherais ensuite sur un polygone quelconque comment corriger ma première class Segment et trouver l'erreur

Bonne prog cgsi3
--
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
5 mai 2014 à 12:49
Bonjour CGS13,

Merci pour le code que j'ai transposé en VB6. Cela fonctionne, même en assignant un centre en dehors du rectangle, à l'exception près que tous les rayons ne sont pas tracés.

Cheyenne.
0
Bonjour Cheyenne

Le fait que tous les rayons ne se tracent pas m intrigue. Si tu as le temps, peut tu transmettre ce que tu as transcrit pour voir si cela viens du code ou de la trigonométrie.

Sinon bonne prog
// et bon rétablissement a ucfoutu
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
6 mai 2014 à 00:20
Bonjour,

Voici mon code en VB6. Pour les essais je trace directement sur le Form.et je n'ai pas pris en compte la translationque je n'utilise pas.

Option Explicit

Private Type COORD
   x As Single
   y As Single
End Type

Dim p1 As COORD
Dim p2 As COORD
Dim xc As Integer
Dim yc As Integer

Const PI    As Double = 3.14159265358979
Const PId16 As Double = PI / 16

Private Sub Form_Activate()
   p1.x = 20:   p1.y = 20
   p2.x = 500:  p2.y = 500
   xc = 200:    yc = 200
       
   Me.Line (p1.x, p1.y)-(p2.x, p2.y), vbRed, B
   Call CERCLE
End Sub

Private Sub CERCLE()
   Dim a     As Single
   Dim angle As Single
  
   For angle = -PI To PI Step PId16
      a = Sin(angle) / Cos(angle)
      Call CALCUL(a, p1.x, False)
      Call CALCUL(a, p1.y, True)
      Call CALCUL(a, p2.x, False)
      Call CALCUL(a, p2.y, True)
   Next angle
End Sub

Private Sub CALCUL(a As Single, alpha As Single, droit As Boolean)
   Dim pt As COORD
   Dim ok As Boolean

   If droit Then
      pt.x = alpha / a
      pt.y = alpha
      If Not (pt.x >= p1.x Xor pt.x <= p2.x) Then ok = True
   Else
      pt.x = alpha
      pt.y = alpha * a
      If Not (pt.y >= p1.y Xor pt.y <= p2.y) Then ok = True
   End If
   
   If ok Then Me.Line (xc, yc)-(pt.x, pt.y)
End Sub


J'essaye d'affiner avec ta nouvelle fonction Interection, mais c'est pareil, je n'ai pas tous les rayons....

Bonne journée,

Cheyenne
0
Bonsoir cheyenne

La translation est ici très importante car elle me permet de supprimer de nombreux calcul
En plaçant par translation le centre des rayons en (0,0) je supprime bcp de chose.
ensuite j'applique aux résultats trouvés la translation inverse.

Pris telle quelle, sans translation, ma fonction est erroné.
Voici comment je corrigerai ça, dis moi si ca fonctionne.

Bonne nuit
CGSI3

Option Explicit

Private Type COORD
x As Single
y As Single
End Type

Dim p1 As COORD
Dim p2 As COORD
Dim pp1 As COORD
Dim pp2 As COORD
Dim xc As Integer
Dim yc As Integer

Const PI As Double = 3.14159265358979
Const PId16 As Double = PI / 16

Private Sub Form_Activate()
p1.x = 20: p1.y = 20
p2.x = 500: p2.y = 500
xc = 200: yc = 200

Me.Line (p1.x, p1.y)-(p2.x, p2.y), vbRed, B
Call CERCLE
End Sub

Private Sub CERCLE()
Dim a As Single
Dim angle As Single
pp1.x=p1.x-xc
pp1.y=p1.y-yc
pp2.x=p2.x-xc
pp2.y=p2.y-yc
For angle = -PI To PI Step PId16
a = Tan(angle)
Call CALCUL(a, pp1.x, False)
Call CALCUL(a, pp1.y, True)
Call CALCUL(a, pp2.x, False)
Call CALCUL(a, pp2.y, True)
Next angle
End Sub

Private Sub CALCUL(a As Single, alpha As Single, droit As Boolean)
Dim pt As COORD
Dim ok As Boolean

If droit Then
pt.x = alpha / a
pt.y = alpha
If Not (pt.x >= pp1.x Xor pt.x <= pp2.x) Then ok = True
Else
pt.x = alpha
pt.y = alpha * a
If Not (pt.y >= pp1.y Xor pt.y <= pp2.y) Then ok = True
End If

If ok Then Me.Line (xc, yc)-(pt.x + xc, pt.y + xy)
End Sub
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
6 mai 2014 à 14:07
Bonjour CGSI3,

Ben tu vois, quand tu veux... non je plaisante !!!

Après plusieurs essais, en assignant le centre à partir d'un clic sur la Form, force est de constater que ton code fonctionne à merveille.
Juste un détail, dans la ligne du tracé pour y2 tu as codé xy au leu yc)
J'ai bien compris qu'avec pp1 et pp2 tu ramènes le centre à "zéro" d'où mon erreur de vouloir se passer de la translation qui je croyais servait à faire un offset des coordonnées du rectangle.

Je te remercie pour ton aide précieuse qui va m'être également utile pour d'autres projets.

En ce qui me concerne, je pourrais clore le sujet, mais tu avais dit vouloir te pencher sur le même problème mais avec un polygone. Donc,dis-moi si je peux clore ou non.

Bonne journée et encore merci.

Cheyenne
0
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
4 mai 2014 à 21:49
Et la correction de la première class

  Public Class segment
        Private _P1 As PointF
        Private _P2 As PointF
        Public c As Double 'y = cx+d
        Public d As Double 'd = y - cx
        Private _Translation As SizeF

        Public Sub New(ByVal P1 As PointF, ByVal P2 As PointF, ByVal Translation As SizeF)
            _Translation = Translation : _P1 = P1 - Translation : _P2 = P2 - Translation
            If (_P2.X - _P1.X) = 0 Then
                c = Double.MaxValue : d = _P1.Y
            Else
                c = (_P2.Y - _P1.Y) / (_P2.X - _P1.X)
                d = _P1.Y - (_P1.X * c)
            End If
        End Sub

        Public Function Intersection(ByVal a As Double, ByVal b As Double) As PointF
            Dim retour As New PointF
            If a = 0 And c = 0 Then retour = Nothing
            If a = Double.MaxValue And c = Double.MaxValue Then retour = Nothing
            If c = 0 Then ' 2 cotés sont horizontaux (résoudre l 'intersection par les y) 
                retour.Y = CSng(_P1.Y)
                retour.X = CSng((_P1.Y - b) / a)
            ElseIf c = Double.MaxValue Then '  2 cotés sont verticaux (résoudre l 'intersection par les x) 
                retour.X = CSng(_P1.X)
                retour.Y = CSng(_P1.X * a + b)
            Else 'quelconque
                If c <> a And a <> 0 Then
                    retour.X = CSng((d - b) / (a - c))
                    retour.Y = CSng(a * retour.X + b)
                Else : retour = Nothing
                End If
            End If
            ' Ne pas oublier de faire une translation inverse sur les points trouvés et ensuite vérifier que le résultat appartient 
            ' au segment des cotés (un rectangle.contains peut faire l'affaire) 
            Dim ok As Boolean = False
            If Not (retour.X >= _P1.X Xor retour.X <= _P2.X) Then
                If Not (retour.Y >= _P1.Y Xor retour.Y <= _P2.Y) Then ok = True
            End If
            If Not IsNothing(retour) And ok Then
                Return retour + _Translation
            Else : Return Nothing
            End If
        End Function
    End Class


Bonne prog cgsi3

--
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
5 mai 2014 à 12:53
Re,

J'ai donc remplacé les 4 appels à la Sub Calcul par l'appel à la fonction Intersection. Même remarque que précédemment, à savoir que tous les rayons ne sont pas tracés.

Merci pour ta collaboration.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 5/05/2014 à 22:24
Et c'est maintenant qu'on voit l'importance d' "ergoter" (sic) à propos de ce "cadre"...
Qu'est-ce donc ? : un rectangle déssiné sur un Form ? Un contrôle Shape ? Un Frame ? Une Picturebox ?
Car ... hé oui ... le traitement ne saurait être le même , pardi, en ce qui concerne le "tracé" du "rayon" !

Et le "rayon" lui-même ? Par quoi et comment est-il matérialisé ?
- par un contrôle Line ?
- par dessin ? et sur quoi ?
C'est également "ergoter", que de poser ces questions, sans doute ?
Ces "petits détails" ont une extrême importance.
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
5 mai 2014 à 23:54
Bonjour ucfoutu,

Qu'est-ce que le cadre ? Il s'agit ici d'une PictureBox.
Mais je ne vois pas en quoi le traitement peut-être différent selon qu'il s'agisse d'un Form, d'un Shape d'un PictureBox ou bien d'un rectangle virtuel matérialisé ou non par un cadre dessiné avec des Line. De toutes façons il faut tenir compte des 4 coins de ce rectangle quel qu'il soit.
Le rayon,lui, est dessiné par des Line(x1,y1)-(x2,y2) sur le PictureBox. La couleur des rayons changent avec l'angle, mais c'est ici un détail.

Bon rétablissement,

Cheyenne
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 6/05/2014 à 06:41
Le rayon,lui, est dessiné par des Line(x1,y1)-(x2,y2) sur le PictureBox.

Il est normal que tu ne voies pas tous les rayons lorsque leur centre n'est pas sur la picturebox.
Puisque la méthode Line s'applique à un objet doté d'un hdc (donc soit le Form, soit la picturebox, mais pas les deux "en même temlps"). Ainsi : un rayon partant d'un centre situé hors de la picturebox et intersectant la droite d'un côté en dehors du segment du dit côté sera totalement invisible à l'écran. Et si tu dessines le rayon sur le Form, toute la partie de ce rayon partagée avec la picturebox sera occultée par la picturebox.
PS : il faut par ailleurs que la propriété Autoredraw soit à True.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 5/05/2014 à 07:44
Bonjour,
Désolé. Pas en état de développer dans l'immédiat.
Je vais donc me contenter d'indiquer la marche à suivre pour résoudre simplement ce problème mathématique et non de développement :
- si on relie un point situé à l'intérieur d'un rectangle (car c'est un rectangle, et non un "cadre") à chacun des angles du rectangle, on obtient 4 angles. Les trois premiers se calculent trigonométriquement. Le 4ème par soustraction de 360 - la somme des 3 1ers.
- un simple select case sur la valeur de l'angle du rayon suffit donc pour savoir quel côté du rectangle sera intersecté par le rayon.
- le reste : comme l'a dit cgsi3 dès son premier message : solution d'un système simple d'équations linéaires (y = ax + b) à 2 inconnues (équation de la droite du rayon et équation du côté retenu en select case)
Nota : les cas particuliers (point sur un côté, point d'intersection "partagé", etc ...) se règlent simplement dans le select case (à coups de <, <=, > et >=)
Une autre fois : ce n'est pas là un problème de développement, mais d'analytique.
Je vous laisse maintenant faire et retourne à mon repos.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
5 mai 2014 à 12:40
Bonjour ucfoutu,

N'ergotons point, tu as parfaitement compris que le cadre en question était bien un rectangle. Rectangle matérialisé justement par un cadre.Tu es d'ailleurs bien le seul qui m'ait fait cette remarque.
Certes, ce n'est pas un problème de développement mais je te te fais aimablement remarquer que le titre du sujet est "Question de trigonométrie" et non pas une demande d'aide pour un code..
Certes le forum est dédié au développement, mais je sais que certains sont très forts en trigo d'où ma question qui permet en plus d'écrire du code pour y répondre.

Allez, repose-toi bien...

Cheyenne
0
Rejoignez-nous