Ejemplo n.º 1
0
float getRedNoiseValue(rednoisemodel_t* model, float mjd,int real){
    int i = (int)((mjd-model->start)/model->tres);
    float mu = ((mjd-model->start)/model->tres) - (float)i;

    i+=real*model->npt;
    return CatmullRomInterpolate(model->data[i-1],model->data[i],model->data[i+1],model->data[i+2],mu);
}
Ejemplo n.º 2
0
cOneParameter cMorph::CatmullRom(int const key, double const factor, bool const angular)
{
	int k1, k2, k3, k4;

	if (key >= 1) k1 = key - 1;
	else k1 = key;

	if (key < dataSets.size()) k2 = key;
	else k2 = dataSets.size() - 1;

	if (key < dataSets.size() - 1) k3 = key + 1;
	else k3 = dataSets.size() - 1;

	if (key < dataSets.size() - 2) k4 = key + 2;
	else k4 = dataSets.size() - 1;

	cOneParameter interpolated = dataSets[key].parameter;
	cMultiVal val;

	switch (dataSets[key].parameter.GetValueType())
	{
		case typeNull:
		case typeString:
		case typeBool:
			return None(key);

		case typeDouble:
		case typeInt:
		{
			double v1, v2, v3, v4;
			dataSets[k1].parameter.GetMultival(valueActual).Get(v1);
			dataSets[k2].parameter.GetMultival(valueActual).Get(v2);
			dataSets[k3].parameter.GetMultival(valueActual).Get(v3);
			dataSets[k4].parameter.GetMultival(valueActual).Get(v4);
			val.Store(CatmullRomInterpolate(factor, v1, v2, v3, v4, angular));
			break;
		}
		case typeRgb:
		{
			sRGB v1, v2, v3, v4;
			dataSets[k1].parameter.GetMultival(valueActual).Get(v1);
			dataSets[k2].parameter.GetMultival(valueActual).Get(v2);
			dataSets[k3].parameter.GetMultival(valueActual).Get(v3);
			dataSets[k4].parameter.GetMultival(valueActual).Get(v4);
			val.Store(sRGB(CatmullRomInterpolate(factor, v1.R, v2.R, v3.R, v4.R, angular),
										 CatmullRomInterpolate(factor, v1.G, v2.G, v3.G, v4.G, angular),
										 CatmullRomInterpolate(factor, v1.B, v2.B, v3.B, v4.B, angular)));
			break;
		}
		case typeVector3:
		{
			CVector3 v1, v2, v3, v4;
			dataSets[k1].parameter.GetMultival(valueActual).Get(v1);
			dataSets[k2].parameter.GetMultival(valueActual).Get(v2);
			dataSets[k3].parameter.GetMultival(valueActual).Get(v3);
			dataSets[k4].parameter.GetMultival(valueActual).Get(v4);
			val.Store(CVector3(CatmullRomInterpolate(factor, v1.x, v2.x, v3.x, v4.x, angular),
												 CatmullRomInterpolate(factor, v1.y, v2.y, v3.y, v4.y, angular),
												 CatmullRomInterpolate(factor, v1.z, v2.z, v3.z, v4.z, angular)));
			break;
		}
		case typeVector4:
			{
			CVector4 v1, v2, v3, v4;
			dataSets[k1].parameter.GetMultival(valueActual).Get(v1);
			dataSets[k2].parameter.GetMultival(valueActual).Get(v2);
			dataSets[k3].parameter.GetMultival(valueActual).Get(v3);
			dataSets[k4].parameter.GetMultival(valueActual).Get(v4);
			val.Store(CVector4(CatmullRomInterpolate(factor, v1.x, v2.x, v3.x, v4.x, angular),
												 CatmullRomInterpolate(factor, v1.y, v2.y, v3.y, v4.y, angular),
												 CatmullRomInterpolate(factor, v1.z, v2.z, v3.z, v4.z, angular),
												 CatmullRomInterpolate(factor, v1.w, v2.w, v3.w, v4.w, angular)));
			break;
		}
		case typeColorPalette:
		{
			cColorPalette v1, v2, v3, v4;
			cColorPalette out;
			dataSets[k1].parameter.GetMultival(valueActual).Get(v1);
			dataSets[k2].parameter.GetMultival(valueActual).Get(v2);
			dataSets[k3].parameter.GetMultival(valueActual).Get(v3);
			dataSets[k4].parameter.GetMultival(valueActual).Get(v4);
			for (int i = 0; i < v1.GetSize(); i++)
			{
				out.AppendColor(sRGB(CatmullRomInterpolate(factor,
																									 v1.GetColor(i).R,
																									 v2.GetColor(i).R,
																									 v3.GetColor(i).R,
																									 v4.GetColor(i).R,
																									 angular),
														 CatmullRomInterpolate(factor,
																									 v1.GetColor(i).G,
																									 v2.GetColor(i).G,
																									 v3.GetColor(i).G,
																									 v4.GetColor(i).G,
																									 angular),
														 CatmullRomInterpolate(factor,
																									 v1.GetColor(i).B,
																									 v2.GetColor(i).B,
																									 v3.GetColor(i).B,
																									 v4.GetColor(i).B,
																									 angular)));
			}
			val.Store(out);
			break;
		}
	}

	interpolated.SetMultival(val, valueActual);
	return interpolated;
}