dimanche 1 mars 2020

BlockScad : Les courbes de Bézier en 3D

Les courbes de Bézier en 3D

La courbe de Bézier d’ordre 3 est la formule suivante :
P0*(1-t)3 + 3*P1*t*(1-t)2 + 3*P2*t2*(1-t) + P3*t3  et cela pour la variable (t) qui varie entre 0 et 1.

Cette formule doit se calculer pour toutes les abscisses des Points, c’est à dire P0x, P1x, P2x, P3x et aussi pour les ordonnées de ces points, c’est à dire P0y, P1y, P2y, P3y et enfin pour les hauteurs P0z, P1z, P2z, P3z.
J’ai repris exactement le même texte que pour les courbes de Bézier en 3D et en rouge ce qu’il faut ajouter pour passer en 3D. Vraiment simple ! Voici le bloc 3D Bezier3.



Les Block 3D Bezier4

La même chose pour le block Bézier avec 5 points.


3D Bézier 5

Maintenant la version 6 points (Bézier 5).


C’est vrai, bouger les points pour régler la courbe n’est pas très pratique. Mais faire la courbe sous un autre logiciel (beaucoup de tutoriels proposent Inkscape) n’est guère plus pratique pour des courbes simples.


BlockScad : Le passage des courbes 2D en 3D

Une tresse sinusoïdale

Pour passer assez facilement du 2D au 3D, il est nécessaire de changer la fonction CIRCLE en fonction SPHERE. Regardez le petit exemple ci-dessous.


il faut aussi, utiliser la composant Z.

BlockScad : méridiens et parallèles en coordonnées sphériques

Les méridiens en coordonnées sphérique

Un méridien est un cercle sur une sphère qui a toujours la même longitude. Pour ne réaliser un, il suffit donc de faire une boucle qui fait varier la latitude pour une longitude constante.



Le module MERIDIEN est donc une simple boucle sur la latitude. Dans le dessin, un méridien en jaune et une boucle pour faire un méridien tous les 45°. Il ne faut pas cependant en abuser car le temps de modélisation est long.

Les parallèles en coordonnées sphériques

Un parallèle est un cercle dont la latitude est constante. Le module PARALELLE réalise une boucle de 360 points en faisant donc varier uniquement la longitude et en gardant la latitude constante.


Nous avons réalisé plusieurs parallèles pour voir la facilité, une fois que le module est créé. Sur ce dessin, seuls les parallèles de l’hémisphère Nord.

Une droite en coordonnées sphériques

Pour finir nos fonctions en coordonnées sphériques, passons à une simple droite.

Le module de droite en coordonnées sphérique fait varier l’altitude pour une longitude et pour une latitude donnée.


Sur les parallèles du schéma précédent, un point en vert et la droite en violet.
Maintenant, nous avons toutes les fonctions travailler avec ces coordonnées sphériques qui ne sont pas si difficiles que cela.

Les fonctions sphériques

Pour terminer, le block « fonctions Sphériques » reprend tous les modules. Il suffit de faire « import blocks into current project» ou l’équivalent français pour pouvoir en disposer.





BlockScad : les coordonnées sphériques

Les coordonnées sphériques

Les coordonnées sphériques sont vraiment l’extension des coordonnées polaires en 3 dimensions. Elles sont très utilisées pour les coordonnées terrestres et l’astronomie. Si vous n’avez pas encore visionné la vidéo sur Hipparque, alors stoppez votre lecture et allez-y : c’est le moment, trop génial !




Maintenant que vous avez visionné la vidéo, nous allons pouvoir aller plus vite.

En jaune fin, nous avons tracé l’équateur de notre terre. Le trait en violet est le rayon de la terre, que nous allons appeler l’altitude. Et le point vert c’est nous. Yes !

Revoyons un peu nos définitions :

q L’altitude, c’est la distance du segment violet

q Longitude, c’est l’angle horizontal entre le rayon violet et le rayon jaune

q Latitude, c’est l’angle vertical entre le rayon jaune et le rayon rouge.


Remarque : sur notre bonne vieille Terre la notion d’altitude n’est pas prise au niveau du centre de la Terre mais de la surface.

Z en coordonnées sphériques

Je n’ai pas trouvé de TRANSFORMS qui permette de tracer ce dessin facilement.  On pourrait toujours faire un TRANSLATE suivant l’axe violet, un ROTATE suivant Z poursuivre l’arc jaune, mais le dernier ROTATE est plus dur à connaître car on ne sait pas sur quel axe nous devons le faire.

Maintenant, nous allons trouver comment on peut exprimer (X,Y,Z) en fonction du (Altitude, Longitude, Latitude).

Commençons par Z.


Le dessin ci-dessus est exactement le même que précédent, sauf que nous le regardons dans le plan du méridien rouge.

Reconnaissez-vous la figure : c’est la même que celle que nous avons utilisée pour donner la définition du SINUS et du COSINUS.

Z = (altitude)*SINUS (latitude).

La latitude est bien un angle et le SINUS la valeur sur l’axe Z.

Trop facile !

Le cosinus de la latitude

Maintenant que nous avons trouvé le sinus de la latitude, nous pouvons nous poser la question du cosinus de la latitude. Hélas il ne passe pas ni par l’axe X ni par l’axe Y.

Regardez la figure ci-dessous.




En pointillés, nous avons indiqué le SINUS. Le COSINUS est la distance entre l’origine et la pastille verte.

Distance à la Pastille verte = (altitude)*COSINUS (latitude)


Maintenant, nous allons tracer un cercle qui passe par cette pastille verte.



Et voilà, un joli cercle qui passe par la pastille verte. Et nous savons que la distance du segment vert est « altitude*COSINUS (latitude) ». Ce segment vert est le rayon du cercle vert.
Faisons tourner notre objet pour voir le plan X-Y qui est aussi le plan de l’équateur.


Maintenant, on commence à voir apparaître la fin de la formule que nous cherchons. L’angle du segment vert est la longitude :

q X = (distance du segment vert)*COSINUS (longitude) (flèche bleue pleine)

q Y = (distance du segment vert)*SINUS (longitude) (flèche bleue pointillée).



Un block pour un point en coordonnées sphériques

Nous pouvons trouver maintenant les formules complètes en remplaçant la distance du segment vert par sa formule avec la latitude :

q X = (altitude)*COSINUS (latitude)*COSINUS (longitude)

q Y = (altitude)*COSINUS (latitude)*SINUS (longitude)

q Z = (altitude)*SINUS (latitude)


Ce qui donne en BlocksCAD.

Un module BlocksCAD avec les paramètres altitude, longitude et latitude et aussi un paramètre taille pour facilement changer le rayon du point à dessiner.


L’ombre du point en coordonnées sphérique


Un petit block à garder en mémoire qui nous a servi précédemment. Ce block permet de représenter l’ombre du point en coordonnée sphérique sur le plan X-Y ce qui peut aider.

C’était la fonction qui donnait la pastille verte de tout à l'heure.

BlockScad : les courbes en 3 dimensions, coordonnées cartésiennes et cylindriques

Passons dans la troisième dimension : les coordonnées cartésiennes

Pour ceux qui veulent voir la quatrième dimension sans passer par la troisième, je leur conseille le lien Hipparque et si vous ne comprenez pas tout, alors bienvenue au club, nous nous sentirons moins seul.


Nous avons déjà vu des formes en volumes et pas uniquement des profils en 2D, c’est à dire en surface sur un plan. Pour les formes en 2D, seuls les abscisses (X) et les ordonnées (Y) sont utilisées. Pour passer nos formules en 3D, il va falloir jouer avec la hauteur (Z).


Sur le schéma précédent, on voit bien en bleu, l’abscisse X qui vaut 10, ensuite, l’ordonnée Y qui vaut 30 et enfin la hauteur Z qui vaut 20. Ainsi, tout point dans l’espace est connu par trois cordonnées (et aussi une origine et trois axes).

Les coordonnées cylindriques

Comme nous l’avons déjà vu, le choix des coordonnées est important. Les coordonnées cylindriques sont un mélange des coordonnées polaires (azimut, rayon) et de coordonnée cartésienne (Axe Z) appelé Hauteur. Les coordonnées cylindriques sont très pratiques pour les objets de type cylindriques, comme par exemple des tubes, des pièces d’échecs, des trucs qui y ressemblent.




Nous décomposons le block précédent : une petite sphère, un TRANSLATE du rayon pour courir le long de l’axe violet et arriver près du X, un ROTATE de l’azimut pour se placer au bout de l’axe jaune et un TRANSLATE suivant Z pour arriver à destination. Encore plus simplement, il est possible de faire le TRANSLATE en Z directement dans le premier TRANSLATE. Essayez donc !

Des Coordonnées cylindriques aux coordonnées cartésiennes

Quelles sont les formules qui permettent de passer des coordonnées cylindriques aux coordonnées cartésiennes ?

Pour un Point (RAYON, AZIMUT, HAUTEUR) nous connaissons déjà les formules pour X et Y. Celle pour Z est évidente :

q X = RAYON*COSINUS (AZIMUT)

q Y = RAYON*SINUS (AZIMUT)

q Z= HAUTEUR



Ces deux blocks sont totalement équivalents.



samedi 29 février 2020

BlockScad, intermède : Le sapin de Noël

Un joli sapin de Noël pour revoir quelques fonctions avant d’aborder la troisième dimension.


 Voici le sapin avec sa verdure, une guirlande et des boules de Noël.

Un feuillage de tores


Le feuillage se compose de tores empilés et d’un tronc cylindrique.


La spirale d’Archimède pour guirlande


La guirlande est constituée d’une spirale d’Archimède que nous avons déjà vue avec quelques modifications. En effet notre précédente guirlande était plate. Il faut donc que nous fassions varier la hauteur en même temps que la spirale tourne.


Nous avons repris les deux modules de la spirale, changé le nom en rajoutant 3D, et rajouté la variable HAUTEUR.



Regardez la formule de Z dans le block 3D SPIRALE… la variable (i) varie de 0 à « TOUR * 360 ». Quand (i) vaut 0 (c’est à dire au départ), Z doit être au plus haut, c’est dire valoir HAUTEUR.
Quand (i) vaut « TOUR * 360 » alors HAUTEUR doit valoir 0.


La formule est Z=HAUTEUR * (1- (i/ (TOUR*360))).
On vérifie bien que :

q si (i) =0, Z= HAUTEUR*1

q si (i) = TOUR*360, alors [i/ (TOUR*360)] vaut 1 et donc Z = HAUTEUR *(1-1) = 0



Les Boules de Noël réparties sur la guirlande

Maintenant, passons aux boules placées sur la guirlande.
Nous avons dupliqué les deux blocs qui permettent de dessiner la guirlande :

q le block 3D POINT BOULE est modifier pour dessiner une boule avec une sphère un peu plus grande que dans le block initial. Vous pouvez remarquer une fonction SCALE à l’intérieur de ce block pour supprimer l’effet du SCALE dans le block principal

q le block 3D SPIRALE BOULE est quant à lui à peine modifié. On supprime l’option HULL pour ne pas faire une courbe mais uniquement des points, on commence vers 280 (et non pas à zéro) et surtout on fait des sauts de 57 (ou de n’importe quel nombre assez grand) pour disséminer les boules de Noël.



En reprenant une copie des blocks de la guirlande, nous sommes sûrs que les boules seront bien positionnées sur la guirlande. Dans le block principal, nous avons utilisé la transformation SCALE pour faire coller la guirlande avec la sapin.

Il ne vous reste plus qu’à fabriquer les cadeaux.

BlockScad : Une coque de bateau avec la fonction SCALE

Nous allons réaliser une coque de bateau en utilisant un peu tout ce que nous avons déjà vu et surtout en allant plus loin avec la fonction SCALE.

Reprenons notre forme de courbe de Grandpierre en remplaçant le CIRCLE par une SPHERE.


La formule mathématique de l’accolade

Donnons une forme symétrique avec la transformation MIROR YZ : YZ car on doit s’imaginer que le miroir contient l’axe Y et l’axe Z.
Ensuite, utilisons SCALE pour grandir un peu notre forme qui est toute petite. SCALE permet d’étirer suivant un, deux ou les trois axes. Dans notre cas :

q 5 fois suivant X

q 6 fois suivant Y

q 10 fois suivant Z pour épaissir le bord



Au passage, remarquons que nous avons trouvé la formule mathématique de l’accolade 

Le Maître-Couple

Puis nous allons redresser notre couple (c’est le nom que l’on donne à cette forme pour un bateau) comme sur un chantier naval.


Le liston et la quille

Rappelons que nous voulons faire une coque de bateau. Dans un premier temps, nous allons dessiner les contours, c’est à dire le liston (sur le plan XY) et la quille (dans YZ). Pour cela nous allons reprendre la formule de l’ellipse utilisée plus haut.



En jaune et orange, l’avant du bateau et en bleu l’arrière.  A noter, la formule pour Y est la même dans chacun des blocks.

Les couples





Regardez bien le nouveau block de la page précédente, en comparaison de celui de la bordé. Nous réalisons :

q un couple (module COUPLE)

q puis nous le mettons à l’échelle suivant X et suivant Z avec les mêmes formules de X et Z des bordées, mais sans les paramètres « 26 »  ni « 20 » devant

q puis nous translatons le tout sur l’axe Y qui est l’axe de la coque, en utilisant la formule donnée pour Y dans le module « bordée avant ». C’est pour cela qu’il était important que le module « bordée avant » ait la même formule pour Y.


La boucle permet de faire plusieurs couples. Nous commençons à 200 pour ce dessin car nous avons déjà le maître-couple en 180.


Le dessin suivant reprend le même concept mais pour les couples de l’arrière du bateau.



Nous avons indiqué par des flèches :

q flèches bleues, la formule en Y qui est reprise pour le TRANSLATE

q flèche verte, qui reprend la formule Z

q flèche rouge, qui reprend la formule pour X


La coque complète


Il suffit maintenant de mettre les couples les uns à coté des autres, en mettant « 1 » dans le BY de la boucle (LOOP) et nous auront une coque, peut-être un jour.
(Dis Madame  BlocksCAD, quand est ce que tu nous fait un programme qui va aussi vite qu’OpenSCAD ?)


L’image ci-dessous est la version OpenSCAD (15 secondes), car le RENDER sous BlocksCAD tourne encore.




BlockScad : encore une tangente ? combinaison de fonctions

Encore une tangente !


Pas tout à fait « une », mais LA tangente.  La tangente est une fonction mathématique qui se calcule à partir du SINUS et du COSINUS. Noté « tg » ou « TAN », sa formule est :

TAN (angle) = SIN (angle) / COS (angle)

Une simple division pour une fonction que l’on retrouve souvent dans des formules de courbes.

Combinons les fonctions


Nous avons vu de nombreuses fonctions : polynomiales (c’est à dire avec des combinaisons de X et de Y et de puissances), SINUS, COSINUS, EXPONENTIEL et plein d’autres.

Résumons les différentes façons de les associer entre elles :

q Nous pouvons faire les 4 opérations, les additionner, les diviser, les soustraire et les multiplier. Y=COS(t) / 2*t par exemple

q Nous pouvons les mettre à la puissance, c’est un peu la cinquième des opérations : ∧.
Y= (2*t)∧COS(t) qui s’écrit aussi Y = 2tcos(t)

q Enfin, nous pouvons les combiner c’est à dire utiliser le résultat d’une fonction comme variable (on dit comme argument en mathématique) de la suivante.
Exemple Y= COS ( e(t)).





Pour ce dernier exemple on note en mathématique Y = cos e (t) et cela se lit « rond ». Ne soyez pas étonné si vous voyez ce sigle dans différents sites ou forums sur les fonctions.


Comme vous pouvez le voir, « cos e » ne donne pas la même chose que « e cos », loin s’en faut. Donc, ne vous trompez pas en recopiant les formules !

BlockScad : Prenons la tangente ... d'une courbe

« La tangente est une droite ayant un point de contact avec une courbe et qui fait un angle nul avec elle en ce point. » nous dit Wikipédia.

Maintenant, essayons de voir ce que cela signifie :

q d’abord, il faut une courbe

q ensuite, il faut un point sur la courbe

q pour terminer, il faut une droite qui passe par le point de la courbe. Mais par n’importe quelle droite.


Commençons par le courbe. Une série de points dans une boucle (LOOP) avec une fonction un peu n’importe quoi : une exponentielle de sinus.  Pour l’exemple, cela n’a pas grande importance.



Maintenant, nous allons mettre un point sur cette courbe. Prenons la valeur de (i) = 230. Positionnons notre point en réalisant une copie de la formule de la courbe.


Nous avons donc une courbe et point, faisons passer une droite par ce point, avec la troisième partie du block.


On voit bien que l’angle entre la courbe et la droite verte (flèche bleue) n’est pas nul. Donc ce n’est pas la tangente.



Maintenant, vous pouvez faire vous même quelques essais et modifier l’angle de Z pour trouver celui qui correspond au dessin ci-dessous.


Je vous l’ai dit : c’est à vous à trouver tout seul (ou toute seule) la bonne valeur de Z. Maintenant nous avons la tangente de la courbe au point 230.

Les mathématiciens démontrent facilement qu’il n’y qu’une seule droite tangente pour ces courbes non brisées.

Allons plus loin. Faisons tourner notre programme en décalant la tangente. Simple en utilisant l’option NON CENTERED.


Et pour finir, nous allons :

q Arrêter la courbe au point 230, en modifiant LOOP

q Supprimer le point rouge devenu inutile

q Changer la couleur de notre tangente.



Et voici à quoi sert la tangente en un point : à aller tout droit à partir d’une courbe sans que l’on voit un angle. Et voilà d’où vient l’expression « prendre la tangente ».

On peut aussi calculer directement la droite tangente en connaissant la formule de la courbe : plus simple que chercher à tâtons l'angle. Mais cela sera à voir dans un autre chapitre.

BlockScad : Les fonctions mathématiques, Logarithme et exponentielle

Ce chapitre va passer en revue les différentes fonctions et possibilités offertes par BlocksCAD.

BlocksCAD nous propose une série de fonctions mathématiques :

q SQUARE ROOT

q ABSOLUTE

q (le signe moins) -

q LN (logarithme népérien)

q Log10 (logarithme décimal)

q e∧  (exponentielle)

q 10∧. (exponentielle de base 10)


Racines carrées et valeur absolue

Square Root, nous l’avons déjà vu est la racine carrée d’un nombre. Appelons le X. 
Square Root (X 2) = X

Cette fonction est souvent dessinée sous la forme suivante √x. Elle est utilisée dans de nombreuses formules.


La valeur absolue d’un nombre est : ce nombre s’il est positif, l’opposé s’il est négatif, ou dit autrement s’il y a un plus devant le nombre on le laisse, s’il y a un moins on le remplace par un plus.

C’est très utile en informatique car on ne sait pas toujours si le résultat d’une formule va être positif et donc dans le doute on prend la valeur absolue, surtout si on utilise SQUARE ROOT. En effet, SQUARE ROOT donne une erreur sur un nombre négatif.

Exponentiel

La fonction exponentielle qui se note « e» ou en BlocksCAD « e ∧ » est une fonction mathématique très utilisée et donc présente dans tous les programmes d’ordinateurs.
A quoi elle sert en maths ? Vous verrez cela avec votre professeur de maths. Ce qui nous intéresse, c’est quelle existe et que de nombreuses courbes l’utilisent.
Sur le dessin suivant nous avons indiqué la fonction exponentielle seule et une autre assez classique.


Occupons-nous de la courbe jaune : c’est celle de l’exponentielle. Nous n’avons pas mis l’option HULL pour que l’on voit bien les différents points. Ceux de gauche sont très serrés et plus nous avançons vers la droite plus ils sont écartés. Cette fonction est une fonction de croissance et dont la croissance accélère de plus en plus.
C’est pour cette raison que dans la vie courante, on dit d’une chose qui grandit de plus en plus vite qu’elle grandit de façon exponentielle.

La courbe rouge est une des nombreuses courbes déduites de la courbe de base mais elle est intéressante pour faire …. voyons  … voyons ? un toboggan ? ou un moule à Kouglof ? à vous de voir.

Mais surtout n’ayez pas peur de l’exponentiel, elle est très pratique et en plus c’est BlocksCAD qui fait tous les calculs.

Exponentiel décroissante


L’exponentiel peut aussi être utilisé en tant que courbe décroissante en utilisant le signe – dans l’exposant. Voici un petit exemple ci-dessous.



Une courbe d’amortissement


Voici, la précédente courbe multipliée par une courbe sinusoïdale.


Logarithme et exponentielle


La fonction Logarithme (LN) est la fonction inverse d’Exponentielle, c’est à dire que :

LN (ex) = eLN(x)=X

Regardez le dessin ci-dessous. Il montre bien que LN « annule » Exponentiel. La formule de Y = 5*eLN (i) est la même chose que Y=5*i


Logarithme

Passons maintenant à la courbe de la fonction Logarithme. Elle est indiquée ci-dessous. C’est aussi une fonction croissante mais qui croît de plus en plus lentement au fur et à mesure que l’on va vers la droite : elle se fatigue vite 


Un peu comme la fonction exponentielle, Logarithme est utilisé dans de nombreuses autres fonctions donc autant savoir qu’il existe.

Pour l’anecdote, la fonction logarithme possède une propriété très surprenante dont voici un exemple : LN(3) + LN(5) = LN (15), c’est à dire que la somme de 2 logarithmes est égale au logarithme du produit de ces eux nombres.

Cette propriété a été utilisée aux temps préhistoriques pour fabriquer des règles (en bois !) à calcul. C’était avant le temps des calculatrices, donc voyez avec votre grand-père ou votre arrière grand-père pour une éventuelle explication. Sachez néanmoins que la première question pour rentrer aux Laboratoires Eiffel était : savez-vous vous servir d'une règle à calcul.



Une dernière chose : on voit aussi écrit LOG à la place de LN et dans BlocksCAD il y a aussi LOG10. LN est pour Logarithme népérien qui est le plus utilisé. Mais la famille des logarithmes ne s’arrête pas là et LOG10 en est une autre variante qui correspond aux puissances de 10 (10∧).

Pour la suite voyez aussi vos professeurs de Mathématiques.