function RotateVector (P:TPoint3; Alfa,Beta,Gama:single):TPoint3; var Matrix: array [1..4,1..4] of single; sinAlfa,cosAlfa,sinBeta,cosBeta,sinGama,cosGama:single; begin Alfa := Alfa*pi/180; Beta := Beta*pi/180; Gama := Gama*pi/180; sinAlfa := sin(Alfa); cosAlfa:=cos(Alfa); sinBeta := sin(Beta); cosBeta:=cos(Beta); sinGama := sin(Gama); cosGama:=cos(Gama); Matrix[1,1] := cosBeta*cosGama; Matrix[1,2] := sinAlfa*sinBeta*cosGama + cosAlfa*sinGama; Matrix[1,3] := sinAlfa*sinGama - sinBeta*cosAlfa*cosGama; Matrix[2,1] := -sinGama*cosBeta; Matrix[2,2] := cosAlfa*cosGama - sinAlfa*sinBeta*sinGama; Matrix[2,3] := sinAlfa*cosGama + cosAlfa*sinBeta*sinGama; Matrix[3,1] := sinBeta; Matrix[3,2] := -sinAlfa*cosBeta; Matrix[3,3] := cosAlfa*cosBeta; Result.x := P.x*Matrix[1,1] + P.y*Matrix[1,2] + P.z*Matrix[1,3]; Result.y := P.x*Matrix[2,1] + P.y*Matrix[2,2] + P.z*Matrix[2,3]; Result.z := P.x*Matrix[3,1] + P.y*Matrix[3,2] + P.z*Matrix[3,3]; end; function TranslateVector(v1,v2:TPoint3):TPoint3; var v3:TPoint3; begin with v3 do begin x:=v1.x-v2.x; y:=v1.y-v2.y; z:=-(v1.z+v2.z); end; result:=v3; end;