// [このプログラムの目的]卵型曲線の短径を求めること,2009年12月3日(木)

// 曲線の方程式:(x*x+y*y)**2=a*(x**3)+(a-b)*x*(y**2),
// 一般的条件は b<=a で、b=0 のときは円となる。

// file name: minor_axis.c

#include< stdio.h>
#include< math.h>

void main(void)
{
	double x,y,ypast,a,b,q,l2;
	double xmax,dx;

//  定数設定
	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");
	 
//  他のパラメータ設定
	xmax=a;// x の最大値
	dx=xmax/1000000;// x の微笑増加分

//  計算実行
	ypast=-1;
	for(x=0;x<=xmax;x=x+dx)
	{
y=sqrt(((a-b-2*x)+sqrt(4*b*x+(a-b)*(a-b)))*x/2);
// b=O のときの円の方程式 y=sqrt(a*a/2/2-(x-a/2)*(x-a/2)) を含んでいる.

		if(y< ypast)
		{
			q=ypast;
			break;
		}
		ypast=y;
	}

	l2=2*q;
	printf("この卵の短径は; l2=%lf\n",l2);
	printf("\n");

	printf("end\n");
}// the end of the program



戻る