Class ODE::Mass::Sphere
In: ext/mass.c  (CVS)
Parent: ODE::Mass

Methods

new  

Public Class methods

ODE::Mass::Sphere#initialize( radius, density[, totalmass] ) — Given a radius and a density, create a spherical Mass object. If the optional totalmass parameter is given, adjust them so the total mass is totalmass before returning.

[Source]

/*
 * ODE::Mass::Sphere#initialize( radius, density[, totalmass] )
 * --
 * Given a <tt>radius</tt> and a <tt>density</tt>, create a spherical Mass
 * object. If the optional <tt>totalmass</tt> parameter is given, adjust them so
 * the total mass is <tt>totalmass</tt> before returning.
 */
static VALUE
ode_mass_sphere_init( argc, argv, self )
	 int	argc;
	 VALUE	*argv, self;
{
	ode_MASS	*ptr;
	VALUE		radius, density, totalmass;

	rb_scan_args( argc, argv, "21", &radius, &density, &totalmass );

	rb_call_super( 0, 0 );
	ptr = get_mass( self );

	CheckPositiveNonZeroNumber( NUM2DBL(radius), "radius" );
	CheckPositiveNonZeroNumber( NUM2DBL(density), "density" );
	dMassSetSphere( ptr->massptr, NUM2DBL(radius), NUM2DBL(density) );

	/* If a totalmass argument was given, check and set it */
	if ( RTEST(totalmass) ) {
		CheckPositiveNonZeroNumber( NUM2DBL(totalmass), "totalmass" );
		dMassAdjust( ptr->massptr, (dReal)NUM2DBL(totalmass) );
	}

	return self;
}

[Validate]