Invité Patrick Posté(e) le 27 juillet 2004 Posté(e) le 27 juillet 2004 Un problème de géométrie intéressant soulevé par un utilisateur CAO (Tom), sur le forum Planetar: 1\ la largeur du petit rectangle, par exemple 10 unités.2\ je veux que chaque sommet du petit rectangle soit situé sur un côté différent du grand rectangle, et ce quel que soit le grand rectangle initial. La solution peut être manuelle, mathématique ou algorithmique de façon à être implémentée en Lisp ou VBA par exemple. Aucune solution n'a été trouvée pour l'instant... images/articles/rectang.jpg
extrusion Posté(e) le 28 juillet 2004 Posté(e) le 28 juillet 2004 oK homothétie et rotation ... tout ça pour dire que le petit triangle dans le coin est le meme triangle que celui formé par L, l et la diagonale du grand rectangle..... Bon il faut faire _scale du rectangle, et la diagonale devient 10, on tourne et on place dans les coins. Ca doit pas etre trop dur pour des pros du lisp comme vouzotes ! Moi je ne connais pas cette langue vernaculaire ... je voulais mettre une belle image, mais la nouvelle FAQ me dit que je peut pas, et comme j'ai pas de site perso ni de ftp, bah tampi !
Invité Patrick Posté(e) le 28 juillet 2004 Posté(e) le 28 juillet 2004 Je ne pense pas... images/articles/rectangle_impossible_01.png
extrusion Posté(e) le 28 juillet 2004 Posté(e) le 28 juillet 2004 :( MINCE ! Illusion d'optique ! Pourtant ya de l'homothétie la dedans ! bon j'y retournerai demain ...
Invité Patrick Posté(e) le 28 juillet 2004 Posté(e) le 28 juillet 2004 Remarque sur les messages et les réponses: Ne modifiez pas vos messages si quelqu'un y a déjà répondu, car les réponses ultérieures ne veulent plus rien dire! extrusion: je répondais à ton premier message sur ce fil de discussion qui disait que les deux autres coté du triangle d'hypothénuse 10 faisaient forcément 8 et 6, sur ma copie d'écran, ce n'est pas le cas.
8_pool Posté(e) le 28 juillet 2004 Posté(e) le 28 juillet 2004 Essayons par les maths.... Soient :L la largeur du grand rectangle, vert sur l'image de PatrickH la hauteur de ce même rectanglel la largeur du petit rectangle, bleu sur l'image de Patrickh la hauteur de ce même rectangle, 10 sur l'image de Patrickx le petit coté du petit triangle du coin, 5.49 sur l'image de Patricky le grand coté du petit triangle du coin, 8.36 sur l'image de Patricka le petit angle du triangle On sait que :h² = x² + y²x = h.sin(a)y = h.cos(a)l² = (H-y)² + (L-x)²L = h.cos(a) + l.sin(a)H = h.sin(a) + l.cos(a) Alors :l² = H² - 2.H.y + y² + L² - 2.L.x + x²l² = H² + L² + x² + y² - 2.(H.y + L.x)l² = H² + L² + h² - 2.((h.sin(a) + l.cos(a)).h.cos(a) + (h.cos(a) + l.sin(a)).h.sin(a))l² = H² + L² + h² - 2.h.(h.sin(a).cos(a) + l.cos²(a) + h.cos(a).sin(a) + l.sin²(a))l² = H² + L² + h² - 2.h.(l + 2.h.sin(a).cos(a))l² = H² + L² + h² - 2.h.(l + h.sin(2.a))2.h.(l + h.sin(2.a)) = H² + L² + h² - l²l + h.sin(2.a) = (H² + L² + h² - l²)/(2.h)h.sin(2.a) = (H² + L² + h² - l² - 2.h.l)/(2.h)sin(2.a) = (H² + L² + h² - l² - 2.h.l)/(2.h²) On exprime donc a en fonction des 4 dimensions connues L, H, l et h. En espérant que cela réponde à la question et que je n'ai pas fait d'erreur ... Ciao :cool:
sv_zx9r Posté(e) le 28 juillet 2004 Posté(e) le 28 juillet 2004 Sauf erreur de ma pars, on a 3 donnée et 2 inconnue:H, L et h sont connuepar contre a et l sont des inconnues donc la formule n'est pas résolvable..Malheureusement sinon c'était surement la solution.
8_pool Posté(e) le 28 juillet 2004 Posté(e) le 28 juillet 2004 Si a et l sont inconnues, il y a plus d'une solution, voire p't être même une infinité. Il faut donc en fixer une, a ou l. Si l est l'inconnue, il faut r'bidouiller les équations de départ pour l'isoler. Ciao :cool:
Invité Patrick Posté(e) le 28 juillet 2004 Posté(e) le 28 juillet 2004 Dans le problème posé par l'auteur du message original, il était spécifié que la largeur du petit rectangle est une constante de valeur 10.
didier Posté(e) le 28 juillet 2004 Posté(e) le 28 juillet 2004 bonsoirben voilà qu'on récupère les questions du serveur de news,c'est parfait, comme ça on va échanger,j'essaie de me libérer ce soir pour cogiteret je reviens à la charge demain,j'imagine une solution, mais faut que je la précise.à demain les gars, et les filles aussi ...il en va de " l'honneur" de CadXp, hihihihihiamicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
didier Posté(e) le 29 juillet 2004 Posté(e) le 29 juillet 2004 bonjourben alors,y'a pas encore de réponses ?déjà que ça ferme tôt ici en plus ça ouvre tard.moi je propose ça,les vérifs de faisabilité sont rajoutées in extremisc'est encore à peaufiner,mais l'essentiel est là :(setvar "orthomode" 0)(setvar "osmode" 0)(setvar "plinewid" 0)(setq p1 (getpoint"\nPoint de Base\n"))(setq p2 (getpoint p1"\n\tDirection du premier Rectangle\n"))(setq dir (angle p1 p2))(setq p3 (polar p1 (+ dir ( / pi 2)) 10 ))(setq p4 (polar p2 (+ dir ( / pi 2)) 10 ))(setvar "cecolor" "4")(command "_pline" p1 p3 p4 p2 "c") (setq p11 (getpoint p1"\n\tDirection du DEUXIEME Rectangle\n"))(setq dir2 (angle p1 p11))(setq test ( - dir dir2)) (while (or (and ( test -1.5708)) (and ( test -4.71239)) ) (progn (alert"impossible !!") (setq p11 (getpoint p1"\n\tDirection du DEUXIEME Rectangle\n") dir2 (angle p1 p11) test ( - dir dir2) ) ) ) (setq p22 (polar p2 (- dir2 ( / pi 2)) 10)) (setq p33 (polar p3 ( - dir2 ( / pi 2)) 10)) (setq p44 (polar p4 dir2 10)) (setq pbd (inters p1 p11 p2 p22 nil)) (setq phd (inters p2 p22 p4 p44 nil)) (setq phg (inters p3 p33 p4 p44 nil)) (setq pbg (inters p1 p11 p3 p33 nil)) (setvar "cecolor" "1") (command "_pline" pbd phd phg pbg "c") (setvar "cecolor" "256") )j'espère être mis au courant si ça convient ou pasallez moi je pars sur le terrainje repasse ce soir, pour voir les différentes versionsciao Éternel débutant... Mon site perso : Programmer dans AutoCAD
Invité Patrick Posté(e) le 29 juillet 2004 Posté(e) le 29 juillet 2004 Didier, le problème était de créer le petit rectangle, après avoir créé le grand.
didier Posté(e) le 29 juillet 2004 Posté(e) le 29 juillet 2004 hello,ah oui !et c'est spécifié où ?ah la communication !!!!!je regarde çaciao Éternel débutant... Mon site perso : Programmer dans AutoCAD
didier Posté(e) le 29 juillet 2004 Posté(e) le 29 juillet 2004 ben je suis tout penaudc'est que j'ai pas lu comme il fautmais je me vengerai ;) ciao Éternel débutant... Mon site perso : Programmer dans AutoCAD
extrusion Posté(e) le 30 juillet 2004 Posté(e) le 30 juillet 2004 Désolé Patrick, mais j'avais vu mon erreur dans la minute, et je ne pouvais pas la laisser !Par contre j'en suis là, avec des tortures du passé : L longeurl largeurx le coté du petit triangle d'hyp 10y l'autre coté de ce triangle XX + YY = 100(L-x)/y = (l-y)/xx = (yl + 100)/L il y avait bien de l'homothétie, mais je ne l'ai pas démontrée... juste remarquée par le dessin.
dr.loveless Posté(e) le 30 juillet 2004 Posté(e) le 30 juillet 2004 La dernière équation n'est pas bonne : x²+y²=100 (L-x)/y=(l-y)/x donc (L-x)x = (l-y)y -> Lx-x² = ly-y² -> Lx-ly = x²-y² et non pas x²+y² sauf erreur de ma part. J'arrive donc à une équation : rac = racine ly-L.rac(100-y²)+100-2y²=0 Bon courage à ceux qui voudrait la simplifiée! Le DOC
mesylva Posté(e) le 30 juillet 2004 Posté(e) le 30 juillet 2004 Didier , dis moi comment insérer une image dans ma requête .. S.V.P .. :casstet:
didier Posté(e) le 30 juillet 2004 Posté(e) le 30 juillet 2004 bonsoir mesylva,il faut adresser ton image à Patrick,WEBMASTER incontesté de CadXp,qui la rangera là où il faut, pour que toute la communautéen profite.amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
didier Posté(e) le 2 août 2004 Posté(e) le 2 août 2004 ehehehehehehehehil est tout content le didier,il a une solutionil a pensé à ça aujourd'hui,c'est simple comme tout,il se fait peut être des idées,mais il s'y colle ce soir dès qu'il rentre dans sa maison personnelle à lui même,eh oui, il est encore au boulot à vingt heures, pas vous ? donc, disai-je, je m'y colle en rentrant et si c'est comme je pense, on aura encore reculé les limites du sublime, en toute modestie, vous me connaissez maintenant.à demain pour des nouvelles, bonnes, j'espère :P amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
didier Posté(e) le 4 août 2004 Posté(e) le 4 août 2004 coucou,ben, je m'aperçois que le fait que je suis sur le point de proposerune solution vous laisse tous froids.je n'ai pas oublié, de poster ma réponse,mais n'ayant pas Internet à la maison,je ne suis pas encore en mesure de la poster,elle est bien avancée, mais j'aimerai peaufiner.je me berce de douces illusions, en me persuadantque ça vous intéresse.snif snifvu que le degré d'urgence de la réponse n'est pas critique,je vais prendre le temps de faire ça bien.mais amicalement quand même. Éternel débutant... Mon site perso : Programmer dans AutoCAD
extrusion Posté(e) le 4 août 2004 Posté(e) le 4 août 2004 Hello Didier, mais si cela m'interese !Je pense que je ne suis pas loin de trouver...mais pas en lisp ou autre..juste en calcul.Je suis en train de me faire un peu mal avec des équations de cercle...c'est loin tout ça !
Invité Patrick Posté(e) le 10 août 2004 Posté(e) le 10 août 2004 Pour info, la suite de ce problème est discutée par Didier sur le forum LISP car il propose une solution en LISP.
bonuscad Posté(e) le 12 août 2004 Posté(e) le 12 août 2004 Salut à tous Ben j'ai pas trouvé de solution autre que par itération (comme Kamal et Didier)J'ai essayé d' établir une fourchette de recherche en augmentant la précision lors de l'approche du résultat.Donc cette routine sera plus rapide que la boucle de la mort de Didier ;) La gestion des erreurs est peut être aussi plus complète. (defun c:rec_inscrit ( / ent ent_rec ptlst old_icusc l h l1 h1 h2 old_osm da db n alpha p1 p2 p3 p4 flag) (setvar "cmdecho" 0) (while (null (setq ent (entsel "\nSélectionner un rectangle: ")))) (setq ent_rec (entget (car ent))) (cond ((eq (cdr (assoc 0 ent_rec)) "LWPOLYLINE") (setq ptlst (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) ent_rec))) (setq old_icusc (getvar "UCSICON")) (setvar "UCSICON" 0) (command "_.ucs" "_object" (cadr ent)) (setq ptlst (list (trans (car ptlst) 0 1) (trans (cadr ptlst) 0 1) (trans (caddr ptlst) 0 1) (trans (cadddr ptlst) 0 1))) (setq ptlst (list (list (eval (cons min (mapcar 'car ptlst))) (eval (cons min (mapcar 'cadr ptlst)))) (list (eval (cons max (mapcar 'car ptlst))) (eval (cons min (mapcar 'cadr ptlst)))) (list (eval (cons max (mapcar 'car ptlst))) (eval (cons max (mapcar 'cadr ptlst)))) (list (eval (cons min (mapcar 'car ptlst))) (eval (cons max (mapcar 'cadr ptlst)))) ) ) (cond ((and (= (length ptlst) 4) (zerop (rem (- (angle (car ptlst) (cadr ptlst)) (angle (car ptlst) (cadddr ptlst))) (/ pi 2))) (zerop (rem (- (angle (cadr ptlst) (car ptlst)) (angle (cadr ptlst) (caddr ptlst))) (/ pi 2))) (zerop (rem (- (angle (caddr ptlst) (cadr ptlst)) (angle (caddr ptlst) (cadddr ptlst))) (/ pi 2))) (zerop (rem (- (angle (cadddr ptlst) (car ptlst)) (angle (cadddr ptlst) (caddr ptlst))) (/ pi 2))) ) (setq l (distance (car ptlst) (cadr ptlst)) h (distance (cadr ptlst) (caddr ptlst)) l1 (max l h) h1 (min l h) ) (initget 7) (while (< h1 (setq h2 (getdist "\nHauteur du rectangle à incrire: "))) (princ "\nHauteur plus grande à celle du rectangle sélectionné.") (initget 7) ) (setq old_osm (getvar "osmode")) (setvar "osmode" 0) (setq da (sqrt (/ (* h2 h2) 2)) db (sqrt (- (* h2 h2) (* da da))) n 0.1 alpha 0.0) (while alpha (setq p1 (polar (car ptlst) (angle (car ptlst) (cadr ptlst)) da) p3 (polar (caddr ptlst) (angle (caddr ptlst) (cadddr ptlst)) da) p2 (polar (caddr ptlst) (angle (caddr ptlst) (cadr ptlst)) db) p4 (polar (car ptlst) (angle (car ptlst) (cadddr ptlst)) db) ) (setq alpha (rem (- (angle p1 p4) (angle p1 p2)) (/ pi 2))) (if (equal alpha 0.0 n) (setq flag T) (setq flag nil)) (cond ((and (< alpha 0.0) flag) (setq n (- (/ n 10.0))) ) ((and (> alpha 0.0) flag) (setq n (+ (/ n 10.0))) ) ) (if (equal alpha 0.0 1E-12) (progn (command "_.pline" p1 p2 p3 p4 "_close") (setq alpha nil) ) ) (setq da (- da n) db (sqrt (- (* h2 h2) (* da da)))) ) (setvar "osmode" old_osm) ) (T (princ "\nN'est pas un rectangle parfait!") ) ) (command "_.ucs" "_previous") (setvar "UCSICON" old_icusc) ) (T (princ "\nEntité non valide!") ) ) (setvar "cmdecho" 1) (princ) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrice26 Posté(e) le 7 septembre 2004 Posté(e) le 7 septembre 2004 Voir la mise en équation et une solution approchée avec la TI-92 ou GéoPlan sur le site Descartes et les mathématiques : http://perso.orange.fr/debart/1s/cadxp.html [Edité le 23/2/2007 par Patrice26]
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant