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

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


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


[[Fichier:Oscc etape3g.png|200x200px|vignette|centre]]
[[Fichier:Oscc etape3g.png|200x200px|vignette|centre]]


Pour pouvoir realiser cet objet, nous allons utiliser la fonction <code>minkowski()</code> de openscad.
Pour pouvoir realiser cet objet, nous allons utiliser la fonction <code>minkowski()</code> de openscad.
Cette fonction correspond a une somme de minkowski entre 2 objets.
Cette fonction correspond a une somme de minkowski entre 2 objets.<br />
 
A quoi correspond une somme de minkowski ?  
A quoi correspond une somme de minkowski ?  
Elle correspond a la trace d'un balayage du premier objet par le second.
Elle correspond a la trace d'un balayage du premier objet par le second.<br />
 
Prenons un cas simple en deux dimensions pour illustrer visuellement cette somme.
Prenons un cas simple en deux dimensions pour illustrer visuellement cette somme.
Supposons que le premier objet soit :
Supposons que le premier objet soit :
[[Fichier:Oscc etape3b.png|200x200px|vignette|centre]]
et que le second objet soit :
[[Fichier:Oscc etape3c.png|200x200px|vignette|centre]]
Le second objet va balayer la surface du premier objet :
[[Fichier:Oscc etape3d.png|200x200px|vignette|centre]]
ce qui va entrainer une surface de balayage pour chaque point, qui misent bout a bout, vont entrainer une surface de balayage globale :
[[Fichier:Oscc etape3f.png|200x200px|vignette|centre]]
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 :
[[Fichier:Oscc etape3e.png|200x200px|vignette|centre]]
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 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 45 : 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 :