Ejemplo n.º 1
0
static void waves (const Vector3d& EPoint, const TNORMAL *Tnormal, Vector3d& normal, const TraceThreadData *Thread)
{
    register unsigned int i;
    register DBL length, scalar, index, sinValue;
    Vector3d point;

    WavesPattern* pPat = dynamic_cast<WavesPattern*>(Tnormal->pattern.get());
    if (pPat == NULL)
        throw POV_EXCEPTION_STRING("Invalid pattern type.");

    for (i = 0; i < Thread->numberOfWaves; i++)
    {
        point = EPoint - Thread->waveSources[i];

        length = point.length();

        if (length == 0.0)
        {
            length = 1.0;
        }

        index = length * pPat->waveFrequency * Thread->waveFrequencies[i] + pPat->wavePhase;

        sinValue = cycloidal(index);

        scalar = sinValue * Tnormal->Amount / Thread->waveFrequencies[i];

        normal += (scalar / (length * (DBL)Thread->numberOfWaves)) * point;
    }
}
Ejemplo n.º 2
0
static void waves (const VECTOR EPoint, const TNORMAL *Tnormal, VECTOR normal, const TraceThreadData *Thread)
{
	register unsigned int i;
	register DBL length, scalar, index, sinValue ;
	VECTOR point;

	for (i = 0 ; i < Thread->numberOfWaves ; i++)
	{
		VSub (point, EPoint, *Thread->waveSources[i]);

		VLength (length, point);

		if (length == 0.0)
		{
			length = 1.0;
		}

		index = length * Tnormal->Frequency * Thread->waveFrequencies[i] + Tnormal->Phase;

		sinValue = cycloidal(index);

		scalar = sinValue * Tnormal->Amount / Thread->waveFrequencies[i];

		VAddScaledEq(normal, scalar / (length * (DBL)Thread->numberOfWaves), point);
	}
}