Chaînette sur un cône

Animation flash

La fabrication...

Pour trouver les informations concernant la chaînette conique, consultez la page qui lui est consacrée sur Mathcurve.

La construction est en deux temps. D'abord il s'agit de trouver une représentation de la chaînette dans le plan de développement du cône. Cela se fait en coordonnées polaires à partir de l'équation différentielle ci-dessous.

équation différentielle

L'intégration de cette équation est obtenue avec le programme ode des plotutils. On dispose ainsi d'un fichier contenant des couples (θ, ρ) définissant la courbe. Quelques ajustements ont été nécessaires pour déterminer les conditions initiales permettant d'obtenir une courbe fermée de période 4 π.

chainette

Voici le source pour ode: chainette.ode

# Résolution de l'équation différentielle définissant, en polaires dans 
# le plan de développement, la chaînette conique.
# a: rho, b: rho'
# ----------------------------------------------------------------------
# Usage: ode < chainette.ode > chainette.dta 
# ----------------------------------------------------------------------
# JMS - 25/11/07

lambda  = 3

a' = b
b' = (a*a*(2*a-lambda)+b*b*(3*a-2*lambda))/(a*(a-lambda))

a  = 2.414
b  = 0

print t, a
step 0, 12.57

Ensuite j'utilise epix pour plaquer la chaînette sur le cône. En faisant varier le point de vue nous pouvons constituer une séquence d'images (anim.pdf) qu'il suffit de transformer avec les SWFtools pour obtenir l'animation ci-dessus.

Voici le source pour epix: chainette.xp

/* -*-ePiX-*- */
#include "epix.h"
using namespace ePiX;

const double MAX(3);
const double ALPHA(M_PI/6);  // alpha (demi-angle au sommet du cône)
const double SA(Sin(ALPHA)); // sin(alpha)
const double CA(Cos(ALPHA)); // cos(alpha)
const double XC(10);
const double YC(-5);


// Cône
P Cone(double x, double y) {
    return fabs(sinh(x))*P(Cos(y), Sin(y), -1/Tan(ALPHA));
}

P PolaireSurCone(double t, double r,double a) {
    return 1.5*P(r*SA*Cos(t/SA),r*SA*Sin(t/SA),-r*CA);
}


int main() {
    bounding_box(P(-MAX,-MAX),P(MAX,MAX));
    unitlength("1in");
    picture(6,6);

    begin();
	camera.at(XC,YC,4);
	clip_face(P(-XC/60,-YC/60,0),P(XC,YC,0));
	domain R(P(-1.5,0), P(0,2*M_PI), mesh(25, 36), mesh(50, 72));
	fill(White());
	surface(Cone, R);
	base(Red(0.6), "3pt");
	bold(Red());
	plot("chainette.dta",PATH,PolaireSurCone,1,2);
	clip_restore();
	pst_format();
    end();
}