Aller au contenu

Solution rectangles encastrés


didier

Messages recommandés

Bonsoir à Toutes et à Tous,

je n'ai vraiment pas tout le temps dont j'ai besoin,

je livre ma solution sans avoir eu le temps nécessaire au peaufinage,

en particulier sur la valeur de départ,

la routine est un peu longue à trouver un résultat mais ça finit par clore.

je n'ai pas testé les impossibilités, à vous de jouer

 

il s'agit d'une solution par itération :

 

bon, on imagine que le premier rectangle existe,

jusque là, j'ai pas fait de miracle,

 

ensuite on mémorise les sommets et les gisements:

 

(setq p1(getpoint"\nPoint Bas Gauche\n"))

(setq p2 (getpoint p1 "\nPoint Bas Droit\n"))

(setq p3 (getpoint p2 "\nPoint Haut Droit\n"))

 

; moitié de PI

(setq pi2 ( / pi 2))

(setvar "osmode" 0)

(setvar "cmdecho" 0)

 

; direction 1

(setq dir (angle p1 p2))

 

; direction 2

(setq dir2 (angle p2 p3))

 

; point de départ de a

(setq a 0.000001)

 

;Calcul d'un point sur le gisement contraire de p1 p2 sur une distance de a

(setq p5 (polar p3 (- dir pi) a))

 

;calcul de b en rapport à a

(setq b (sqrt (- 100 (* a a))))

;Calcul d'un point sur le gisement de p1 p2 sur une distance de a

(setq p4 (polar p1 dir a))

;Calcul d'un point sur le gisement perpendiculaire contraire de p1 p2 sur une distance de b

(setq p6 (polar p1 dir2 b))

;mesurage de l'angle du sommet du triangle obtenu

(setq d1 (angle p6 p5) d2 (angle p6 p4))

(setq test 0.0)

;et là c'est la boucle de la mort

;en français dans le texte

; tant que la différence de gisement n'est pas à la valeur approchée de PI

;recalcule un nouveau "a" et donc un nouveau "b" et ainsi de suite..

(while (not (equal test pi 0.00000005))

(setq a ( + 0.000001 a))

(setq p5 (polar p3 (- dir pi) a))

(setq b (sqrt (- 100 (* a a))))

(setq p4 (polar p1 dir a))

(setq p6 (polar p1 dir2 b))

(setq d1 (angle p6 p5) d2 (angle p6 p4) test (- (- d2 d1)pi2))

; c'est une ligne optionnelle qui ne sert à rien sinon à montrer que ça tourne

(print (rtos (- test pi )2 8))

; fin de la boucle

)

 

; on calcule le point manquant

(setq p7 (polar p3 (- dir2 pi) b))

;et on fait une polyligne

(command "_pline" p4 p6 p5 p7 "c")

; et maintenant on affiche la précision de la figure dessinée

(print (strcat "Précision Angulaire : "(rtos (- test pi )2 8)))

 

merci de me tenir au courant d'éventuel dysfonctionnement

Amicalement

 

Lien vers le commentaire
Partager sur d’autres sites

coucou

version 1.1

une première impossibilité vient d'apparaître :

c'est dans le cas où le rectangle de base n'a pas une hauteur

supérieure à 10,

ça va se résoudre en insérant un test :

(setq hauteurrectangle (distance p2 p3))

(while (

(progn

(alert "\n Impossible car Hauteur inférieure à 10\n")

(setq p3 (getpoint p2 "\nPoint Haut Droit\n"))

(setq hauteurrectangle (distance p2 p3))

)

)

il y en a d'autres, en particulier, les directions du rectangle initial

mais après tout, il faut que tout le monde s'y mette.

PS : j'ai la même solution en VBA, c'est plus joli,

mais pas plus rapide, contrairement à ce que j'imaginais

c'est le même fonctionnement.

bon j'arrête de vous saouler, une petite clope et au lit

avec un bon bouquin.

demain sera une autre aventure.

ciao

 

Lien vers le commentaire
Partager sur d’autres sites

Invité Patrick

Malgré toutes les bonnes volontés, la difficulté de ce petit problème de géométrie semble grande, j'en veux pour preuve que nos amis de l'AutoCAD Users Forum cogitent aussi sur le même sujet, voir ce fil de discussion!

 

On cite même nos discussions et nos tentatives de solution sur cet autre forum... la géométrie, un langage universel? ;) ;) Didier?

 

note: signalons que cette discussion fait suite à celle ci.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

je n'ai pas encore tester le programme mais c'est la méthode qui me paraît la plus simple.

je dit bien "paraît", car je me suis casser les dents dessus... il y a trop longtemps que je n'ai pas fait cela. j'étais parti sur la recherche par itération du rayon du cercle circonscrit aux deux rectangles de cotés 10. Après cela j'ai cherché (et cherche toujours) la relation exacte qui lie les inconnues aux données connues...toujours rien !

 

Par contre il y a aussi des cas pour un rectangle d'origine de coté inférieur à 10... le rectangle inscrit aura 10 pour longeur.

 

Ce pb de géométrie va me rendre dingue !

Lien vers le commentaire
Partager sur d’autres sites

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é