Алгоритмы палеомагнитных вычислений
	ANGLE: Угол между двумя векторами
	
		 
		D1, I1, R=1	→  X1, Y1, Z1
		D2, I2, R=1	→  X2, Y2, Z2
		
		cos(φ) = X1*X2 + Y1*Y2 + Z1*Z2 
		
Входные данные:
		
			- D1 – склонение первого вектора
 
			- I1 – наклонение первого вектора
 
			- D2 – склонение второго вектора
 
			- I2 – наклонение второго вектора
 
		
		Выходные данные:
		
			- φ – угол между двумя векторами
 
		
	 
	NORMAL: Нормаль к двум векторам
	
		 
		D1, I1, R=1	→  X1, Y1, Z1
		D2, I2, R=1	→  X2, Y2, Z2
		
		XN = Y1*Z2 – Y2*Z1
		YN = Z1*X2 – Z2*X1
		ZN = X1*Y2 – X2*Y1
		
		XN, YN, ZN	→  DN, IN
		
Входные данные:
		
			- D1 – склонение первого вектора
 
			- I1 – наклонение первого вектора
 
			- D2 – склонение второго вектора
 
			- I2 – наклонение второго вектора
 
		
		Выходные данные:
		
			- DN – склонение нормали
 
			- IN – наклонение нормали
 
		
	 
	PROJECT: Проекция одного вектора на другой
	
		 
		D1, I1, R1	→  X1, Y1, Z1
		D2, I2, R=1	→  X2, Y2, Z2
		
		P = R1*(X1*X2 + Y1*Y2 + Z1*Z2)
		
Входные данные:
		
			- D1 – склонение первого вектора
 
			- I1 – наклонение первого вектора
 
			- R1 – длина первого вектора
 
			- D2 – склонение второго вектора
 
			- I2 – наклонение второго вектора
 
		
		Выходные данные:
		
			- P – проекция одного вектора на другой
 
		
	 
	Incl2Lat: Широта из наклонения
	
		 
		tg(Lat) = 0.5*tg(I)
		Входные данные:
		
		Выходные данные:
		
	 
	Lat2Incl: Наклонение из широты
	
		 
		tg(I) = 2*tg(Lat)
		Входные данные:
		
		Выходные данные:
		
	 
	XYZ2DIR: Сферические координаты из декартовых
	
		 
		p = SQRT(X*X+Y*Y)
		R = SQRT(X*X+Y*Y+Z*Z)
		D = arccos(X/p)*SIGN(y)
		I = arcsin(Z/R)
		
Входные данные:
		
			- X – координата, направленная на север…
 
			- Y – координата, направленная на восток…
 
			- Z – координата, направленная вниз…
 
		
		Выходные данные:
		
			- D – склонение…
 
			- I – наклонение…
 
			- R – длина вектора…
 
		
	 
	DIR2XYZ: Декартовы координаты из сферических
	
		 
		X = R*cos(I)*cos(D)
		Y = R*cos(I)*sin(D)
		Z = R*sin(I)
		
Входные данные:
		
			- D – склонение…
 
			- I – наклонение…
 
			- R – длина вектора…
 
		
		Выходные данные:
		
			- X – координата, направленная на север…
 
			- Y – координата, направленная на восток…
 
			- Z – координата, направленная вниз…
 
		
	 
	Geo2Strat: Древние координаты из современных
	
		 
		Dg, Ig, R=1  →  Xg, Yg, Zg
		
		X= Xg*cos(DipDir)*cos(Dip) +Yg*sin(DipDir)*cos(Dip) +Zg*sin(Dip)
		Y= –Xg*sin(DipDir) +Yg*cos(DipDir)
		Xs= X*cos(DipDir) –Y*sin(DipDir)
		Ys= X*sin(DipDir) +Y*cos(DipDir)
		Zs= –Xg*cos(DipDir)*sin(Dip) –Yg*sin(DipDir)*sin(Dip) +Zg*cos(Dip)
		
		Xs, Ys, Zs  →  Ds, Is
		
Входные данные:
		
			- Dg – склонение в современных (географических) координатах
 
			- Ig – наклонение в современных (географических) координатах
 
			- DipDir – азимут падения пласта (Dip Direction)
 
			- Dip – угол падения пласта
 
		
		Выходные данные:
		
			- Ds – склонение в древних (стратиграфических) координатах
 
			- Is – наклонение в древних (стратиграфических) координатах
 
		
	 
	Strat2Geo: Современные координаты из древних
	
		 
		Ds, Is, R=1  →  Xs, Ys, Zs
		
		X= Xs*cos(DipDir)*cos(Dip) +Ys*sin(DipDir)*cos(Dip) –Zs*sin(Dip)
		Y= –Xs*sin(DipDir) +Ys*cos(DipDir)
		Xg= X*cos(DipDir) –Y*sin(DipDir)
		Yg= X*sin(DipDir) +Y*cos(DipDir)
		Zg= Xs*cos(DipDir)*sin(Dip) +Ys*sin(DipDir)*sin(Dip) +Zs*cos(Dip)
		
		Xg, Yg, Zg  →  Dg, Ig
		
Входные данные:
		
			- Ds – склонение в древних (стратиграфических) координатах
 
			- Is – наклонение в древних (стратиграфических) координатах
 
			- DipDir – азимут падения пласта (Dip Direction)
 
			- Dip – угол падения пласта
 
		
		Выходные данные:
		
			- Dg – склонение в современных (географических) координатах
 
			- Ig – наклонение в современных (географических) координатах
 
		
	 
	FindBedding: Определение элементов залегания пласта
	
		 
		DipDir=0;
		Dip=0;
		if ((Ds<>Dg) or (Is<>Ig)) {
		DIR2XYZ(Dg,Ig,1,Xg,Yg,Zg);
		DIR2XYZ(Ds,Is,1,Xs,Ys,Zs);
		A1=(Ys–Yg)/(Xs-Xg);
		B1=Yg-A1*Xg;
		DD=-A1-1/A1;
		D1=-B1/A1;
		D2=B1;
		X0=D2/DD;
		Y0=D1/DD;
		CB=(Xg-X0)*(Xs-X0)+(Yg-Y0)*(Ys-Y0)+Zg*Zs;
		CB=CB/SQRT((Xg-X0)*(Xg-X0)+(Yg-Y0)*(Yg-Y0)+Zg*Zg;
		CB=CB/SQRT((Xs-X0)*(Xs-X0)+(Ys-Y0)*(Ys-Y0)+Zs*Zs);
		DipDir= D360(ATAN(A1)+180);
		Dip= ACOS(CB);
		Geo2Strat(Xg,Yg,Zg,DirDip,Dip,Xs,Ys,Zs);
		XYZ2DIR(Xs,Ys,Zs,Ds_,Is_,Rs_);
		if(Angle(Ds,Is,Ds_,Is_)>1e-2) {
		DipDir=D360(DipDir-180); } }
		
Входные данные:
		
			- Ds – склонение в древних (стратиграфических) координатах
 
			- Is – наклонение в древних (стратиграфических) координатах
 
			- Dg – склонение в современных (географических) координатах
 
			- Ig – наклонение в современных (географических) координатах
 
		
		Выходные данные:
		
			- DipDir – азимут падения пласта 
 
			- Dip – угол падения пласта 
 
		
	 
	Dir2Pole: Вычисление координат палеомагнитного полюса
	
		 
		Храмов А.Н. и др. Палеомагнитология. Л.: Недра, 1982. - 312 с. (
стр. 18)
		
Входные данные:
		
			- D – склонение 
 
			- I – наклонение 
 
			- SLong – долгота места 
 
			- SLat – штрота места 
 
		
		Выходные данные:
		
			- Plong – долгота полюса 
 
			- PLat – широта полюса 
 
			-  PaleoLat – ралеоширота 
 
		
	 
	Pole2Dir: Вычисление направления по известному полюсу
	
		 
		Храмов А.Н. и др. Палеомагнитология. Л.: Недра, 1982. - 312 с. (
стр. 18)
		
Input data:
		
			- Plong – долгота полюса 
 
			- PLat – широта полюса 
 
			- SLong – долгота места 
 
			- SLat – штрота места 
 
		
		Output data:
		
			- D – склонение 
 
			- I – наклонение 
 
			- PaleoLat – ралеоширота 
 
		
	 
	PM: Палеомагнитные данные из параметров реконструкции
	
		 
		Incl:  из формулы tg(Incl) = 2*tg(PaleoLat)
		Decl = D360(Am–Ao)
		Pole(Decl, Incl, SLong, SLat, PLong, PLat, Paleolat)
		
Входные данные:
		
			- PaleoLat – палеоширота
 
			- Am – современный азимут простирания какой-либо структуры
 
			- Ao – азимут простирания той же структуры на реконструкции
 
			- SLong – долгота места
 
			- SLat – широта места
 
		
		Выходные данные:
		
			- Decl – склонение палеомагнитного вектора
 
			- Incl – наклонение палеомагнитного вектора
 
			- PLong – долгота палеомагнитного полюса
 
			- PLat – широта палеомагнитного полюса
 
		
	 
	α95: Вычисление α95 из известных N и k
	
		 
		A95=140/SQRT(N*k)
		Входные данные:
		
			- k – кучность векторов выборки
 
			- N – объем выборки
 
		
		Выходные данные:
		
			- A95 – радиус круга доверия
 
		
	 
	kappa: Вычисление k из известных N и α95
	
		 
		из формулы A95=140/SQRT(N*k)
		k=(19600/(A95*A95))/N
		
Входные данные:
		
			- A95 – радиус круга доверия
 
			- N – объем выборки
 
		
		Выходные данные:
		
			- k – кучность векторов выборки
 
		
	 
	N: Вычисление N из известных k и α95
	
		 
		из формулы A95=140/SQRT(N*k)
		N=(19600/(A95*A95))/k
		
Входные данные:
		
			- A95 – радиус круга доверия
 
			- k – кучность векторов выборки
 
		
		Выходные данные:
		
	 
	R(r): Вектор-результант из кучности и объема выборки
	
		 
		из формулы k = (N–1)/(N–R)
		R = N – (N – 1)/k
		r = R/N 
		
Входные данные:
		
			- k – кучность векторов выборки
 
			- N – объем выборки
 
		
		Выходные данные:
		
			- R – вектор-результант
 
			- r – нормированный вектор-результант
 
		
	 
	Sum: Сумма двух векторов
	
		 
		N=N1+N2
		D1, I1, R1  →  X1, Y1, Z1
		D2, I2, R2  →  X2, Y2, Z2
		
		X=X1+X2
		Y=Y1+Y2
		Z=Z1+Z2
		
		X, Y, Z  →  Dm, Im, R
		k=(N-1)/(N-R)
		a95=140/SQRT(k*N)
		
Входные данные:
		
			- D1 – склонение первого вектора
 
			- I1 – наклонение первого вектора
 
			- R1 – длина первого вектора
 
			- N1 – объем первой выборки
 
			- D2 – склонение второго вектора
 
			- I2 – наклонение второго вектора
 
			- R2 – длина второго вектора
 
			- N2 – объем второй выборки
 
		
		Выходные данные:
		
			- Dm – склонение суммарного вектора
 
			- Im – наклонение сумарного вектора
 
			- R – длина суммарного вектора
 
			- N – кучность
 
			- k – радиус круга доверия на уровне 95%
 
			- A95 – объем суммарной выборки
 
		
		Примечание:
		
			- R1, N1, R2 и N2 – могут быть равны и единице :)
 
		
	 
	Euler: Вращение на сфере вокруг полюса Эйлера
	
		 
		Корн Г., Корн Т. Справочник по математике (ф-лы 14.10-6 – 14.10-8)
		Входные данные:
		
			- L1 – долгота полюса до поворота
 
			- F1 – широта полюса до поворота
 
			- LE – долгота полюса Эйлера
 
			- FE – широта полюса Эйлера
 
			- FI – угол поворота
 
		
		Выходные данные:
		
			- L2 – долгота полюса после поворота
 
			- F2 – широта полюса после поворота
 
		
	 
	RevTest: Тест обращения (McFadden, McElhinny, 1990)
	
		 
		McFadden P.L., McElhinny M.W. Classification of the reversal test in palaeomagnetism. Geophys. J. Int. (1990) 103, 725-729 
		Входные данные:
		
			- D1 – склонение среднего первой выборки
 
			- I1 – наклонение среднего первой выборки
 
			- k1 – кучность первой выборки
 
			- N1 – объем первой выборки
 
			- D1 – склонение среднего второй выборки
 
			- I1 – наклонение среднего второй выборки
 
			- k1 – кучность второй выборки
 
			- N1 – объем второй выборки
 
		
		Выходные данные:
		
			- Ratio – отношение кучностей k1/k2
 
			- Rc – критическое значение для отношения кучностей
 
			- Dm – склонение суммарного вектора
 
			- Im – наклонение суммарного вектора
 
			- R – длина суммарного вектора
 
			- k – кучность суммарной выборки
 
			- a95 – радиус круга доверия на уровне 95%
 
			- N – объем суммарной выборки
 
			- Gamma – угол между средними векторами (гамма)
 
			- Gc – критическое значение для угла
 
		
	 
 
	Algorithms for paleomagnetic calculation
	Angle: Angle between two vectors
	
		 
		D1, I1, R=1  →  X1, Y1, Z1
		D2, I2, R=1  →  X2, Y2, Z2
		
		cos(φ) = X1*X2 + Y1*Y2 + Z1*Z2 
		
Input data:
		
			- D1 – declination of first vector
 
			- I1 – inclination of first vector
 
			- D2 – declination of second vector
 
			- I2 – inclination of second vector
 
		
		Output data :
		
			- φ – angle between two vectors
 
		
	 
	Normal: Perpendicular (normal) vector to two vectors
	
		 
		D1, I1, R=1  →  X1, Y1, Z1
		D2, I2, R=1  →  X2, Y2, Z2
		
		Xn = Y1*Z2 – Y2*Z1
		Yn = Z1*X2 – Z2*X1
		Zn = X1*Y2 – X2*Y1
		
		Xn, Yn, Zn  →  Dn, In
		
Input data
		
			- D1 – declination of first vector
 
			- I1 – inclination of first vector
 
			- D2 – declination of second vector
 
			- I2 – inclination of second vector
 
		
		Output data 
		
			- Dn – declination of normal vector
 
			- In – inclination of normal vector
 
		
	 
	Project: Projection of a vector to the given vector
	
		 
		D1, I1, R1  →  X1, Y1, Z1
		D2, I2, R=1  →  X2, Y2, Z2
		
		p = R1*(X1*X2 + Y1*Y2 + Z1*Z2)
		
Input data:
		
			- D1 – declination of first vector
 
			- I1 – inclination of first vector
 
			- R1 – length of first vector
 
			- D2 – declination of second vector
 
			- I2 – inclination of second vector
 
		
		Output data:
		
			- p – projection of a vector to the given vector
 
		
	 
	Incl2Lat: Latitude from inclination
	
		 
		tg(Lat) = 0.5*tg(I)
		
Input data:
		
			- I – inclination of vector
 
		
		Output data:
		
	 
	Lat2Incl: Inclination from latitude
	
		 
		tg(I) = 2*tg(Lat)
		
Input data:
		
		Output data:
		
			- I – inclination of vector
 
		
	 
	XYZ2DIR: Spherical coordinates from Cartesian
	
		 
		p = SQRT(X*X+Y*Y)
		R = SQRT(X*X+Y*Y+Z*Z)
		D = arccos(X/p)*SIGN(y)
		I = arcsin(Z/R)
		
Input data:
		
			- X – north Cartesian coordinate
 
			- Y – east Cartesian coordinate
 
			- Z – down Cartesian coordinate
 
		
		Output data:
		
			- D – declination
 
			- I – inclination
 
			- R – verctor length
 
		
	 
	DIR2XYZ: Cartesian coordinates from Spherical
	
		 
		X = R*cos(I)*cos(D)
		Y = R*cos(I)*sin(D)
		Z = R*sin(I)
		
Input data:
		
			- D – declination
 
			- I – inclination
 
			- R – verctor length
 
		
		Output data:
		
			- X – north Cartesian coordinate
 
			- Y – east Cartesian coordinate
 
			- Z – down Cartesian coordinate
 
		
	 
	Geo2Strat: Stratigraphic coordinates from geographic
	
		 
		Dg, Ig, R=1  →  Xg, Yg, Zg
		
		X= Xg*cos(DipDir)*cos(Dip) +Yg*sin(DipDir)*cos(Dip) +Zg*sin(Dip)
		Y= –Xg*sin(DipDir) +Yg*cos(DipDir)
		Xs= X*cos(DipDir) –Y*sin(DipDir)
		Ys= X*sin(DipDir) +Y*cos(DipDir)
		Zs= –Xg*cos(DipDir)*sin(Dip) –Yg*sin(DipDir)*sin(Dip) +Zg*cos(Dip)
		
		Xs, Ys, Zs  →  Ds, Is
		
Input data:
		
			- Dg – declination in geographic coordinates
 
			- Ig – inclination in geographic coordinates
 
			- DipDir – dip direction
 
			- Dip – dip
 
		
		Output data:
		
			- Ds – declination in stratigraphic coordinates
 
			- Is – inclination in stratigraphic coordinates
 
		
	 
	Strat2Geo: Geographic coordinates from stratigraphic
	
		 
		Ds, Is, R=1  →  Xs, Ys, Zs
		
		X= Xs*cos(DipDir)*cos(Dip) +Ys*sin(DipDir)*cos(Dip) –Zs*sin(Dip)
		Y= –Xs*sin(DipDir) +Ys*cos(DipDir)
		Xg= X*cos(DipDir) –Y*sin(DipDir)
		Yg= X*sin(DipDir) +Y*cos(DipDir)
		Zg= Xs*cos(DipDir)*sin(Dip) +Ys*sin(DipDir)*sin(Dip) +Zs*cos(Dip)
		
		Xg, Yg, Zg  →  Dg, Ig
		
Input data:
		
			- Ds – declination of vector in stratigraphic coordinates
 
			- Is – inclination of vector in stratigraphic coordinates
 
			- DipDir – dip direction
 
			- Dip – dip
 
		
		Output data:
		
			- Dg – declination of vector in geographic coordinates
 
			- Ig – inclination  of vector in geographic coordinates
 
		
	 
	FindBedding: Estimation of bedding geometries
	
		 
		DipDir=0;
		Dip=0;
		if ((Ds<>Dg) or (Is<>Ig)) {
		DIR2XYZ(Dg,Ig,1,Xg,Yg,Zg);
		DIR2XYZ(Ds,Is,1,Xs,Ys,Zs);
		A1=(Ys–Yg)/(Xs-Xg);
		B1=Yg-A1*Xg;
		DD=-A1-1/A1;
		D1=-B1/A1;
		D2=B1;
		X0=D2/DD;
		Y0=D1/DD;
		CB=(Xg-X0)*(Xs-X0)+(Yg-Y0)*(Ys-Y0)+Zg*Zs;
		CB=CB/SQRT((Xg-X0)*(Xg-X0)+(Yg-Y0)*(Yg-Y0)+Zg*Zg;
		CB=CB/SQRT((Xs-X0)*(Xs-X0)+(Ys-Y0)*(Ys-Y0)+Zs*Zs);
		DipDir= D360(ATAN(A1)+180);
		Dip= ACOS(CB);
		Geo2Strat(Xg,Yg,Zg,DirDip,Dip,Xs,Ys,Zs);
		XYZ2DIR(Xs,Ys,Zs,Ds_,Is_,Rs_);
		if(Angle(Ds,Is,Ds_,Is_)>1e-2) {
		DipDir=D360(DipDir-180); } }
		
Input data:
		
			- Ds – declination of vector in stratigraphic coordinates 
 
			- Is – inclination of vector in stratigraphic coordinates 
 
			- Dg – declination of vector in geographic coordinates 
 
			- Ig – declination of vector in geographic coordinates 
 
		
		Output data:
		
			- DipDir – dip direction 
 
			- Dip – dip 
 
		
	 
	Dir2Pole: Calculating of virtual geomagnetic pole
	
	Pole2Dir: Calculating a direction from virtual geomagnetic pole
	
	PM: Paleomagnetic data from reconstruction parameters
	
		 
		Incl:  from formula tg(Incl) = 2*tg(PaleoLat)
		Decl = D360(Am–Ao)
		Pole(Decl, Incl, SLong, SLat, PLong, PLat, Paleolat)
		
Input data:
		
			- PaleoLat – paleolatitude
 
			- Am – modern strike azimuth of the object
 
			- Ao – ancient strike azimuth of the same object
 
			- SLong – site longitude
 
			- SLat – site latitude
 
		
		Output data:
		
			- Decl – declination of paleomagnetic vector
 
			- Incl – inclination of paleomagnetic vector
 
			- PLong – pole longitude
 
			- PLat – pole latitude 
 
		
	 
	α95: Calculating of circular confidence limit from k and N
	
		 
		A95=140/SQRT(N*k)
		Input data:
		
			- k – precision parameter (kappa)
 
			- N – number of vectors
 
		
		Output data:
		
			- A95 – circular confidence limit
 
		
	 
	kappa: Calculating of precision parameter from N and α95
	
		 
		from formulas A95=140/SQRT(N*k)
		k=(19600/(A95*A95))/N
		
Input data:
		
			- A95 – circular confidence limit
 
			- N – number of vectors
 
		
		Output data:
		
			- k – precision parameter (kappa)
 
		
	 
	N: Calculating of number of vectors from k and α95
	
		 
		from formulas A95=140/SQRT(N*k)
		N=(19600/(A95*A95))/k
		
Input data:
		
			- A95 – circular confidence limit
 
			- k – precision parameter (kappa)
 
		
		Output data:
		
	 
	R(r): Vector-resultant from from k (kappa) and N
	
		 
		from formulas k = (N–1)/(N–R)
		R = N – (N – 1)/k
		r = R/N 
		
Input data:
		
			- k – precision parameter (kappa)
 
			- N – number of vectors
 
		
		Output data:
		
			- R – normalized vector-resultant
 
			- r – normalized vector-resultant
 
		
	 
	Sum: Sum of two vectors
	
		 
		N=N1+N2
		D1, I1, R1  →  X1, Y1, Z1
		D2, I2, R2  →  X2, Y2, Z2
		
		X=X1+X2
		Y=Y1+Y2
		Z=Z1+Z2
		
		X, Y, Z  →  Dm, Im, R
		k=(N-1)/(N-R)
		A95=140/SQRT(k*N)
		
Input data:
		
			- D1 – declination of first vector
 
			- I1 – inclination of first vector
 
			- R1 – length of first vector
 
			- N1 – size of first sample 
 
			- D2 – declination of second vector
 
			- I2 – inclination of second vector
 
			- R2 – length of second vector
 
			- N2 – size of second sample
 
		
		Output data:
		
			- Dm – declination of total vector
 
			- Im – inclination of total vector
 
			- R – length of total vector
 
			- N – size of total sample
 
			- k – precision parameter (kappa)
 
			- A95 – circular confidence limit
 
		
		Note:
		
			- R1, N1, R2 & N2 – may be equal to unity :)
 
		
	 
	Euler: Rotation on the sphere around the Euler pole
	
		 
		Mathematical Handbook for Scientists and Engineers. by Granino A. Korn, Theresa M. Korn (formulas 14.10-6 – 14.10-8)
		Input data:
		
			- L1 – longitude of pole before rotation
 
			- F1 – latitude of pole before rotation
 
			- LE – longitude of Euler pole
 
			- FE – latitude of Euler pole
 
			- FI – angle of rotation
 
		
		Output data:
		
			- L2 – longitude of pole after rotation
 
			- F2 – latitude of pole after rotation
 
		
	 
	RevTest: Reversal test (McFadden, McElhinny, 1990)
	
		 
		McFadden P.L., McElhinny M.W. Classification of the reversal test in palaeomagnetism. Geophys. J. Int. (1990) 103, 725-729 
		Input data:
		
			- D1 – total declination of first sample
 
			- I1 – total inclination of first sample
 
			- k1 – precision parameter (kappa) of first sample
 
			- N1 – number of vectors of first sample
 
			- D1 – total declination of second sample
 
			- I1 – total inclination of second sample
 
			- k1 – precision parameter (kappa) of second sample
 
			- N1 – number of vectors of second sample
 
		
		Output data:
		
			- Ratio – ratio k1/k2
 
			- Rc – critical value for this ratio
 
			- Dm – declination of total vector
 
			- Im – inclination of total vector
 
			- R – length of total vector
 
			- k – precision parameter (kappa) of total sample
 
			- a95 – circular confidence limit
 
			- N – size of total sample
 
			- Gamma – angle beetween mean vectors of two samples
 
			- Gc – critical value for this angle