📄 util.c
字号:
/*****************************************************************************
* The following functions are provided to support 3D vector operations *
* in the (x, y, z) Cartesian system. All vectors are of length of 3, and *
* store the x, y, and z coordinates. *
* *
* Authors: Dr. Mohammad W. Ali, Yun Ji, Dr. Todd. H. Hubing *
* Version: 1.1 *
* Last updated: Dec 16, 1998 *
*****************************************************************************/
/* prototype definition */
void VTXadd(double *, double *, double *);
void VTXadd2(double *, double *, double *, double *);
void VTXcross(double *,double *,double *);
void VTXcross1(int, int, double [][3], double *);
double VTXdot(double *, double *);
double VTXmag(double *, double *);
void VTXsub(double *, double *, double *);
void VTXsub1(int ,int ,double [][3], double *);
/****************************************************************************
Prototype: void VTXadd(double *Buff1, double *Buff2, double *Buff)
Description: To add vector Buff1 and Buff2, put result to vector Buff
Input value:
double *Buff1, *Buff2, *Buff --- three vectors.
Return value: none
*****************************************************************************/
void VTXadd(double *Buff1, double *Buff2, double *Buff)
{
int Count_j;
for(Count_j=0;Count_j<=2;Count_j++)
Buff[Count_j] = Buff1[Count_j]+Buff2[Count_j];
}
/*****************************************************************************
Prototype: void VTXadd2(double *Buff1, double *Buff2, double *Buff3,
double *Buff )
Description: To add vector Buff1,Buff2 and Buff3, put result to vector Buff.
Input value:
double *Buff1, *Buff2, *Buff3, *Buff ---- four vectors
Return value: none
*****************************************************************************/
void VTXadd2(double *Buff1, double *Buff2, double *Buff3, double *Buff)
{
int Count_j;
for(Count_j=0;Count_j<=2;Count_j++)
Buff[Count_j] = Buff1[Count_j]+Buff2[Count_j]+Buff3[Count_j];
}
/******************************************************************************
Prototype: void VTXcross(double *Buff1, double *Buff2, double *Buff)
Description: To get the cross product of vector Buff1 and Buff2, store the
results in vector Buff. If Buff1=(x1, y1, z1), Buff2=(x2, y2, z2),
Buff= (y1z2-y2z1, z1x2-z2x1, x1y2-x2y1)
Input value:
double *Buff1, *Buff2, *Buff ---three vectors
Return value: none
******************************************************************************/
void VTXcross(double *Buff1, double *Buff2, double *Buff)
{
Buff[0] = Buff1[1]*Buff2[2] - Buff2[1]*Buff1[2];
Buff[1] = Buff1[2]*Buff2[0] - Buff2[2]*Buff1[0];
Buff[2] = Buff1[0]*Buff2[1] - Buff2[0]*Buff1[1];
}
/*****************************************************************************
Prototype: void VTXcross1(int j, int k, double Buff[][3], double *Buff1)
Description: To get the cross product of two vectors Buff[j] and Buff[k],
store the results in Buff1.
Input value:
int j, k --- row index of the two vectors
double **Buff --- a vector array. Buff[i] & Buff[j] are two vectors
double *Buff1 --- where to store the results.
Return value: none
*****************************************************************************/
void VTXcross1(int Count_j, int Count_k, double Buff[][3], double *Buff1)
{
Buff1[0]=Buff[Count_j][1]*Buff[Count_k][2]-Buff[Count_k][1]*Buff[Count_j][2];
Buff1[1]=Buff[Count_j][2]*Buff[Count_k][0]-Buff[Count_k][2]*Buff[Count_j][0];
Buff1[2]=Buff[Count_j][0]*Buff[Count_k][1]-Buff[Count_k][0]*Buff[Count_j][1];
}
/*****************************************************************************
Prototype: double VTXdot( double *Buff1, double *Buff2)
Description: To get the dot product of two vectors Buff1 and Buff2.
Input value: double *Buff1, * Buff2 --- two vectors
Return value: If Buff1=(x1,y1, z1), Buff2=(x2, y2, z2),
return (x1x2+y1y2+z1z2)
*****************************************************************************/
double VTXdot(double *Buff1, double *Buff2)
{
double Value;
Value = Buff1[0]*Buff2[0] + Buff1[1]*Buff2[1] + Buff1[2]*Buff2[2];
return Value;
}
/*****************************************************************************
Prototype: double VTXmag(double *Buff1, double *Buff2)
Description: To return the Euclid distance between two vectors.
Input value:
double *Buff1, *Buff2 --- two vectors
Return value: If Buff1=(x1,y1, z1), Buff2=(x2, y2, z2),
return sqrt( (x1-x2)^2+(y1-y2)^2+(z1-z2)^2 ). *****************************************************************************/
double VTXmag(double *Buff1, double *Buff2)
{
double Value,ValueX,ValueY,ValueZ;
ValueX = Buff1[0] - Buff2[0];
ValueY = Buff1[1] - Buff2[1];
ValueZ = Buff1[2] - Buff2[2];
Value = sqrt(ValueX*ValueX + ValueY*ValueY + ValueZ*ValueZ);
return Value;
}
/*****************************************************************************
Prototype: void VTXsub( double *Buff1, double *Buff2, double *Buff)
Description: To subtract vector Buff2 from vector Buff1, put
the results in vector Buff
Input value:
double *Buff, *Buff1, *Buff2 --- three vectors.
Return value: none
*****************************************************************************/
void VTXsub(double *Buff1, double *Buff2, double *Buff)
{
int Count_j;
for(Count_j=0;Count_j<=2;Count_j++)
Buff[Count_j] = Buff1[Count_j]-Buff2[Count_j];
}
/*****************************************************************************
Prototype: void VTXsub1(int row_i, int row_k, double Buff[ ][3],
double *Buff1)
Description: To subtract row_k from row_i in vector array Buff[][3],
store result in Buff1
Input value:
int row_i, row_k --- row number
double *Buff[3] --- a vector array, each element is a vector.
double *Buff1 --- where to store the results
Return value: none
*****************************************************************************/
void VTXsub1(int Count_i,int Count_k,double Buff[][3],double *Buff1)
{
int Count_j;
for(Count_j=0;Count_j<=2;Count_j++)
Buff1[Count_j] = Buff[Count_i][Count_j]-Buff[Count_k][Count_j];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -