steric_1.11
|
Makefile,
Makefile.sgi,
README.steric,
contplot,
craig.c,
craig.h,
crystal.c,
crystal.h,
integrat.c,
integrat.h,
leach.c,
leach.h,
long_steric,
makeit,
mapcont,
mapcont.c,
mapprof,
mapprof.c,
profplot,
proja.c,
proja.h,
ryan.c,
ryan.h,
ryan_perm.c,
ryan_perm.h,
ryan_quad.c,
ryan_quad.h,
steraid.c,
steraid.h,
stercalc.c,
stercalc.h,
stercomm.c,
stercomm.h,
sterdefn.h,
stererr.h,
sterfile.c,
sterfile.h,
stergrap.c,
stergrap.h,
stergrp.c,
stergrp.h,
steric,
steric.TeX,
steric.err,
steric.grp,
steric.hlp,
steric.ini,
steric.par,
stermain.c,
stermem.c,
stermem.h,
sterover.c,
sterover.h,
sterplot,
stertext.c,
stertext.h,
test.bgf,
test.inp,
vectors.c,
vectors.h,
|
|
|
/**************************************************************************/
/****************** vector calculation aids *****************************/
/**************************************************************************/
#include
#include "steraid.h"
#include "vectors.h"
/**************************************************************************/
Vector Vsum(Vector u, Vector v)
{
Vector s;
s.x=u.x+v.x;
s.y=u.y+v.y;
s.z=u.z+v.z;
return(s);
}
/**************************************************************************/
Vector Vdif(Vector u, Vector v)
{
Vector s;
s.x=u.x-v.x;
s.y=u.y-v.y;
s.z=u.z-v.z;
return(s);
}
/**************************************************************************/
double Vmag(Vector v)
{ return(sqrt(v.x*v.x+v.y*v.y+v.z*v.z)); }
/**************************************************************************/
double dot_product(Vector u, Vector v)
{
return(u.x*v.x+u.y*v.y+u.z*v.z);
}
/**************************************************************************/
Vector cross_product(Vector u, Vector v)
{
Vector p;
p.x=u.y*v.z-u.z*v.y;
p.y=u.z*v.x-u.x*v.z;
p.z=u.x*v.y-u.y*v.x;
return(p);
}
/**************************************************************************/
Vector unit_vector(Vector v)
{
double magv;
if((magv=Vmag(v))==0.0) return(v);
v.x/=magv;
v.y/=magv;
v.z/=magv;
return(v);
}
/**************************************************************************/
double VangleV(Vector u, Vector v)
{
double d=dot_product(unit_vector(v),unit_vector(u));
if(AlmostZero(1.0-d)) return(0.0);
if(AlmostZero(1.0+d)) return(PI);
return(acos(d));
}
/**************************************************************************/
Vector SxV(double s, Vector v)
{
v.x*=s;
v.y*=s;
v.z*=s;
return(v);
}
/**************************************************************************/
Matrix SxM(double s, Matrix M)
{
M.x=SxV(s,M.x);
M.y=SxV(s,M.y);
M.z=SxV(s,M.z);
return(M);
}
/**************************************************************************/
Vector VequalV(Vector v) { return(v); }
/**************************************************************************/
Vector Vequal(double x, double y, double z)
{
Vector v;
v.x=x;
v.y=y;
v.z=z;
return(v);
}
/**************************************************************************/
int Vcmp(Vector u, Vector v)
{
double d=0.0;
d=Vmag(Vdif(u,v));
return((int)(1000*d));
}
/**************************************************************************/
Matrix Mtranspose(Matrix A)
{
Matrix T;
T.x.x=A.x.x; T.x.y=A.y.x; T.x.z=A.z.x;
T.y.x=A.x.y; T.y.y=A.y.y; T.y.z=A.z.y;
T.z.x=A.x.z; T.z.y=A.y.z; T.z.z=A.z.z;
return(T);
}
/**************************************************************************/
Vector Mtransform(Matrix R, Vector u)
{
Vector v;
v.x=dot_product(R.x,u);
v.y=dot_product(R.y,u);
v.z=dot_product(R.z,u);
return(v);
}
/**************************************************************************/
double SDLP(Vector line, Vector v)
{
if (Vmag(v)==0.0) return(10e10);
return(Vmag(v)*sin(VangleV(line,v)));
}
/**************************************************************************/
Vector average_direction(int n, Vector v[])
{
int i;
Vector u;
Vector vo;
u=Vequal(0,0,0);
for(i=0;i= 0) return(PI/2);
else return(PI+PI/2);
}
else
{
phi=atan(v.y/v.x);
if((v.x<0.0)&&(v.y>=0.0)) phi+=PI;
if((v.x<0.0)&&(v.y<0.0)) phi-=PI;
}
return(phi);
}
/**************************************************************************/
Vector Rotate_About_X(Vector u, double angle)
{
Vector v;
v.x=u.x;
v.y=u.y*cos(angle)-u.z*sin(angle);
v.z=u.z*cos(angle)+u.y*sin(angle);
return(v);
}
/**************************************************************************/
Vector Rotate_About_Y(Vector u, double angle)
{
Vector v;
v.x=u.x*cos(angle)+u.z*sin(angle);
v.y=u.y;
v.z=u.z*cos(angle)-u.x*sin(angle);
return(v);
}
/**************************************************************************/
Vector Rotate_About_Z(Vector u, double angle)
{
Vector v;
v.x=u.x*cos(angle)-u.y*sin(angle);
v.y=u.y*cos(angle)+u.x*sin(angle);
v.z=u.z;
return(v);
}
/**************************************************************************/
void Rotate_Indices_Right(Vector *v)
{
Vector u;
u.x=v->z;
u.y=v->x;
u.z=v->y;
*v=VequalV(u);
}
/**************************************************************************/
void Rotate_Indices_Left(Vector *v)
{
Vector u;
u.x=v->y;
u.y=v->z;
u.z=v->x;
*v=VequalV(u);
}
/**************************************************************************/
double seperate(struct vector A, struct vector B)
{
double xsq, ysq, zsq;
xsq=(A.x-B.x)*(A.x-B.x);
ysq=(A.y-B.y)*(A.y-B.y);
zsq=(A.z-B.z)*(A.z-B.z);
return(msqrt(xsq+ysq+zsq,"seperate"));
}
/**************************************************************************/
Vector Vwrap(struct vector v, struct vector lo, struct vector hi)
{
int suc;
do
{
suc=0;
if (v.xhi.x) { v.x-=hi.x-lo.x; suc++; }
if (v.y>hi.y) { v.y-=hi.y-lo.y; suc++; }
if (v.z>hi.z) { v.z-=hi.z-lo.z; suc++; }
} while(suc);
return(v);
}
/**************************************************************************/
Vector *Reciprocal_Vector(Vector *V)
{
if(!AlmostZero(V->x)) V->x=1.0/V->x;
if(!AlmostZero(V->y)) V->x=1.0/V->y;
if(!AlmostZero(V->z)) V->x=1.0/V->z;
return(V);
}
/**************************************************************************/
Matrix *Reciprocal_Matrix(Matrix *M)
{
Reciprocal_Vector(&M->x);
Reciprocal_Vector(&M->y);
Reciprocal_Vector(&M->z);
return(M);
}
/**************************************************************************/
|