« Presentation openscad : Etape 3 » : différence entre les versions

De Wiki du ThiLab
Aucun résumé des modifications
(ajout palette)
 
(Une version intermédiaire par un autre utilisateur non affichée)
Ligne 1 : Ligne 1 :
[[Presentation openscad|Retour a la presentation]]
== Etape 3 : la fonction de minkowski ==
== Etape 3 : la fonction de minkowski ==


Ligne 37 : Ligne 34 :
Revenons a la generalisation en 3D de la somme de minkowski qui nous interesse. Nous avons simplement besoin d'un cube et d'un cylindre qui ira balayer le volume du cube.<br />
Revenons a la generalisation en 3D de la somme de minkowski qui nous interesse. Nous avons simplement besoin d'un cube et d'un cylindre qui ira balayer le volume du cube.<br />


Telle l'union ou l'intersection, le code va comprendre la mentino de la fonction <code>minkowski()</code> suivi d'accolades contenant les 2 objets utilises pour la somme :
Telle l'union ou l'intersection, le code va comprendre la mention de la fonction <code>minkowski()</code> suivi d'accolades contenant les 2 objets utilises pour la somme :
 
<source lang="c" enclose="div">
minkowski()
{
cube([20,20,20]);
cylinder(r=2,h=1);
}
</source>
 
Il conviendra de deplacer le l'objet creer pour qu'il soit a l'emplacement attendu (sous l'objet cree a l'etape 2). Notez que la hauteur du cube est de 20, mais la hauteur de l'objet obtenu est de 21, car le cylindre balayant le volume du cube est de hauteur 1. Pour ce deplacement, la fonction <code>translate()</code> peut etre placee a plusieurs endroits equivalents :
 
<source lang="c" enclose="div">
translate([-10,-10,-25]) minkowski()
{
cube([20,20,20]);
cylinder(r=2,h=1);
}
</source>
 
pour deplacer tout l'objet,
 
<source lang="c" enclose="div">
minkowski()
{
translate([-10,-10,-25]) cube([20,20,20]);
cylinder(r=2,h=1);
}
</source>
 
pour deplacer le cube generant l'objet ou meme :
 
<source lang="c" enclose="div">
minkowski()
{
cube([20,20,20]);
translate([-10,-10,-25]) cylinder(r=2,h=1);
}
</source>
 
pour deplacer la surface de balayage du cylindre par rapport au cube.


== Resultat de l'etape 3 ==
== Resultat de l'etape 3 ==
Ligne 69 : Ligne 106 :
[[Fichier:Oscc etape3a.png|200x200px|vignette|centre]]
[[Fichier:Oscc etape3a.png|200x200px|vignette|centre]]


[[Presentation openscad|Retour a la presentation]]
{{Palette Présentation openscad}}

Dernière version du 21 février 2015 à 23:16

Etape 3 : la fonction de minkowski

Pour cette etape, nous allons ajouter l'element suivant aux elements deja crees (notez les arretes arrondies) :

Pour pouvoir realiser cet objet, nous allons utiliser la fonction minkowski() de openscad. Cette fonction correspond a une somme de minkowski entre 2 objets.

A quoi correspond une somme de minkowski ? Elle correspond a la trace d'un balayage du premier objet par le second.

Prenons un cas simple en deux dimensions pour illustrer visuellement cette somme. Supposons que le premier objet soit :

et que le second objet soit :

Le second objet va balayer la surface du premier objet :

ce qui va entrainer une surface de balayage pour chaque point, qui misent bout a bout, vont entrainer une surface de balayage globale :

C'est l'union de ces surfaces de balayage qui ca donner l'objet correspondant a la somme de minkowski des 2 objets de depart :

Revenons a la generalisation en 3D de la somme de minkowski qui nous interesse. Nous avons simplement besoin d'un cube et d'un cylindre qui ira balayer le volume du cube.

Telle l'union ou l'intersection, le code va comprendre la mention de la fonction minkowski() suivi d'accolades contenant les 2 objets utilises pour la somme :

minkowski()
{
	cube([20,20,20]);
	cylinder(r=2,h=1);
}

Il conviendra de deplacer le l'objet creer pour qu'il soit a l'emplacement attendu (sous l'objet cree a l'etape 2). Notez que la hauteur du cube est de 20, mais la hauteur de l'objet obtenu est de 21, car le cylindre balayant le volume du cube est de hauteur 1. Pour ce deplacement, la fonction translate() peut etre placee a plusieurs endroits equivalents :

translate([-10,-10,-25]) minkowski()
{
	cube([20,20,20]);
	cylinder(r=2,h=1);
}

pour deplacer tout l'objet,

minkowski()
{
	translate([-10,-10,-25]) cube([20,20,20]);
	cylinder(r=2,h=1);
}

pour deplacer le cube generant l'objet ou meme :

minkowski()
{
	cube([20,20,20]);
	translate([-10,-10,-25]) cylinder(r=2,h=1);
}

pour deplacer la surface de balayage du cylindre par rapport au cube.

Resultat de l'etape 3

Le code apres l'etape 3 est donc le suivant :

$fn=60;

union()
{
		intersection()
		{
			translate([-10,-10,-10]) cube([20,20,20]);
			sphere(r=12);
		}

		cylinder(r=7.5, h=20);

		minkowski()
		{
			translate([-10,-10,-25]) cube([20,20,20]);
			cylinder(r=2,h=1);
		}
}

Ce qui nous donne cet objet :