// [このプログラムの目的]卵型曲線の周の長さを計算,2009年12月08日(火)
// 曲線の方程式:(x*x+y*y)**2=a*(x**3)+(a-b)*x*(y**2),
// b/a=0.8 の場合が最も実際の卵に近い。
//なお、一般的条件は b<=a で、b=0 のときは円となる。
// file name: round.c
#include< stdio.h>
#include< math.h>
void main(void)
{
double a,b,x,dx,dydx1,dydx2,dydx,xmax,l,dl,pi;
// 定数設定
for(;;)
{
printf("定数 a の入力; a= ? ");
scanf("%lf",&a);
if(a>0)
{
break;
}
else
{
printf("a を正の値にして再入力してください。\n");
}
}
for(;;)
{
printf("定数 b の入力; b= ? ");
scanf("%lf",&b);
if(b>=0&&b<=a)
{
break;
}
else
{
printf("b を 0 < b< a、 または、b=0、または、b=a の値にして再入力してください。\n");
}
}
printf("\n");
pi=3.1415927;
xmax=a;// x の最大値
dx=xmax/1000000;
// 計算実行
if(b==0)
{
l=pi*a;
}
else
{
for(x=0.12*dx;x<=xmax;x=x+dx)
{
dydx1=(1/(2.0*sqrt(2.0)))*sqrt((a-b-2.0*x+sqrt(4.0*b*x+(a-b)*(a-b)))/x);
dydx2=(sqrt(x/2.0))*((b/sqrt(4.0*b*x+(a-b)*(a-b))-1)/sqrt(a-b-2.0*x+sqrt(4.0*b*x+(a-b)*(a-b))));
dydx=dydx1+dydx2;
dl=sqrt(1.0+dydx*dydx)*dx;
l=l+dl;
}
l=2.0*l;
}
printf("卵型曲線の周の長さは; L=%lf\n",l);
printf("\n");
printf("end\n");
}// the end of the program
戻る