Пример #1
0
int
main (int argc, char **argv)
{
	double a, b, c;
	double s, area;
	double alpha, beta, gamma;

	a = b = c = 0.;

	puts ("Zadejte velikost stran a b c:");
	scanf ("%lf %lf %lf", &a, &b, &c);
	if (!(a > 0 && b > 0 && c > 0))
		DIE ("Nespravny vstup.");

	if (!(a + b > c && a + c > b && b + c > a))
		DIE ("Trojuhelnik neexistuje.");

	if (a == b && b == c)
		puts ("Trojuhelnik je rovnostranny.");
	else if (a == b || b == c || a == c)
		puts ("Trojuhelnik je rovnoramenny.");
	else
		puts ("Trojuhelnik neni ani rovnostranny ani rovnoramenny.");

	s = (a + b + c) / 2;
	area = sqrt (s * (s - a) * (s - b) * (s - c));

	alpha = acos (sqrt (s * (s - a) / b / c)) * 2;
	beta  = acos (sqrt (s * (s - b) / a / c)) * 2;
	gamma = acos (sqrt (s * (s - c) / a / b)) * 2;

	/* Přesnost * konstanta * vztaženo k velikosti vstupu */
	if (fabs (a * a + b * b - c * c) <= DBL_EPSILON * 64 * c * c
	 || fabs (a * a + c * c - b * b) <= DBL_EPSILON * 64 * b * b
	 || fabs (b * b + c * c - a * a) <= DBL_EPSILON * 64 * a * a)
		puts ("Trojuhelnik je pravouhly.");
	else if (alpha > M_PI_2 || beta > M_PI_2 || gamma > M_PI_2)
		puts ("Trojuhelnik je tupouhly.");
	else
		puts ("Trojuhelnik je ostrouhly.");

	print_angle ("alfa", alpha);
	print_angle ("beta", beta);
	print_angle ("gama", gamma);

	printf ("Obvod: %.4f\n", a + b + c);
	printf ("Obsah: %.4f\n", area);

	printf ("Polomer kruznice vepsane: %.4f\n", area / s);
	printf ("Polomer kruznice opsane: %.4f\n",  a / 2 / sin (alpha));

	printf ("Vyska va: %.4f\n", b * sin (gamma));
	printf ("Vyska vb: %.4f\n", a * sin (gamma));
	printf ("Vyska vc: %.4f\n", a * sin (beta));

	return 0;
}
Пример #2
0
static int angle_table(void)
{
    int angle_updates[ITERATIONS + 1];
    build_angle_updates(angle_updates);

    printf("  type angles_t is array(0 to 19) of unsigned%i;\n", ANGLE_BITS);
    printf("  constant angle_off_90 : unsigned%i := ", ANGLE_BITS);
    print_angle(-1, angle_updates[ITERATIONS]);
    printf(";\n");
    printf("  constant angle_update : angles_t :=\n");
    printf("    (");
    for (int i = 0; i != ITERATIONS; ++i)
        print_angle(i, angle_updates[i]);
    for (int i = ITERATIONS; i < 20; ++i)
        print_angle(i, 0);

    return 0;
}
Пример #3
0
LOCAL bool diff_turn_ang(
	float		p,
	float		*ans,
	POINTER		parameters)
{
	Locstate	st0 = ((DT_ANG_PARAMS *) parameters)->st0;
	Locstate	st1 = ((DT_ANG_PARAMS *) parameters)->st1;
	float		M0sq = 	((DT_ANG_PARAMS *) parameters)->M0sq;
	float		M1sq = 	((DT_ANG_PARAMS *) parameters)->M1sq;
	float		sign0 = ((DT_ANG_PARAMS *) parameters)->sign0;
	float		sign1 = ((DT_ANG_PARAMS *) parameters)->sign1;
	float		theta0, theta1;

	debug_print("dt_ang","Entered diff_turn_ang()\n");
	debug_print("dt_ang","\tp = %g\n",p);
	
	if (steady_state_wave_curve(p,M0sq,&theta0,st0) == FUNCTION_FAILED)
	{
		screen("WARNING in diff_turn_ang(), ");
		screen("steady_state_wave_curve() failed\n");
		return FUNCTION_FAILED;
	}
	if (steady_state_wave_curve(p,M1sq,&theta1,st1) == FUNCTION_FAILED)
	{
		screen("WARNING in diff_turn_ang(), ");
		screen("steady_state_wave_curve() failed\n");
		return FUNCTION_FAILED;
	}
	
	*ans = sign0*theta0 - sign1*theta1;

	if (debugging("dt_ang"))
	{
		print_angle("\ttheta0 =",theta0,"\n");
		print_angle("\ttheta1 =",theta1,"\n");
		print_angle("\tans =",*ans,"\n");
	}
	debug_print("dt_ang","Left diff_turn_ang()\n");
	return FUNCTION_SUCCEEDED;
}		/*end diff_turn_ang*/
Пример #4
0
LOCAL bool   ip2(
	float u,		/* trial node angle in computational frame */
	float *diff,
	POINTER parameters) 
{
	static const float SMALL_ANG         = PI/30.0; /*TOLERANCE*/
	static const float twopi_m_small_ang = 2.0*PI - PI/30.0;/*TOLERANCE*/
	static const float twopi             = 2.0*PI;
	static const float halfpi            = 0.5*PI;

	float	node_speed;
	float	trial_Mach_ang;
	float	nod_ang_to_inc_ang;
	float	abs_v[SMAXD];		/*node velocity*/
	float	Msq;			/*steady Mach # sq - temp*/
	float	pinc_max;		/*max pr behind inc shock*/
	float	prefl_max;		/*max pr behind refl shock*/
	float	inc_shock_speed	  = ((IP2_PARAMS *)parameters)->inc_shock_speed;
	float	inc_ang		  = ((IP2_PARAMS *)parameters)->inc_ang;
	float	Mach_ang 	  = ((IP2_PARAMS *)parameters)->Mach_ang;
	float	*refl_ang	  = ((IP2_PARAMS *)parameters)->refl_ang;
	float	*contact_ang	  = ((IP2_PARAMS *)parameters)->contact_ang;
	ANGLE_DIRECTION i_to_a_dir= ((IP2_PARAMS *)parameters)->i_to_a_dir;
	Locstate ahead		  = ((IP2_PARAMS *)parameters)->ahead;
	Locstate behind		  = ((IP2_PARAMS *)parameters)->behind;
	Locstate refl_bow	  = ((IP2_PARAMS *)parameters)->refl_bow;
	Locstate refl_mach	  = ((IP2_PARAMS *)parameters)->refl_mach;
	static bool	first = YES;
	static float	sin_small_ang;

	debug_print("ip2","Entered ip2()\n");
	if (first == YES)
	{
	    first = NO;
	    sin_small_ang = sin(SMALL_ANG);
	}

	nod_ang_to_inc_ang = normalized_angle(inc_ang - u);
	if (fabs(nod_ang_to_inc_ang) < SMALL_ANG ||
	    fabs(nod_ang_to_inc_ang) > twopi_m_small_ang)
	{ /* A GUESS */
	    node_speed = inc_shock_speed / sin_small_ang;
	    abs_v[0] = node_speed * cos(u);
	    abs_v[1] = node_speed * sin(u);
	}
	else 
	{
	    node_speed = inc_shock_speed / fabs(sin(inc_ang - u));
	    abs_v[0] = node_speed * cos(u);
	    abs_v[1] = node_speed * sin(u);
	}

#if defined(DEBUG_GIPOLAR)
	if (debugging("ip2"))
	{
	    print_angle("\ttrial_node_ang =",u,"\n");
	    print_angle("\tinc_ang =",inc_ang,"\n");
	    (void) printf("\tinc_shock_speed = %g node_speed = %g\n",
	    	          inc_shock_speed,node_speed);
	    (void) printf("\tabs_v = (%g, %g)\n",abs_v[0],abs_v[1]);
	}
#endif /* defined(DEBUG_GIPOLAR) */

	if (!i_polar_1(ahead,behind,refl_bow,refl_mach,i_to_a_dir,
		abs_v,refl_ang,contact_ang,&trial_Mach_ang))
	{
	    Msq = mach_number_squared(ahead,abs_v,(float *)NULL);
	    pinc_max = max_behind_shock_pr(Msq,ahead);
	    Msq = mach_number_squared(behind,abs_v,(float *)NULL);
	    prefl_max = max_behind_shock_pr(Msq,behind);
	    if (((prefl_max > pinc_max) && (i_to_a_dir == CLOCKWISE))
	    	 ||
	        ((prefl_max < pinc_max) && (i_to_a_dir == COUNTER_CLOCK)))
	    {
	    	*diff = -halfpi;
	    }
	    else
	    {
	    	*diff = halfpi;
	    }
	}
	else 
	{
	    *diff = Mach_ang - trial_Mach_ang;
#if defined(DEBUG_GIPOLAR)
	    if (debugging("ip2"))
	    {
	    	print_angle("\ttrial_Mach_ang =",trial_Mach_ang,"\n");
	    	print_angle("\tdiff =",*diff,"\n");
	    }
#endif /* defined(DEBUG_GIPOLAR) */
	}
	*diff = (*diff < PI) ? *diff : *diff - twopi;
	*diff = (*diff > -PI) ? *diff : *diff + twopi;

	debug_print("ip2","Left ip2()\n");
	return FUNCTION_SUCCEEDED;
}		/*end ip2*/
Пример #5
0
EXPORT int intersection_of_two_shock_polars(
	Locstate	         st0,
	Locstate	         st1,
	float		         *abs_v,
	float		         *p,
	float		         *pmin,
	float		         *pmax,
	bool		         Cplus_w0,
	bool		         Cplus_w1,
	RIEMANN_SOLVER_WAVE_TYPE *wtype0,
	RIEMANN_SOLVER_WAVE_TYPE *wtype1)
{
	float		v0[MAXD];	/* Velocities in the steady frame */
	float		v1[MAXD];
	float		M0sq, M1sq;	/* Mach #'s squared in steady frame */
	float		theta01;	/* turn angle vector v0 to v1 */
	float		v0_x_v1;
	float		v0_d_v1;
	float		p0, p1;
	float		p_upper, p_lower;
	const float     meps = 10.0*MACH_EPS;/*TOLERANCE*/
	float		eps_theta;
	float		eps_pressure;
#if !defined(UNRESTRICTED_THERMODYNAMICS)
	float		min_pressure;
#endif /* !defined(UNRESTRICTED_THERMODYNAMICS) */
	int		dim;
	DT_ANG_PARAMS	parameters;
	static char	yesstatus[] =
		"Left intersection_of_two_shock_polars() status = YES\n";
	static	char	nostatus[]  =
		"Left intersection_of_two_shock_polars() status = NO\n";
	
	debug_print("shock_polar","Entered intersection_of_two_shock_polars()\n");

	dim = Params(st0)->dim;
	p0 = pressure(st0);
	p1 = pressure(st1);
	M0sq = mach_number_squared(st0,abs_v,v0);
	M1sq = mach_number_squared(st1,abs_v,v1);

	(void) vector_product(v0,v1,&v0_x_v1,dim);
	v0_d_v1 = scalar_product(v0,v1,dim);
	theta01 = atan2(v0_x_v1,v0_d_v1);
#if defined(DEBUG_GIPOLAR)
	if (debugging("shock_polar")) 
	{
		(void) printf("abs_v = (%g, %g)\n",abs_v[0],abs_v[1]);
		(void) printf("Cplus_w0 = %s, Cplus_w1 = %s\n",
			      (Cplus_w0) ? "YES" : "NO",
			      (Cplus_w1) ? "YES" : "NO");
		verbose_print_state("st0",st0);
		(void) printf("v0 = (%g, %g), q0 = %g, M0 = %g\n",v0[0],v0[1],
			      mag_vector(v0,dim),sqrt(M0sq));
		verbose_print_state("st1",st1);
		(void) printf("v1 = (%g, %g), q1 = %g, M1 = %g\n\n",v1[0],v1[1],
			      mag_vector(v1,dim),sqrt(M1sq));
		print_angle("theta01 =",theta01,"\n");
	}
#endif /* defined(DEBUG_GIPOLAR) */

	*wtype0 = *wtype1 = UNSET_RIEMANN_SOLVER_WAVE_TYPE;
	if (!spolar_intersect_bounds(theta01,M0sq,M1sq,st0,
					st1,pmin,pmax,&p_upper,&p_lower,
					Cplus_w0,Cplus_w1,wtype0,wtype1))
	{
	    if (debugging("shock_polar"))
	    {
		(void) printf("WARNING in intersection_of_two_shock_polars(), "
		              "spolar_intersect_bounds() failed.\n");
		debug_print("shock_polar",nostatus);
	    }
	    return NO;
	}
#if !defined(UNRESTRICTED_THERMODYNAMICS)
	min_pressure = max(Min_pressure(st0),Min_pressure(st1));
	if (p_upper < min_pressure)
	{
	    *p = min_pressure;
	    *wtype0 = *wtype1 = RAREFACTION;
	    debug_print("shock_polar",yesstatus);
	    return YES;
	}
#endif /* !defined(UNRESTRICTED_THERMODYNAMICS) */
	if (p_upper <= p0)	*wtype0 = RAREFACTION;
	if (p_lower >= p0)	*wtype0 = SHOCK;
	if (p_upper <= p1)	*wtype1 = RAREFACTION;
	if (p_lower >= p1)	*wtype1 = SHOCK;
	eps_theta = fabs(theta01)*EPS;
	eps_theta = max(meps,eps_theta);
	eps_pressure = max(p0,p1)*EPS;
	eps_pressure = max(meps,eps_pressure);
	set_parameters(parameters,Cplus_w0,Cplus_w1,st0,st1,M0sq,M1sq);
	if (find_root(diff_turn_ang,(POINTER)&parameters,theta01,p,p_lower,
		      p_upper,eps_theta,eps_pressure) == FUNCTION_FAILED)
	{
	    if (debugging("shock_polar"))
	    {
		(void) printf("WARNING in intersection_of_two_shock_polars()");
		(void) printf(", No intersection of shock polars.\n");
	    }
	    debug_print("shock_polar",nostatus);
	    return NO;
	}
	*wtype0 = (*p >= p0) ? SHOCK : RAREFACTION;
	*wtype1 = (*p >= p1) ? SHOCK : RAREFACTION;
	debug_print("shock_polar",yesstatus);
	return YES;
}		/*end intersection_of_two_shock_polars*/
Пример #6
0
EXPORT int i_polar_2(
	Locstate	ahead,
	Locstate	behind,
	Locstate	refl_bow,
	Locstate	refl_mach,
	ANGLE_DIRECTION	i_to_a_dir,
	float		*abs_v,
	float		aw_ang,
	float		inc_ang,
	float		*refl_ang,
	float		*contact_ang,
	float		Mach_ang)
{
	IP2_PARAMS	ip2_params;
	float		inc_shock_speed;
	float		node_speed;
	float		node_ang, ans;
	float		min_ang, max_ang;
	float		i_n[SMAXD];	/* inc shock normal points to ahead */
	float		delta, epsilon;
	const float     meps = MACH_EPS;

	debug_print("ipolar2","Entered i_polar_2()\n");
#if defined(DEBUG_GIPOLAR)
	if (debugging("ipolar2"))
	{
		verbose_print_state("ahead",ahead);
		verbose_print_state("behind",behind);
		print_angle("inc_ang =", inc_ang,"\n");
		print_angle("Mach_ang =",Mach_ang,"\n");
		print_angle_direction("\ti_to_a_dir =",i_to_a_dir,"\n");
	}
#endif /* defined(DEBUG_GIPOLAR) */

		/* Find incident shock speed */

	if (i_to_a_dir == COUNTER_CLOCK)
	{
		i_n[0] = cos(inc_ang + PI / 2.);
		i_n[1] = sin(inc_ang + PI / 2.);
		min_ang = inc_ang;
		max_ang = aw_ang;
	}
	else
	{
		i_n[0] = cos(inc_ang - PI / 2.);
		i_n[1] = sin(inc_ang - PI / 2.);
		min_ang = aw_ang;
		max_ang = inc_ang;
	}
	(void) s_polar_4(BEHIND_PRESSURE,pressure(behind),
			 &inc_shock_speed,i_n,ahead,behind,GAS_STATE);

#if defined(DEBUG_GIPOLAR)
	if (debugging("ipolar2"))
	{
		print_angle("min_ang =", min_ang,"\n");
		print_angle("max_ang =",max_ang,"\n");
		(void) printf("inc_shock_speed = %g\n",inc_shock_speed);
	}
#endif /* defined(DEBUG_GIPOLAR) */

		/* Initialize ip2_params */

	ip2_params.ahead = ahead;
	ip2_params.behind = behind;
	ip2_params.refl_bow = refl_bow;
	ip2_params.refl_mach = refl_mach;
	ip2_params.inc_shock_speed = inc_shock_speed;
	ip2_params.inc_ang = inc_ang;
	ip2_params.refl_ang = refl_ang;
	ip2_params.contact_ang = contact_ang;
	ip2_params.Mach_ang = Mach_ang;
	ip2_params.i_to_a_dir = i_to_a_dir;

		/* Solve for node_angle */

	if (min_ang > max_ang) min_ang -= 2. * PI;
	delta = EPS*fabs(max_ang-min_ang);
	delta = max(delta, meps);
	(void) ip2(0.5*(max_ang+min_ang), &epsilon, (POINTER) &ip2_params);
	epsilon = fabs(epsilon)*EPS;
	epsilon = max(epsilon, meps);
	if (debugging("ip2_vals"))
	{
		print_function_values(ip2,(POINTER) &ip2_params,
				      0.0,min_ang,max_ang,100,"ip2",stdout);
	}
	if (find_root(ip2,(POINTER)&ip2_params,0.0,&node_ang,
			min_ang,max_ang,epsilon,delta) == FUNCTION_FAILED)
		return NO;

	/* Since ip2() is a discontinuous function, the root finder may find
	   an invalid root at the point of discontinuity.  Check for this.
	*/
	(void) ip2(node_ang,&ans,(POINTER) &ip2_params);
	if (fabs(ans) > epsilon)
	{
		if (debugging("ipolar2"))
		{
			screen("WARNING in i_polar_2(), ");
			screen("root_finder returned invalid root\n");
		}
		return NO;
	}

		/* Determine node velocity */

	node_speed = inc_shock_speed/fabs(sin(inc_ang - node_ang));
	abs_v[0] = node_speed * cos(node_ang);
	abs_v[1] = node_speed * sin(node_ang);

	debug_print("ipolar2","Left i_polar_2()\n");
	return YES;
}		/*end i_polar_2*/
Пример #7
0
LOCAL int i_polar_1(
	Locstate	ahead,
	Locstate	behind,
	Locstate	refl_bow,
	Locstate	refl_mach,
	ANGLE_DIRECTION	i_to_a_dir,
	float		*abs_v,
	float		*refl_ang,
	float		*cont_ang,
	float		*mach_ang)
{
	float		p3;
	float		theta12;		/*turn angle across refl*/
	float		theta03;		/*turn angle across mach*/
	float		vel0_ang;		/*in steady frame*/
	float		vel1_ang;		/* "    "     "  */
	float		pmax, pmin;
	float		M0_sq, M1_sq;
	float		rel_v[MAXD];
	bool		Cplus_w0;		/*wave 0 is mach stem*/
	bool		Cplus_w1;		/*wave 1 is refl wave*/
	RIEMANN_SOLVER_WAVE_TYPE wtype0;
	RIEMANN_SOLVER_WAVE_TYPE wtype1;
	int		i, dim = Params(ahead)->dim;
	static Locstate st_0 = NULL, st_1 = NULL;
	static Locstate	st_2 = NULL, st_3 = NULL;
	static bool	first = YES;

	debug_print("ipolar1","Entered i_polar_1()\n");

	if (first)
	{
		size_t	sizest = Params(ahead)->sizest;

		first = NO;
		(*Params(ahead)->_alloc_state)(&st_0,sizest);
		(*Params(ahead)->_alloc_state)(&st_1,sizest);
		(*Params(ahead)->_alloc_state)(&st_2,sizest);
		(*Params(ahead)->_alloc_state)(&st_3,sizest);
	}

	set_state(st_0,TGAS_STATE,ahead);
	set_state(st_1,TGAS_STATE,behind);

	if (debugging("ipolar1"))
	{
		verbose_print_state("ahead",ahead);
		verbose_print_state("behind",behind);
		(void) printf("\tabs_v[0] = (%g, %g)\n",abs_v[0],abs_v[1]);
		print_angle_direction("\ti_to_a_dir =",i_to_a_dir,"\n");
	}

	M0_sq = mach_number_squared(st_0,abs_v,rel_v);
	vel0_ang = angle(rel_v[0],rel_v[1]);
	if (debugging("ipolar1"))
	{
		print_angle("\tvel0 angle =",vel0_ang,"\n");
		(void) printf("\tahead Mach number = %g\n",
			      mag_vector(rel_v,dim)/sound_speed(st_0));
	}
	if (mag_vector(rel_v,dim) < sound_speed(st_0))
	{
		if (debugging("ipolar1"))
		{
			(void) printf("WARNING in i_polar_1(), ");
			(void) printf("ahead is subsonic in the rest frame.\n");
		}
		debug_print("ipolar1","Left i_polar_1()\n");
		return NO;
	}

	M1_sq = mach_number_squared(st_1,abs_v,rel_v);
	if (debugging("ipolar1"))
	{
		vel1_ang = angle(rel_v[0],rel_v[1]);
		print_angle("\tvel1 angle =",vel1_ang,"\n");
		(void) printf("\tst1 Mach number = %g\n",sqrt(M1_sq));
	}
	if (mag_vector(rel_v,dim) < sound_speed(st_1))
	{
		if (debugging("ipolar1"))
		{
		       (void) printf("WARNING in i_polar_1(), ");
		       (void) printf("behind is subsonic in the rest frame.\n");
		}
		debug_print("ipolar1","Left i_polar_1()\n");
		return NO;
	}

	if (i_to_a_dir == CLOCKWISE)
	{
		Cplus_w0 = YES;
		Cplus_w1 = NO;
	}
	else
	{
		Cplus_w0 = NO;
		Cplus_w1 = YES;
	}
	
	if (pr_at_max_turn_angle(&pmin,M0_sq,st_0) == FUNCTION_FAILED)
	{
		if (debugging("ipolar1"))
		{
			(void) printf("WARNING in i_polar_1(), ");
			(void) printf("pr_at_max_turn_angle() failed\n");
		}
		return NO;
	}
	pmax = max_behind_shock_pr(M1_sq,st_1);
	if (!intersection_of_two_shock_polars(st_0,st_1,abs_v,&p3,
	                                         &pmin,&pmax,Cplus_w0,
						 Cplus_w1,&wtype0,&wtype1))
	{
		if (debugging("ipolar1"))
		{
			(void) printf("WARNING in i_polar_1(), ");
			(void) printf("unable to compute refl_mach pressure\n");
		}
		debug_print("ipolar1","Left i_polar_1()\n");
		return NO;
	}

	if ((wtype0 != SHOCK) || (wtype1 != SHOCK))
	{
		if (debugging("ipolar1"))
		{
			(void) printf("WARNING in i_polar_1() -- ");
			(void) printf("non-shock wave types.\n");
		}
		debug_print("ipolar1","Left i_polar_1()\n");
		return NO;
	}

	if (!s_polar_3(st_1,YES,p3,Cplus_w1,YES,abs_v,st_2,
			  refl_ang,&theta12))
	{
		if (debugging("ipolar1"))
		{
			(void) printf("WARNING in i_polar_1() -- ");
			(void) printf("unable to compute refl_bow.\n");
		}
		debug_print("ipolar1","Left i_polar_1()\n");
		return NO;
	}

	if (!s_polar_3(st_0,YES,p3,Cplus_w0,YES,abs_v,st_3,
				mach_ang,&theta03))
	{
		if (debugging("ipolar1"))
		{
			(void) printf("WARNING in i_polar_1() -- ");
			(void) printf("unable to compute refl_mach.\n");
		}
		debug_print("ipolar1","Left i_polar_1()\n");
		return NO;
	}

	*cont_ang = normalized_angle(vel0_ang + theta03);

	set_state(refl_bow,GAS_STATE,st_2);
	set_state(refl_mach,GAS_STATE,st_3);

	if (debugging("ipolar1"))
	{
		float ang;
		(void) printf("\n");
		print_angle("\trefl angle = %g d\n",*refl_ang,"\n");
		print_angle("\tcont angle = %g d\n",*cont_ang,"\n");
		print_angle("\tMach angle = %g d\n",*mach_ang,"\n");
		print_angle("\ttheta12 = %g d\n",theta12,"\n");
		print_angle("\ttheta03 = %g d\n",theta03,"\n");
		for (i = 0; i < dim; i++)
			rel_v[i] = vel(i,st_2) - abs_v[i];
		ang = angle(rel_v[0],rel_v[1]);
		print_angle("\tvel2_ang =",ang,"\n");
		for (i = 0; i < dim; i++)
			rel_v[i] = vel(i,st_3) - abs_v[i];
		ang = angle(rel_v[0],rel_v[1]);
		print_angle("\tvel3_ang =",ang,"\n");
		ang = (vel1_ang+theta12) - (vel0_ang+theta03);
		print_angle("(vel1_ang+theta12) - (vel0_ang+theta03) =",
			    ang,"\n");
		verbose_print_state("refl_bow",refl_bow);
		verbose_print_state("refl_mach",refl_mach);
	}

	debug_print("ipolar1","Left i_polar_1()\n");
	return YES;
}		/*end i_polar_1*/