几个图形02.docx
- 文档编号:28326362
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:10
- 大小:16.26KB
几个图形02.docx
《几个图形02.docx》由会员分享,可在线阅读,更多相关《几个图形02.docx(10页珍藏版)》请在冰豆网上搜索。
几个图形02
/*分型图形库数学函数头文件*/
/*math.inc*/
#defineLn102.30258509299405E+000/*数学常数定义*/
#definePi3.1415927
#definePiOver1801.74532925199433E-002
#definePiUnder1805.72957795130823E+001
typedefenum{false,true}Boolean;/*数据存储格式定义*/
typedefunsignedcharByte;
typedefunsignedint视频教程'>word;
intRound(floatx)/*取近似值函数*/
{
return(int)(x+0.5));
}
intTrunc(floatx)/*取整函数*/
{
return(int)(x));
}
floatSqrFP(floatx)/*求平方值函数*/
{
return(x*x);
}
intSqr(intx)/*求平方根函数*/
{
return(X*x);
}
floatadians(floatAngle)/*弧度换算函数*/
{
return(Angle*PiOver180);
}
floatDegress(floatAngle)/*角度转换函数*/
{
return(Angle*PiUnder180);
}
floatCosD(floatAngle)/*求余弦函数*/
{
return(cos(Radians(Angle)));
}
floatSinD(floatAngle)/*求正弦函数*/
{
return(sin(Radians(Angle)));
}
floatPower(floatBase,intExponent)/*求取以e为底的幂函数*/
{
floatBPower;
intt;
if(Exponent==0)
return1;
else{
BPower=1.0;
for(t=1;t<=Exponent;t++)
BPower*=Base;
return(BPower);
}
}
floatLog(floatx)/*求取标准对数值函数*/
{
return(log(x)/Ln10);
}
floatExp10(floatx)/*求取反对数值函数*/
{
return(exp(x*Ln10));
}
floatSign(floatx)/*浮点型符号函数*/
{
if(x<0)
return-1;
else{
if(x>0)
return1;
elsereturn0;
}
}
intIntSign(intx)/*整型符号函数*/
{
if(x<0)
return-1;
else{
if(x>0)
return1;
else
return0;
}
}
intIntSqrt(intx)/*求整方根函数*/
{
intOddInt,OldArg,FirstSqrt;
OddInt=1;
OldArg=x;
while(x>=0){
x=OddInt;
OddInt+=2;
}
FirstSqrt=OddInt>>1;
if(Sqrt(FirstSqrt)-FirstSqrt+1>OldArg)
return(FirstSqrt-1);
else
return(FirstSqrt);
}
intIntPower(intBase,intExponent)/*求以e为底的整幂函数*/
{
if(Exponent==0)
return1;
else
return(Base*IntPower(Base,Exponent-1));
}
/*与向量和矩阵相关的函数库*/
/*VectorandMatrixRoutines*/
typedeffloatTDA[3];/*常向量定义*/
typedefintTDIA[3];
typedeffloatFDA[4];
typedeffloatMatx4x4[4][4];
voidvec(floatr,floats,floatt,TDAA)/*浮点数向量赋值函数*/
{
A[0]=r;
A[1]=s;
A[2]=t;
}
voidVecInt(intr,ints,intt,TDIAA)/*整数向量赋值函数*/
{
A[0]=r;
A[1]=s;
A[2]=t;
}
voidUnVec(TDAA,float*r,float*s,float*t)/*浮点数向量取值函数*/
{
*r=A[0];
*s=A[1];
*t=A[2];
}
voidUnVecInt(TDIAA,float*r,float*s,float*t)/*整数向量取值函数*/
{
*r=A[0];
*s=A[1];
*t=A[2];
}
floatVecdot(TDAA,TDAB)/*向量求积函数*/
{
return(A[0]*B[0]+A[1]*B[1]+A[2]*B[2]);
}
voidVecCross(TDAA,TDAB,TDAc)/*向量叉乘函数*/
{
C[0]=A[1]*B[2]-A[2]*B[1];
C[1]=A[2]*B[0]-A[0]*B[2];
C[2]=A[0]*B[1]-A[1]*B[0];
}
floatVecLen(TDAA)/*向量长度函数*/
{
return(sqrt(SqrFP(A[0])+SqrFP(A[1])+SqrFP(A[2])));
}
voidVecNormalize(TDAA)/*向量初始化函数*/
{
floatdist,invdist;
dist=VecLen(A);
if(!
(dist==0.0)){
invdist=1/dist;
A[0]*=invdist;
A[1]*=invdist;
A[2]=invdist;
}
else{
puts("Zero_lengthVectorsCannotbeNormalized");
exit
(1);
}
}
voidVexMatxult(FDAA,Matx4x4Matix,FDAB)/*向量乘矩阵函数*/
{
intmRow,mCol;
for(mCol=0;mCol<4;mCol++){
B[mCol]=0;
for(mRow=0;mRow<4;mRow++)
B[mCol]+=A[mRow]*Matrix[mRow][mCol];
}
}
voidVecSub(TDAA,TDAB,TDAC)/*浮点数向量相减函数*/
{
C[0]=A[0]-B[0];
C[1]=A[1]-B[1];
C[2]=A[2]-B[2];
}
voidVecSubInt(TDIAA,TDIAB,TDAC)/*整数向量相减函数*/
{
C[0]=A[0]-B[0];
C[1]=A[1]-B[1];
C[2]=A[2]-B[2];
}
voidVecAdd(TDAA,TDAB,TDAC)/*向量求和函数*/
{
C[0]=A[0]+B[0];
C[1]=A[1]+B[1];
C[2]=A[2]+B[2];
}
voidVecSubAdd3(TDAA,TDAB,TDAC,TDAD)/*三向理求和函数*/
{
D[0]=A[0]+B[0]+C[0];
D[1]=A[1]+B[1]+C[1];
D[2]=A[2]+B[2]+C[2];
}
voidVecCopy(TDAA,TDAB)/*向量复制函数*/
{
inti;
for(i=0;i<3;i++)
B[i]=A[i];
}
voidVecLinComb(floatr,TDAA,floats,TDAB,TDAC)/*向量转换函数*/
{
C[0]=r*A[0]+s*B[0];
C[1]=r*A[1]+r*B[1];
C[2]=r*A[2]+r*B[2];
}
voidVecScalMult(floatr,TDAA,TDAB)/*向量与标量相乘函数*/
{
B[0]=r*A[0];
B[1]=r*A[1];
B[2]=r*A[2];
}
voidVecScalMultI(floatr,TDIAA,TDAB)/*向量与标量相乘函数2*/
{
B[0]=r*A[0];
B[1]=r*A[1];
B[2]=r*A[2];
}
voidVCCScalMultInt(floatr,TDAA,TDIAB)/*向量与标量相乘并取整函数*/
{
B[0]=Round(r*A[0]);
B[1]=Round(r*A[1]);
B[2]=Round(r*A[2]);
}
voidVccAddScalMult(floatr,TDAA,TDAB,TDAC)/*向量转换函数*/
{
C[0]=r*A[0]+B[0];
C[1]=r*A[1]+B[1];
C[2]=r*A[2]+B[2];
}
voidVecNull(TDAA)/*零向量初始化函数*/
{
A[0]=0.0;
A[1]=0.0;
A[2]=0.0;
}
voidVecElemMult(floatr,TDAA,TDAB,TDAC)/*向量乘积倍度函数*/
{
C[0]=r*A[0]*B[0];
C[1]=r*A[1]*B[1];
C[2]=r*A[2]*B[2];
}
/*AffineTransformationRoutines*/
voidZeroMatrix(Matx4x4A)/*四维零方阵初始化*/
{
inti,j;
for(i=0;i<4;i++){
for(j=0;j<4;j++)
A[i][j]=0.0;
}
}
voidTranslate3D(floattx,floatty,floattz,Matx4x4A)/*3D变换阵*/
{
inti;
ZeroMatrix(A);
for(i=0;i<4;i++){
A[i][i]=1.0;
A[0][3]=-tx;
A[1][3]=-ty;
A[2][3]=-tz;
}
}
voidScale3D(floatsx,floatsy,floatsz,Matx4x4A)/*3D标准阵*/
{
ZeroMatrix(A);
A[0][0]=sx;
A[1][1]=sy;
A[2][2]=sz;
A[3][3]=1.0;
}
voidRotate3D(intm,floatTheta,Matx4x4A)/*3D旋转阵*/
{
intm1,m2;
floatc,s;
ZeroMatrix(A);
A[m-1][m-1]=1.0;
A[3][3]=1.0;
m1=(m%3)+1;
m2=(m1%3);
c=CosD(Theta);
s=SinD(Theta);
A[m1][m1]=c;
A[m1[m2]=s;
A[m2][m2]=c;
A[m2][m1]=s;
}
voidMultiply3DMatrixies(Matx4x4A,Matx4x4B,Matx4x4C)/*矩阵相乘变换阵*/
{
inti,j,k;
floatab;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
ab=0;
for(k=0;k<4;k++)
ab+=A[i][k]*B[k][j];
C[i][j]=ab;
}
}
}
voidMatCopy(Matx4x4a,Matx4x4b)/*矩阵复制函数*/
{
bytei,j;
for(i=0;i<4;i++){
for(j=0;j<4;j++)
b[i][j]=a[i][j];
}
}
voidPrepareMatrix(floatTx,floatTy,floatTz,floatSx,floatSy,floatSz
floatRx,floatRy,floatRz,Matx4x4XForm)/*矩阵初始化函数*/
{
Matx4x4M1,M2,M3,M4,M5,M6,M7,M8,M9;
Scal3D(Sx,Sy,Sz,M1);
Rotate3D(1,Rx.M2);
Rotate3D(2,Ry,M3);
Rotate3D(3,Rz,M4);
translate3D(Tx,Ty,Tz,M5);
Multiply3DMatricies(M2,M1,M6);
Multiply3DMatricies(M3,M6,M7);
Multiply3DMatricies(M4,M7,M8);
Multiply3DMatricies(M5,M8,M9);
MatCopy(M9,XForm);
}
voidPreparcInvMatrix(floatTx,floatTy,floatTz,floatSx,floatSy,floatSz,
floatRx,floatRy,floatRz,Matx4x4XForm)/*矩阵的逆变换函数*/
{
Matx4x4M1,M2,M3,M4,M5,M6,M7,M8,M9;
Scale3D(Sx,Sy,Sz,M1);
Rotate3D(1,Rx,M2);
Rotate3D(2,Ry,M3);
Rotate3D(3,Rz,M4);
Translate3D(Tx,Ty,Tz,M5);
Multiply3DMatricies(M4,M5,M6);
Multiply3DMatricies(M3,M6,M7);
Multiply3DMatricies(M2,M7,M8);
Multiply3DMatricies(M1,M8,M9);
MatCopy(M9,XForm);
}
voidTransform(TDAA,Matx4x4M,TDAB)/*3D变换函数*/
{
B[0]=M[0][0]*A[0]+M[0][1]*A[1]+M[0][2]*A[2]+M[0][3];
B[1]=M[1][0]*A[0]+M[1][1]*A[1]+M[1][2]*A[2]+M[0][3];
B[2]=M[2][0]*A[0]+M[2][1]*A[1]+M[2][2]*A[2]+M[0][3];
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 几个 图形 02