1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
|
/*-----------------------------------------------*
*Titre:nanofocal *
*objectif:calcul pour APN, hyperfocal... *
*version 3.1 *
*01-06-07 *
*-----------------------------------------------*/
/*---------------------------------------------------------------------------------------*
* En-tete :Appel de librairies *
* --------------------------------------------------------------------------------------*/
#include<stdio.h>
#include<math.h>
/*--------------------------------------------------------------------------------------*
*declaration *
*--------------------------------------------------------------------------------------*/
/*des variables globales*/
float cercle_confus_reel, cercle_confus_theo;/*en mm fonction de la resolution de l'oeil*/
float focal,num_focal;/*en mm propriete de l'APN*/
float diaph,num_diaph; /* =focal/ ouverture : F/nrb ou F nbr ou f-number */
float H;/*en mm hyperfocale*/
float d;/*en m distance de mise au point*/
double test=22;/*variable test*/
/*declaration-prototypage-parametrage de fonction*/
float hypfocal(float fcl,float dph,float crl);
float puissance2(float matisse);
float puissance05(float matisse);/*racine carrée*/
float profondeur_champ(float distance_obj);
/*declaration-prototipage de la fonction*/
float blur_circle(int ,int );/*calcul du cercle de confusion*/
double tester(double var);/*fonction test*/
int affich_saisi();
/*declaration de structures*/
struct lim_prof_champ
{
float premier_plan;
float dernier_plan;
} deep_of_field;
/*-------------------------------------------------------------------------------------*
*Fonction principale *
*-------------------------------------------------------------------------------------*/
int main(void)
{
/*NE RIEN METTRE AVANT & JUSTE APRÈS CE COMMENTAIRE*/
printf("\x1B[2J");/*efface l'ecran */
cercle_confus_theo=0.033; /*en mm*/
focal=18;/*en mm*/
diaph=1.4;/* sans dimension*/
printf("entrez la longueur de la focale[F en mm]: \n");
scanf("%f",&num_focal);
printf("entrez le parametre diaphragme [F/D ]: \n");
scanf("%f",&num_diaph);
printf("entrez la distance de mise au point [d en m ]: \n");
scanf("%f",&d);
/*affichage avec precision de 3 chiffres significatifs avants et 4 apres ,virgule*/
/*H = hypfocal(num_focal,num_diaph,cercle_confus_theo);*/
printf("hyperfocale en metre m :%3.4f\n",hypfocal(num_focal,num_diaph,cercle_confus_theo));
printf("profondeur de champ en m :%3.4f\n",profondeur_champ(d));
return 0;
}
/*------------------------------------------------------------------------------------*
*definition des fonctions *
*------------------------------------------------------------------------------------*/
/*calcul de hyperfocal*/
float hypfocal(float fcl, float dph, float crl)
{
fcl = puissance2(fcl);/*focal au carre*/
/*formule de l'hyperfocal ramenee en metre*/
return (fcl/(dph*crl)+focal)/1000 ;
}
/*eleve la matisse a la puissance de 2*/
float puissance2(float matisse)
{
matisse = (double) matisse;/*conversion de float en double*/
return (float) pow(matisse,2);
}
/*float puissance05(float matisse)
{
matisse = (double) matisse;conversion de float en double
return (float) pow(matisse,.5);
}
*/
/*Profondeur de champ*/
float profondeur_champ(float distance_obj)
{
float lim_MAX,lim_min;/* premier plan net & second plan net*/
float zone_nette;
float distance;
H = hypfocal(num_focal,num_diaph,cercle_confus_theo)*1000;/*en mm*/
distance= distance_obj*1000;/*en mm*/
/*formule des plans*/
lim_min = distance*(H-focal)/(H-focal+distance);
lim_MAX = distance*(H-focal)/(H-focal-distance);
zone_nette = fabs((lim_MAX-lim_min)/1000);
return zone_nette;
}
/*calcul cercle de confusion:blur circle*/
float blur_circle(int width,int length)
{
/*largeur:width:height:proprieté du film:pellicule;*/
/*longeur:length:propriété du film;*/
double sum;
sum=pow((double) width,2)+pow((double) length,2);
sum= (double) sum;
return (float) 1/1730*pow(sum,0.5);
return sum;
} |
Partager