Bred Posté(e) le 19 septembre 2007 Posté(e) le 19 septembre 2007 Salut,- Lorsque l'on fait une rotation du SCU par 3points, lors de la demande de sélection du "point de la zone positive de l'axe Y", Autocad nous propose par défaut (c'est ce que j'en ai déduit) des coordonnées Y ne faisant basculé le plan que sur 1 axe. Mon souci est donc de savoir calculer ce point qu'autocad nous donne d'office, afin de pouvoir utiliser les matrices de (gile) pour pouvoir calculer la normale au plan donné... merci d'avance. [Edité le 19/9/2007 par Bred] Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
didier Posté(e) le 19 septembre 2007 Posté(e) le 19 septembre 2007 hello, à première vue, et de manière empirique,il semble que le point proposé par défautse trouve à la verticale du premier point proposéà à peu près une unité dessinl'horizontale de défiition est la direction du nouvel axe des X. comme je disais, c'est empirique...mais ça se recoupe... amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
Bred Posté(e) le 19 septembre 2007 Auteur Posté(e) le 19 septembre 2007 Salut Didier et merci,il semble que le point proposé par défautse trouve à la verticale du premier point proposé :casstet: Point 1 : 2,2,2Point 2 : 4,2,5Point Y proposé : 2,3,2 -------------------- Point 1 : 0,0,0Point 2 : 2,2,0Point Y proposé : -0.71,0.71,0 -------------------- Point 1 : 1,2,3Point 2 : 4,5,6Point Y proposé : 0.29,2.71,3 ? Conclusions Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 19 septembre 2007 Posté(e) le 19 septembre 2007 Salut Bred, La position du point dans la zone positive des Y influe uniquement sur le sens de l'axe Z (toute la zone des Y positif est valable) ce point setr à appliquer la "règle de la main droite" . Ensuite, utilise la routine "Norm_3ps" (fais une recherche). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bred Posté(e) le 19 septembre 2007 Auteur Posté(e) le 19 septembre 2007 (toute la zone des Y positif est valable) ce point setr à appliquer la "règle de la main droite"Je l'imagine bien, mais pourquoi Autocad donne une valeur par défaut, et comment la calculer ?(parceque donner n'importe quel valeur Y+ ne donne pas (forcément) le même résultat que la valeur par défaut proposé....et donc pas le même résultat !) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
bonuscad Posté(e) le 19 septembre 2007 Posté(e) le 19 septembre 2007 Un extrait de l'aide (que j'ai toujours du mal à comprendre) à propos du calcul d'un axe arbitraire L'algorithme d'axe arbitraire est utilisé en interne par AutoCAD pour mettre en oeuvre une génération arbitraire mais homogène de systèmes de coordonnées d'objet pour toutes les entités qui utilisent un système de coordonnées d'objet.A partir d'un vecteur de longueur unitaire utilisé comme axe Z du système de coordonnées, l'algorithme génère un axe X correspondant pour ce système de coordonnées. L'axe Y suit par application de la règle de la main droite. La méthode consiste à examiner l’axe Z donné (également appelé vecteur normal) et à vérifier s’il est proche de l’axe Z positif ou négatif du système général. Le cas échéant, coupez l’axe Y du système de coordonnées général avec l’axe Z donné pour obtenir l'axe X arbitraire. Sinon, coupez l’axe Z du système de coordonnées général avec l’axe Z donné pour obtenir l'axe X arbitraire. La limite à laquelle la décision est prise est à la fois facile à calculer et portables d’une machine à l’autre. Ceci est réalisable grâce à une sorte de capsule polaire "carrée" dont les limites sont de 1/64, ce qui est précisément définissable par des fractions décimales et des octets de fraction binaire à six chiffres. L’algorithme procède comme suit : tous les vecteurs sont supposés être dans l'espace 3D et spécifiés dans le système de coordonnées général. Permet de désigner le vecteur normal N.Permet de désigner l’axe Y général Wy, lequel est toujours (0,1,0). Permet de désigner l’axe Z général Wy, lequel est toujours (0,0,1). Nous recherchons ici les axes arbitraires X et Y allant avec la perpendiculaire N. Ils auront pour noms Ax et Ay. N peut également être nommé Az (axe arbitraire Z) en procédant comme suit : Si (abs (Nx) 1/64) et (abs (Ny) 1/64) alors Ax = Wy X N ("X" représentant l’opérateur de produit vectoriel).Sinon, Ax = Wz X N. Mettre à l’échelle Ax sur la longueur unitaire. La méthode suivante permet d'obtenir le vecteur Ay : Ay = N X Ax. Mettre à l’échelle Ay sur la longueur unitaire. A tes neurones ;) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Bred Posté(e) le 19 septembre 2007 Auteur Posté(e) le 19 septembre 2007 A tes neuronesmerci....je sens que je vais passer une bonne soirée moi.... :casstet: Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 19 septembre 2007 Posté(e) le 19 septembre 2007 Salut, Il me semble que la valeur par défaut donnée par AutoCAD pour le point Y n'a d'intérêt qu'en 2d. D'ailleurs le point proposé est toujours dans le plan parallèle au plan XY qui contient la nouvelle origine (même valeur z pour le point 1 et le point proposé dans les exxemples de bred). Un peu de calcul vectoriel : le vecteur entre le point p1 (x1 y1 z1) et p2 (x2 y2 z2) - on dit aussi le déplacement de p1 en p2- a pour coordonnées (x2-x1 y2-y1 z2-z1) En 2d une rotation de 90° dans le sens trigonométrique (ou anti-horaire) du vecteur v de coordonnées (x y) est le vecteur (- y x) Dans le deuxième exemple, le déplacement est (2 2 0) le vecteur unitaire est (0.71 0.71 0.0) qui, si on lui fait faire une rotation de 90° devient (-0.71 0.71 0.0) le point proposé. Dans le premier exemple, si on fait abstraction de la coordonnée z (2d) le déplacement de point1 à point 2 est (4-2 2-2) soit (2 0) dont le vecteur unitaire est (1 0) qui devient, si on lui imprime une rotation de 90° (0 1) si on ajoute ce vecteur au point 1 on obtient (2+0 2+1) soit (2 3) qui si on le remet à l'altitude de point 1 devient (2 3 2) Dans le dernier exemple, li on fait abstraction de la coordonnée z (2d) le déplacement de point1 à point 2 est (4-1 5-2) soit (3 3) dont le vecteur unitaire est encore (0.71 0.71) et le perpendiculaire (-0.71 0.71). Si on "déplace" le point d'origne avec ce vecteur on a : (1-0.71 2+0.71) soit (0.29 2.71) et avec le z de point 1 (0.29 2.71 3.0) le point proposé. En 3d, un vecteur a une infinité de vecteurs qui lui sont perpendiculaires. Le choix arbitraire d'AutoCAD pour définir ce point proposé par défaut est celui du vecteur perpendiculaire qui est contenu dans le plan parallèle au plan XY à l'altitude du point 1 (origine). Ce qu'on pourrait traduire en LISP : ;;; VEC1 Retourne le vecteur normé (1 unité) de p1 à p2 (defun vec1 (p1 p2) (if (not (equal p1 p2 1e-009)) (mapcar '(lambda (x1 x2) (/ (- x2 x1) (distance p1 p2)) ) p1 p2 ) ) ) (defun ydir-defaut (org xdir / v) (setq v (vec1 org (list (car xdir) (cadr xdir) (caddr org)))) (mapcar '+ org (list (- (cadr v)) (car v) (caddr v))) ) [Edité le 20/9/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 20 septembre 2007 Posté(e) le 20 septembre 2007 En ce qui concerne l'algorythme arbitraire, j'avais déjà tenté une explication. Voir ici et là. Je réitère donc. Le propos de l'algorythme arbitraire est de définir une méthode non équivoque pour déterminer un systéme de coordonnées à partir du seul vecteur normal (et unitaire) du plan d'un objet (sa direction d'extrusion : code DXF 210). Autrement dit, de déterminer une origine et deux vecteurs unitaires perpendiculaires au premier et perpendiculaires entre eux tout en respectant la "règle de la main droite". L'origine choisie est celle du SCG => tous les SCO ont pour origine le 0,0,0 du SCG. Pour le calcul des vecteurs, l'outil utilisé est le produit vectoriel.Le résultat du produit vectoriel de deux vecteurs non colinéaires est le vecteur perpendiculaire à ceux-ci et qui respecte la "règle de la main droite". http://img347.imageshack.us/img347/3500/normal3as.png Comme au départ il n'y a de connu qu'un vecteur (appelons le Zdir), il suffit de faire le produit vectoriel d'un vecteur choisi arbitrairement par le vecteur Zdir pour obtenir un premier vecteur perpendiculaire à Zdir qui sera Xdir (le vecteur directeur de l'axe des X). Dans le cas de l'algorythme arbitraire le vecteur choisi est le vecteur (0 0 1). Mais, comme dit plus haut, les vecteurs ne doivent pas être colinéaires, sinon leur produit vectoriel est le vecteur nul (voir la méthode de DidierAD dans le challenge parllèles). Il est donc décidé, arbitrairement encore, que si la valeur absolue des coordonnées x et y du vecteur Zdir est inférieure à 1/64 (0.015625) (c-a-d qu'il est très proche ou égal à (0 0 1) ou (0 0 -1)), le vecteur Xdir sera le résultat du produit de (0 1 0) et Zdir. Une fois le vecteur Xdir déterminé le vecteur Ydir sera le résultat du produit vectoriel de Zdir par Xdir. Ce qui, traduit en LISP, donne (avec les routines de calcul vectoriel vlen, vunit et v^v données dans le premier lien ci-dessus) ;; Calcul de Xdir avec l'agorythme arbitraire (if (and (() (setq xdir (vunit (v^v '(0 1 0) zdir))) (setq xdir (vunit (v^v '(0 0 1) zdir))) ) ;; Calcul de Ydir à parti des deux premiers (setq ydir (vunit (v^v zdir xdir))) ) ;; si Zdir n'est pas un vecteur unitaire, en faire un vecteur unitaire (if (/= (vlen zdir) 1) (setq zdir (vunit zdir)) ) Le même résultat peut être obtenu par l'expression : (mapcar '(lambda (v) (trans v zdir 0)) '((1 0 0) (0 1 0) (0 0 1))) [Edité le 20/9/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bred Posté(e) le 20 septembre 2007 Auteur Posté(e) le 20 septembre 2007 :D :D :D merci :D :D :D Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
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