Aller au contenu

Projection d'un point sur une droite (perpendiculairement)


Messages recommandés

Posté(e)

Salut,

 

Regarde la fonction inters dans l'aide.

 

Soit A et B deux points distincts sur la droite et P le point à projeter, la projection (H) de P sur AB est :

(setq H (inters A B P (polar P (+ (/ pi 2.0) (angle A B)) 1.0) nil))

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

(defun c:ESSAI ()

 

 

(setq A(getpoint"\n cliquez sur le premier point : "))

(setq B(getpoint"\n cliquez sur le deuxième point : "))

 

J'ai fait un test sur une droite de type polylign et en ajoutant des espions je me suis rendu compte que le point projeté soit "proj" valait "nil" est-ce normal? Comment puis je faire également pour voir à l'écran mes points ? j'ai déjà été dans "format" "style de points" et choisis des points plus lisibles mais rien y fait :/

 

(command "polylign" A B "")


(setq P(getpoint"\n cliquez sur le premier point d'insertion du candélabre :"))

 

 
(setq proj (inters A B P (polar P (+ (/ pi 2.0) (angle A B)) 1.0))); A ET B sont les deux points formant la droite // P le point à projeter // proj est le point le projeté


)

 

Merci d'avance :)

Posté(e)

Bonjour à tous, Bryce j'ai fait un test avec la fonction vlax-curve-getClosestPointTo, la projection du point se fait bien, par contre lorsque je décide de changer le scu et de mettre en scu local sur la polylign pour tracer un segment perpendiculaire à ma droite, le point projeté, dans mon cas : "projectPoint" sort de ma droite. Est ce normal?

 

Giles comme je l'ai dis dans le post n°6 avec cette méthode, mon point projeté vaut "nil" est ce normal?

 

Merci par avance et bonne journée à vous. :rolleyes:

Posté(e)
J'ai fait un test sur une droite de type polylign et en ajoutant des espions je me suis rendu compte que le point projeté soit "proj" valait "nil" est-ce normal?

J'avais oublié de spécifier l'argument 'onSeg' à nil dans la fonction inters, j'ai corrigé.

Essaye de ne pas seulement copier/coller les expressions qu'on te donne, mais de les comprendre et de regarder l'aide pour les fonctions que tu ne connais pas.

 

Comment puis je faire également pour voir à l'écran mes points ? j'ai déjà été dans "format" "style de points" et choisis des points plus lisibles mais rien y fait

Tu sembles confondre les points tels que ceux retournés par des fonctions LISP (getpoint, inters, vlax-curve-getClosestPointTo, ...) qui ne sont que des listes de coordonnées et les entités graphiques point (nodal).

 

j'ai fait un test avec la fonction vlax-curve-getClosestPointTo, la projection du point se fait bien, par contre lorsque je décide de changer le scu et de mettre en scu local sur la polylign pour tracer un segment perpendiculaire à ma droite, le point projeté, dans mon cas : "projectPoint" sort de ma droite. Est ce normal?

Attention aux systèmes de coordonnées dans lesquels sont définis les points.

D'une manière générale, seuls les points retournés par getpoint ou getcorner sont définis dans le SCU courant.

Ceux retournés par les fonction vlax-curve* sont définis dans le SCG.

Ceux qu'on trouve dans les listes DXF des entités sont soit définis dans le SCG soit dans le SCO (Système de Coordonnées Objet) pour certaines entités (voir l'aide DXF pour ces entités). Si tu ne travailles qu'en 2d, le SCO est toujours équivalent au SCG.

Quand tu crées des entités, si tu utilises la fonction command, les points doivent être définis dans le SCU courant, si tu utilises entmake, les points doivent être définis dans le SCG (ou le SCO), enfin, avec les fonctions vlisp (vla-Add*), les points sont définis dans le SCG (sauf pour les polylignes).

Regarde la fonction trans pour convertir les points d'un système de coordonnées vers un autre.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Merci pour les infos Giles, j'ai toujours pas compris cet argument "Onseg" du coup j'ai crée une fonction lisp de projection avec une formule mathématique que j'ai trouvé sur le net.

 

Par contre j'ai un soucis quant au résultat du point "projeté orthonormal" .

 

J'ai essayé ensuite de créer un point nodal sur ce point dans mon cas "P" ou bien d'insérer un bloc à ce point et il s'avère que ce fameux point "P" est pas du tout projeté sur la droite.

 

Y a-t'il une erreur dans la formule?

 

Merci d'avance :) et bonne soirée à tous !

Posté(e)


(defun c:PROJECTION ()

;avec
;A= premier point de la droite 
;B= deuxième point de la droite
;C= point à projeter sur la droite
;P= projeté orthonormal
;r= paramètre indiquant l'emplacement de P sur la droite
;L= module de la droite AB


(setq A  (getpoint"\n cliquez sur le premier point "))
(setq xa (car A))
(setq ya (cadr A))
(setq B  (getpoint"\n cliquez sur le deuxième point"))
(setq xb (car B))
(setq yb (cadr B))
 
(setq droite (command "polylign" A B ""))
(setq C (getpoint"\n cliquez sur le premier candélabre "))
(setq xc (car C))
(setq yc (cadr C))

(setq L (sqrt (+(*(- xb xa) (- xb xa)) (*(- yb ya) (- yb ya)))))


(setq r  (/(-(*(- ya yc) (- ya yb)) (*(- xa xc) (- xb xa))) (* L L)))


(setq PX (*(+ xa r) (- xb xa))); abscisse du projeté orthonormal
(setq PY (*(+ ya r) (- yb ya))); ordonné du projeté orthonomal
 
(setq P (list PX PY) )


 
)

 

 

Avec le code c'est mieux <_<

Posté(e)

Et voici la formule que j'ai choisis :

 

 

 

Let the point be C (Cx,Cy) and the line be AB (Ax,Ay) to (Bx,By). The length of the line segment AB is L:

L= sqrt( (Bx-Ax)^2 + (By-Ay)^2 ) .

 

Let P be the point of perpendicular projection of C onto AB. Let r be a parameter to indicate P's location along the line containing AB, with the following meaning:

 

r=0 P = A

r=1 P = B

r<0 P is on the backward extension of AB

r>1 P is on the forward extension of AB

0<r<1 P is interior to AB

 

Compute r with this:

 

(Ay-Cy)(Ay-By)-(Ax-Cx)(Bx-Ax)

r = -----------------------------

L^2

 

The point P can then be found:

 

Px = Ax + r(Bx-Ax)

Py = Ay + r(By-Ay)

 

And the distance from A to P = r*L.

Posté(e)

Bonjour,

Attention, je n'y connais que dalle en lisp.

mais sur tes calculs de PX et PY,

j'ai l'impression que tu fais ceci:

(Ax+r)*(Bx-Ax)

ce qui n'a rien à voir

avec Ax+r*(Bx-Ax)

priorité à la multiplication, c'est bien connu..

Cordialement,

LrDb

Write a book about what ??

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité