在数据分析、游戏地形生成、程序化纹理生成等多个领域都要用到周期函数的算法
下面是一些简单周期函数,可以直接调用
正弦函数
常见的周期函数,图像:
![](https://i-blog.csdnimg.cn/blog_migrate/2ef0068ebd2c1e2fc0fb4a62f4476484.png)
对应代码
/// <summary>
/// 三角函数
/// </summary>
/// <param name="x">自变量</param>
/// <param name="A">振幅</param>
/// <param name="omega">角速度</param>
/// <param name="phi">初相</param>
/// <param name="B">平衡位置</param>
/// <returns></returns>
public static float Sin(float x, float A, float omega, float phi, float B)
{
return (float)(A * Math.Sin(omega * x + phi) + B);
}
2.方波函数
图像:
![](https://i-blog.csdnimg.cn/blog_migrate/28a9afe8d4938e0d140f4175b601869a.png)
代码:
/// <summary>
/// 方波函数
/// </summary>
/// <param name="x">自变量</param>
/// <param name="A">振幅</param>
/// <param name="omega">角速度</param>
/// <param name="phi">初相</param>
/// <param name="B">平衡位置</param>
/// <returns></returns>
public static float Square(float x, float A, float omega, float phi, float B)
{
float t = omega * x + phi;
float re = t % 2 < 1 ? 1 : -1;
return re * A + B;
}
3.锯齿波函数
图像:
![](https://i-blog.csdnimg.cn/blog_migrate/09a570e51512d176e5866063b76eefa3.png)
代码:
/// <summary>
/// 锯齿波
/// </summary>
/// <param name="x">自变量</param>
/// <param name="A">振幅</param>
/// <param name="omega">角速度</param>
/// <param name="phi">初相</param>
/// <param name="B">平衡位置</param>
/// <returns></returns>
public static float Trigonometric(float x, float A, float omega, float phi, float B)
{
float t = omega * x + phi;
float re = t % 2 < 1 ? t % 2 : 2 - t % 2;
return re * A + B;
}
4.柱面函数
图像:
![](https://i-blog.csdnimg.cn/blog_migrate/93f7050a2c8563573445b5acf69a6ea6.png)
代码:
/// <summary>
/// 柱面
/// </summary>
/// <param name="x">自变量</param>
/// <param name="A">振幅</param>
/// <param name="omega">角速度</param>
/// <param name="phi">初相</param>
/// <param name="B">平衡位置</param>
/// <returns></returns>
public static float Cylinder(float x, float A, float omega, float phi, float B)
{
float t = omega * x + phi;
float re = (float)Math.Sqrt(1 - Math.Pow(1 - t % 2, 2));
return re * A + B;
}