2次元FTプログラム
#include <stdio.h>
#include <math.h>

#define PI 3.14159265

void main (void){
	double kx,ky,dkx,dky,xj[100000],yj[10000],I,I1,I2, Imax;
	double kx0,ky0;
	int step,n,ds,interval,totalstep,d,atoms,slide;

	FILE *fp1, *fp2;

	if((fp1=fopen("./xy.xls","r"))==NULL){
		printf("xy.xls not open.\n");
		return;
	}
	
	if((fp2=fopen("./checkxy.xls","w"))==NULL){
		printf("checkxy.xls not open.\n");
		return;
	}

	FILE *fp3; //MicroAVSData
	if((fp3=fopen("./FTdata.xls","w"))==NULL){
		printf("FTdata.xls not open.\n");
		return;
	}


		printf("X軸原点座標\n");
		scanf("%lf",&kx0);
		printf("凅="); //kxの幅
		scanf("%lf",&dkx);
		printf("Y軸原点座標\n");
		scanf("%lf",&ky0);
		printf("凉="); //kyの幅
		scanf("%lf",&dky);
		printf("division=");
		scanf("%d",&d);

    Imax=9000.;
    totalstep=10;
	atoms=100;
	interval=1000;
	slide=0;

	for(step=0;step <= totalstep;step++){

		fscanf(fp1,"%d\n",&ds);///計算ステップ
		for(n=0;n < atoms;n++){///計算ステップデータ読み込み
			fscanf(fp1,"%lf\t%lf\n",&xj[n],&yj[n]);
		}
		if((ds%interval)==0||ds==999){
			/***フーリエ変換***/
			printf("ステップ%dフーリエ変換中\n",step);
			
	/*		for(n=0;n &l atoms;n++){///計算ステップデータ読み込み確認
			  fprintf(fp2, "%f\t%f\n",xj[n], yj[n]);
		    }  */

			slide++;
			fprintf(fp3,"%d\n",slide);
			for(int i=0;i < d;i++){
				ky=ky0+i*dky;
				for(int j=0;j < d;j++){

					kx=kx0+j*dkx;
					I=0.;I1=0.;I2=0.;
					for(n=0;n < atoms;n++){
							I1 += cos(2.*PI*(kx*xj[n]+ky*yj[n])); //Σcos(kx*yj+ky+yj)
							I2 += sin(2.*PI*(kx*xj[n]+ky*yj[n])); //Σsin(kx*yj+ky+yj)
					}
					I = I1*I1+I2*I2; //{Σcos(kx*yj+ky*yj)}^2+{Σsin(kx*yj+ky*yj)}^2
					//if(I > Imax) I=Imax;
					fprintf(fp3,"%f\t",I);
				}
				fprintf(fp3,"\n");
			}
			/***フーリエ変換***/
		}
	}
	/***計算モジュール***/
	fclose(fp1);
	fclose(fp2);
	fclose(fp3);

}