Faire une perpendiculaire d'une ligne passant par un point. C# Windows Form
Fermé
Pearusdoancaia
Messages postés
71
Date d'inscription
mardi 21 mai 2019
Statut
Membre
Dernière intervention
14 janvier 2021
-
21 avril 2020 à 17:39
Utilisateur anonyme - 26 avril 2020 à 22:47
Utilisateur anonyme - 26 avril 2020 à 22:47
A voir également:
- Faire une perpendiculaire d'une ligne passant par un point. C# Windows Form
- Aller à la ligne dans une cellule excel - Guide
- Point de restauration windows 10 - Guide
- Clé windows 10 gratuit - Guide
- Partager photos en ligne - Guide
- Montage video windows - Guide
7 réponses
yg_be
Messages postés
23476
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 février 2025
Ambassadeur
1 568
Modifié le 21 avril 2020 à 18:25
Modifié le 21 avril 2020 à 18:25
si cela peut t'aider, l'équation de ta droite de départ, qui passe par (100,100) et (400,400) est:
y=x
comme tu as vu sur youtube, la droite perpendiculaire a pour équation:
y= -x + h
comment trouver h? facile, car la perpendiculaire passe par (100,100)
cependant, tu dois trouver les coordonnées du point C, pas l'équation de la droite perpendiculaire.
y=x
comme tu as vu sur youtube, la droite perpendiculaire a pour équation:
y= -x + h
comment trouver h? facile, car la perpendiculaire passe par (100,100)
cependant, tu dois trouver les coordonnées du point C, pas l'équation de la droite perpendiculaire.
Utilisateur anonyme
Modifié le 21 avril 2020 à 21:11
Modifié le 21 avril 2020 à 21:11
Bonsoir
Le vecteur AC a une pente de -1 et une norme de 50.
La pente est de -1 donc Y = -X.
La norme est de 50 donc 50 = Racine(X^2 + Y^2)
=> 50^2 = X^2 + (-X)^2
(-X)^2 = X^2
=> 50^2 = 2X^2
=> 50 = Racine(2) X ou 50 = Racine(2) -X
=> X = 50/ Racine(2) ou -50 / Racine(2).
Tu détermines quelle solution colle pour que C soit dans la bonne direction.
Le vecteur AC a une pente de -1 et une norme de 50.
La pente est de -1 donc Y = -X.
La norme est de 50 donc 50 = Racine(X^2 + Y^2)
=> 50^2 = X^2 + (-X)^2
(-X)^2 = X^2
=> 50^2 = 2X^2
=> 50 = Racine(2) X ou 50 = Racine(2) -X
=> X = 50/ Racine(2) ou -50 / Racine(2).
Tu détermines quelle solution colle pour que C soit dans la bonne direction.
Utilisateur anonyme
21 avril 2020 à 21:20
21 avril 2020 à 21:20
Tu peux aussi faire la somme des vecteurs AB + BC = AC en corrélation avec Pythagore
Oui voilà, n'est ce pas la même chose d'ailleurs dans vos 2 exemples ?
Parce qu'il ne me semble pas qu'il existe tant de méthodes que ça pour calculer les coordonnées et angles d'un triangle.
Donc Pythagore ce qui remonte quand même à quelque temps et son fameux théorème le plus connu(il a aussi inventé les partitions de musique mais c'est autre chose).
Simple problème de géométrie de niveau collège et la difficulté est simplement de poser l'énoncé quand on a la formule.
Parce qu'il ne me semble pas qu'il existe tant de méthodes que ça pour calculer les coordonnées et angles d'un triangle.
Donc Pythagore ce qui remonte quand même à quelque temps et son fameux théorème le plus connu(il a aussi inventé les partitions de musique mais c'est autre chose).
Simple problème de géométrie de niveau collège et la difficulté est simplement de poser l'énoncé quand on a la formule.
Non ce n’est pas la même chose.
Et non Pythagore ne permet ni de calculer des angles ni des coordonnées.
Seulement la longueur d’un coté d’un triangle rectangle si on connaît les 2 autres.
Mon premier exemple part de là où elle en était à savoir 1 coefficient directeur et une distance.
De ce point, il y avait 3 solutions qui me sont venues à l’esprit
Le vecteur directeur était le plus simple à ce moment de sa réflexion, et pour le calcul de ses coordonnées delta x (que j’ai appelé X) et delta y, je me suis servis de la combinaison entre le coefficient directeur et de Pythagore.
Ma seconde proposition revient à faire un système d’équations à partir des coordonnées des 3 vecteurs.
On pourrait aussi faire une triangulation à partir des coordonnées des points A et B et des coefficients directeurs des droite (AC) et (BC) bref y’a pleins de solutions
Et non Pythagore ne permet ni de calculer des angles ni des coordonnées.
Seulement la longueur d’un coté d’un triangle rectangle si on connaît les 2 autres.
Mon premier exemple part de là où elle en était à savoir 1 coefficient directeur et une distance.
De ce point, il y avait 3 solutions qui me sont venues à l’esprit
- un système d’équations avec l’équation de la droite.
- de la trigonométrie
- un vecteur directeur.
Le vecteur directeur était le plus simple à ce moment de sa réflexion, et pour le calcul de ses coordonnées delta x (que j’ai appelé X) et delta y, je me suis servis de la combinaison entre le coefficient directeur et de Pythagore.
Ma seconde proposition revient à faire un système d’équations à partir des coordonnées des 3 vecteurs.
On pourrait aussi faire une triangulation à partir des coordonnées des points A et B et des coefficients directeurs des droite (AC) et (BC) bref y’a pleins de solutions
Pearusdoancaia
Messages postés
71
Date d'inscription
mardi 21 mai 2019
Statut
Membre
Dernière intervention
14 janvier 2021
86
25 avril 2020 à 15:13
25 avril 2020 à 15:13
Re, merci pour vos réponse. A la base je voulais savoir si une méthode existait pour faire une perpendiculaire en C#, mais visiblement ça n'existe pas.
Visiblement on est partit pour le faire manuellement, donc :
J'ai pris en compte vos solutions, j'ai continué à chercher et j'ai une solution qui, je pense, doit fonctionner :
Sans vraiment trop comprendre j'ai pris ce calcul :
"xc = xa +/- AC/AB * (ya-yb)
yc = ya +/- AC/AB * (xb-xa)"
(voir la réponse de robert et ses amis : https://forums.futura-sciences.com/mathematiques-superieur/25147-coordonnees-dun-point-dun-triangle.html (lui a mis "(ya-ab)" je pense qu'il a fait une faute de frappe et c'est "(ya-yb)"))
Que j'ai transposé sur mon problème, ce qui donne :
Avec :
Et :
Sauf qu'il y a un problème... Lorsque je calcul AC (qui doit faire 50 cm je le rappelle) :
J'ai une imprécision :

Imprécision qui est dû, je pense, aux coordonnées des points utilisés qui sont des FPoint et non des "decimal Point" (chose que je ne trouve pas) qui serait plus précis.
Il y a donc une imprécision dans le calcul de ABd, donc dans le calcul de Xc et Yc puis une imprécision dans le calcul de distanceAC. Alors, comment faire pour régler ce problème ? Comment utiliser des coordonnées décimales en C# ?
Visiblement on est partit pour le faire manuellement, donc :
J'ai pris en compte vos solutions, j'ai continué à chercher et j'ai une solution qui, je pense, doit fonctionner :
Sans vraiment trop comprendre j'ai pris ce calcul :
"xc = xa +/- AC/AB * (ya-yb)
yc = ya +/- AC/AB * (xb-xa)"
(voir la réponse de robert et ses amis : https://forums.futura-sciences.com/mathematiques-superieur/25147-coordonnees-dun-point-dun-triangle.html (lui a mis "(ya-ab)" je pense qu'il a fait une faute de frappe et c'est "(ya-yb)"))
Que j'ai transposé sur mon problème, ce qui donne :
decimal Xc = (decimal)T1P1.X + 50 / ABd * (T1P1.Y - T1P2.Y); decimal Yc = (decimal)T1P1.X + 50 / ABd * (T1P2.X - T1P1.X);
Avec :
Point T1P1 = new Point(100, 100); Point T1P2 = new Point(400, 400);
Et :
decimal ABd = (decimal)Math.Sqrt((Math.Pow(T1P1.X - (T1P2.X), 2) + Math.Pow(T1P1.Y - (T1P2.X), 2)));
Sauf qu'il y a un problème... Lorsque je calcul AC (qui doit faire 50 cm je le rappelle) :
decimal distanceAC = (decimal)Math.Sqrt((Math.Pow(T1P1.X - (C.X), 2) + Math.Pow(T1P1.Y - (C.Y), 2))); MessageBox.Show("" + distanceAC);
J'ai une imprécision :
Imprécision qui est dû, je pense, aux coordonnées des points utilisés qui sont des FPoint et non des "decimal Point" (chose que je ne trouve pas) qui serait plus précis.
Il y a donc une imprécision dans le calcul de ABd, donc dans le calcul de Xc et Yc puis une imprécision dans le calcul de distanceAC. Alors, comment faire pour régler ce problème ? Comment utiliser des coordonnées décimales en C# ?
yg_be
Messages postés
23476
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 février 2025
1 568
25 avril 2020 à 15:32
25 avril 2020 à 15:32
ce serait plus facile à expliquer si tu nous montrais les valeurs de C.X et de C.Y.
Pearusdoancaia
Messages postés
71
Date d'inscription
mardi 21 mai 2019
Statut
Membre
Dernière intervention
14 janvier 2021
86
>
yg_be
Messages postés
23476
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 février 2025
25 avril 2020 à 16:16
25 avril 2020 à 16:16
Yép, alors, C.X et C.Y sont les coordonnées du point C :
Qui valent :

PointF C = new PointF(Convert.ToSingle(Xc), Convert.ToSingle(Yc));
Qui valent :
yg_be
Messages postés
23476
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 février 2025
1 568
>
Pearusdoancaia
Messages postés
71
Date d'inscription
mardi 21 mai 2019
Statut
Membre
Dernière intervention
14 janvier 2021
25 avril 2020 à 20:53
25 avril 2020 à 20:53
peux-tu copier du texte, et pas des images de texte?
l'imprécision est souvent inévitable, dès que tu choisis de mémoriser un nombre plutôt qu'une fraction ou qu'une formule telle qu'une racine.
dans ton cas, quand tu écris
prenons un exemple simple: x=1/3. écris la représentation numérique de x sur une feuille.
passe ensuite cette feuille à une autre personne, et demande lui de multiplier x par trois.
qu'obtiens-tu?
dans la plupart des cas, cette approximation n'est pas gênante.
je te félicite de l'avoir remarqué, et de t'en inquiéter.
je ne peux pas décider si, dans ton cas, tu dois laisser tomber (accepter l'imprécision), ou chercher une solution précise.
pour obtenir des solutions précises, tu peux utiliser des fonctions algébriques ou symboliques. en C# par exemple: https://symbolics.mathdotnet.com/
l'imprécision est souvent inévitable, dès que tu choisis de mémoriser un nombre plutôt qu'une fraction ou qu'une formule telle qu'une racine.
dans ton cas, quand tu écris
decimal Xc = (decimal)T1P1.X + 50 / ABd * (T1P1.Y - T1P2.Y);, tu renonces à la précision.
prenons un exemple simple: x=1/3. écris la représentation numérique de x sur une feuille.
passe ensuite cette feuille à une autre personne, et demande lui de multiplier x par trois.
qu'obtiens-tu?
dans la plupart des cas, cette approximation n'est pas gênante.
je te félicite de l'avoir remarqué, et de t'en inquiéter.
je ne peux pas décider si, dans ton cas, tu dois laisser tomber (accepter l'imprécision), ou chercher une solution précise.
pour obtenir des solutions précises, tu peux utiliser des fonctions algébriques ou symboliques. en C# par exemple: https://symbolics.mathdotnet.com/
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
25 avril 2020 à 15:26
25 avril 2020 à 15:26
Bonjour
C’est un problème classique auquel un débutant qui a brûlé les étapes se retrouve confronté: les nombres à virgule flottante.
Dans ce message, j’ai esquissé une comparaison https://forums.commentcamarche.net/forum/affich-35846831-erreur-de-calcul#3
Dalfab et Reivax sont venus ensuite préciser chacun avec son explication.
C’est un problème classique auquel un débutant qui a brûlé les étapes se retrouve confronté: les nombres à virgule flottante.
Dans ce message, j’ai esquissé une comparaison https://forums.commentcamarche.net/forum/affich-35846831-erreur-de-calcul#3
Dalfab et Reivax sont venus ensuite préciser chacun avec son explication.
Pearusdoancaia
Messages postés
71
Date d'inscription
mardi 21 mai 2019
Statut
Membre
Dernière intervention
14 janvier 2021
86
25 avril 2020 à 16:28
25 avril 2020 à 16:28
D'accord, j'avais bien compris que le problème venait du float, mais comment faire pour utiliser des décimales dans l'initialisation d'un point ?
Utilisateur anonyme
25 avril 2020 à 17:23
25 avril 2020 à 17:23
Il n’y a aucun intérêt.
Tu es à 5e-6, ça veut dire que si ton unité est le mettre, tu te prends la tête pour 5 microns.
Tu es à 5e-6, ça veut dire que si ton unité est le mettre, tu te prends la tête pour 5 microns.
Pearusdoancaia
Messages postés
71
Date d'inscription
mardi 21 mai 2019
Statut
Membre
Dernière intervention
14 janvier 2021
86
26 avril 2020 à 21:32
26 avril 2020 à 21:32
"Je me prend la tête pour 5 microns" Bah, si il y a une quelconque imprécision la droite n'est pas perpendiculaire en fait... Et ça ne fait pas 50 cm pile... ça veut dire que pour la suite, je doit faire une parallèle de la droite AB passant par C, faire la même chose pour une deuxième droite, placer un point (qu'on va appeler J) à l'intersection des deux droites parallèles et tracer un arc de centre J et de rayon 50 cm qui débute à l’interception de la droite AB et de l'arc puis de A'B' et de l'arc. Ce sera mieux en image :

Les parties visibles, à la fin, sont les segments CG et HB puis l'arc GH, tout le reste ne serait que des calculs pour trouver F, placer l'arc GH et supprimer AG et AH.
Le cercle de centre F doit impérativement faire 50 cm de rayon puis AB et AC doivent être impérativement tangents au cercle de centre F. Donc je ne veux pas d'imprécision.
Les parties visibles, à la fin, sont les segments CG et HB puis l'arc GH, tout le reste ne serait que des calculs pour trouver F, placer l'arc GH et supprimer AG et AH.
Le cercle de centre F doit impérativement faire 50 cm de rayon puis AB et AC doivent être impérativement tangents au cercle de centre F. Donc je ne veux pas d'imprécision.
Utilisateur anonyme
Modifié le 26 avril 2020 à 22:49
Modifié le 26 avril 2020 à 22:49
Te rends tu comptes, que sur 50 cm, on parle de 50 nanomètres.
C’est tellement infime, qu’en cas de construction réelle, même avec les meilleurs outils, une telle précision est extrêmement difficile à atteindre.
Mais bon, si tu veux avoir des « points » dont les champs sont de types decimal, il te suffit d’écrire la classe.
C’est tellement infime, qu’en cas de construction réelle, même avec les meilleurs outils, une telle précision est extrêmement difficile à atteindre.
Mais bon, si tu veux avoir des « points » dont les champs sont de types decimal, il te suffit d’écrire la classe.
21 avril 2020 à 20:44
21 avril 2020 à 21:37
il me semble que tu n'as pas utilisé ma suggestion précédente.
je pense qu'il n'est pas utile d'ainsi chercher par approximation les coordonnées du point C, il est préférable de le faire via un raisonnement mathématique.
(100,100) est sur la droite y= -x + h
le point C est sur la droite y= -x + h
la distance entre le point C et (100,100) est 50
cela permet facilement de calculer à la main les coordonnées du point C.