« Mathc gnuplot/Animation : Cercle de courbure » : différence entre les versions

Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 8 :
* Cercle de courbure [[http://fr.wikipedia.org/wiki/Cercle_osculateur wikipédia]].
* Dans Wikiversité [[http://fr.wikiversity.org/wiki/Mathc_Home_Edition_c15 Mathc Home Edition c15]], une approche empirique.
 
 
= Présentation =
 
* Un exemple à tester.
* (nN'oubliez pas les fichiers *.h) partagés.
* Recuperer aussi ceux du chapitre '''"Cercle de courbure"''' pour les fonctions '''f(x)'''
* Pour l'animation il faut cliquer sur l'icône replot de gnuplot.
 
 
=== Animer ===
Ligne 70 ⟶ 73 :
|[[File:Tangente22.svg|Tangente22]]
|}
 
== Les fichiers h partagés ==
 
=== Appel des fichiers standards ===
 
<source lang="c">
/* ------------------------------------ */
/* Save as : xa_def.h */
/* ------------------------------------ */
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
#include <math.h>
#include <string.h>
/* ------------------------------------ */
#include "xa_def.h"
#include "xa_strct.h"
#include "kfx_x.h"
#include "kg_c.h"
#include "kcircle.h"
</source>
 
=== Les defines ===
 
<source lang="c">
/* ------------------------------------ */
/* Save as : xa_def.h */
/* ------------------------------------ */
#ifndef PI
#define PI 3.14159265359
#endif
/* ------------------------------------ */
void clrscrn(void)
{
printf("\n\n\n\n\n\n\n\n\n\n\n"
"\n\n\n\n\n\n\n\n\n\n\n"
"\n\n\n\n\n\n\n\n\n\n\n");
}
/* ------------------------------------ */
void Pause(void)
{
int i=300;
int j;
 
while(--i){j=600000;while(--j);} }
</source>
 
 
=== Déclaration et initialisation des structures ===
 
<source lang="c">
/* ------------------------------------ */
/* Save as : xa_strct.h */
/* ------------------------------------ */
typedef struct
{
double xmini;
double xmaxi;
double ymini;
double ymaxi;
 
}W_Ctrl, *PW_Ctrl;
/* ------------------------------------ */
W_Ctrl i_WGnuplot(
double xmini,
double xmaxi,
double ymini,
double ymaxi
)
{
W_Ctrl w = {xmini,xmaxi,ymini,ymaxi};
 
return (w);
}
</source>
 
 
=== Fonction dérivé ===
 
<source lang="c">
/* ------------------------------------ */
/* Save as : kfx_x.h */
/* ------------------------------------ */
double fx_x(
double (*P_f)(double x),
double a,
double h
)
{
return( ((*P_f)(a+h)-(*P_f)(a-h))
/(2.*h) );
}
/* ------------------------------------ */
double fx_xx(
double (*P_f)(double x),
double a,
double h
)
{
return( ((*P_f)(a+h)-2*(*P_f)(a)+(*P_f)(a-h))
/(h*h) );
}
/* ------------------------------------ */
double K_y_2d(
double (*P_f)(double x),
double x,
double e
)
{
double a = fx_x((*P_f),x,e);
 
return(fabs(fx_xx((*P_f),x,e))
/
pow(1+a*a,3./2.));
}
/* ------------------------------------ */
double h_y_2d(
double (*P_f)(double x),
double x,
double e
)
{
double a = fx_x((*P_f),x,e);
 
return(x - ( ( a*(1+a*a) )
/
fx_xx((*P_f),x,e)));
}
/* ------------------------------------ */
double k_y_2d(
double (*P_f)(double x),
double x,
double e
)
{
double a = fx_x((*P_f),x,e);
 
return((*P_f)(x) + ( (1+a*a)
/
fx_xx((*P_f),x,e)));
}
</source>
 
=== La fonction à dessiner ===
 
<source lang="c">
/* ------------------------------------ */
/* Save as : fb.h */
/* ------------------------------------ */
double f(
double x)
{
return( cos(x));
}
char feq[] = "cos(x)";
</source>
 
=== La fonction graphique ===
 
<source lang="c">
/* ------------------------------------ */
/* Save as : kg_c.h */
/* ------------------------------------ */
void G_C_2d(
W_Ctrl W,
double (*P_f)(double x),
double x,
double e,
char feq[]
)
{
FILE *fp;
 
fp = fopen("a_main.plt","w");
fprintf(fp," reset\n"
" set zeroaxis lt 8\n"
" set size ratio -1\n"
" set grid\n\n"
" plot [%0.3f:%0.3f] [%0.3f:%0.3f]\\\n"
" \"a_radius.plt\" with linespoints,\\\n"
" \"a_circle.plt\" with line,\\\n"
" %s with line\n",
W.xmini,W.xmaxi,W.ymini,W.ymaxi,feq);
fclose(fp);
 
fp = fopen("a_radius.plt","w");
fprintf(fp," %6.5f %6.5f\n",h_y_2d((*P_f),x,e),
k_y_2d((*P_f),x,e));
fprintf(fp," %6.5f %6.5f\n",x,(*P_f)(x));
fclose(fp);
 
Pause();
}
</source>
 
=== La fonction graphique Le cercle ===
 
<source lang="c">
/* ------------------------------------ */
/* Save as : kcircle.h */
/* ------------------------------------ */
void circle(
char CircleName[FILENAME_MAX],
double r,
double x,
double y
)
{
FILE *fp = fopen(CircleName,"w");
double t = 0.;
 
for(;t<2.01*PI;t+=.1)
fprintf(fp," %6.5f %6.5f\n",r*cos(t)+x,r*sin(t)+y);
fclose(fp);
}
</source>