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; } }
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); } }