using System; public class Harmonic:Curve { public static double safe_sigma(int n,double t) { int m=n/2; double r=1.0; if(n%2==0) m--; for(int j=1;j<=m;j++) r+=2.0*Math.Cos(2.0*Math.PI*j*t); if(n%2==0) r+=Math.Cos(Math.PI*n*t); return r/n; } public static double sigma(int n,double t) { double num, den; num=Math.Sin(n*Math.PI*t); den=n*Math.Sin(Math.PI*t); if(Math.Abs(den)<1e-6) return safe_sigma(n,t); if(n%2==0) return Math.Cos(Math.PI*t)*num/den; else return num/den; } public static double sigma(int n,int k,double t) { return sigma(n,t-k/(double)n); } public override Vector evaluate(Vector[] p,double t) { Vector r=new Vector(); int n=p.GetLength(0); for(int i=0;i