📄 oxnewtonutils.pas
字号:
procedure oxVAroundY( var v: TOXVector3; alpha: Float );
var
c, s, v0: Float;
begin
SinCos( alpha, s, c );
v0:= v[0];
v[0]:= c * v0 + s * v[2];
v[2]:= c * v[2] -s * v0;
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
function oxVNegate(const v : TOXVector3) : TOXVector3;
begin
Result[0]:= -v[0];
Result[1]:= -v[1];
Result[2]:= -v[2];
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
function oxVCrossProduct( const v1, v2 : TOXVector4 ) : TOXVector4; overload;
begin
Result[0]:= v1[1] * v2[2] -v1[2] * v2[1];
Result[1]:= v1[2] * v2[0] -v1[0] * v2[2];
Result[2]:= v1[0] * v2[1] -v1[1] * v2[0];
Result[3]:=0;
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
function oxVCrossProduct( const v1, v2 : TOXVector3 ) : TOXVector3; overload;
begin
Result[0]:= v1[1] * v2[2] -v1[2] * v2[1];
Result[1]:= v1[2] * v2[0] -v1[0] * v2[2];
Result[2]:= v1[0] * v2[1] -v1[1] * v2[0];
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
procedure oxVCrossProduct( const v1, v2 : TOXVector3; var vr : TOXVector3 ); overload;
begin
vr[0]:=v1[1]*v2[2]-v1[2]*v2[1];
vr[1]:=v1[2]*v2[0]-v1[0]*v2[2];
vr[2]:=v1[0]*v2[1]-v1[1]*v2[0];
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
function oxVDotProduct( const V1, V2 : TOXVector3 ) : Float; overload;
begin
Result:= V1[0]*V2[0]+V1[1]*V2[1]+V1[2]*V2[2];
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
function oxVDotProduct( const V1, V2 : TOXVector4 ) : Float; overload;
begin
Result:= V1[0]*V2[0]+V1[1]*V2[1]+V1[2]*V2[2]+V1[3]*V2[3];
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
procedure oxSetM( var dest: TOXMatrix; const src : TOXMatrix );
var
i : Integer;
begin
for i:= xX to xW do begin
dest[i, xX]:=src[i, xX];
dest[i, xY]:=src[i, xY];
dest[i, xZ]:=src[i, xZ];
dest[i, xW]:=src[i, xW];
end;
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
procedure oxTranslateM( var M : TOXMatrix; const v : TOXVector3 ); overload;
begin
M[3][0]:=M[3][0]+v[0];
M[3][1]:=M[3][1]+v[1];
M[3][2]:=M[3][2]+v[2];
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
procedure oxTranslateM( var M : TOXMatrix; const v : TOXVector4 ); overload;
begin
M[3][0]:=M[3][0]+v[0];
M[3][1]:=M[3][1]+v[1];
M[3][2]:=M[3][2]+v[2];
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
function oxV4FToV4D( const fVec: TVector ): TOXVector4;
begin
result[0]:= fVec[0];
result[1]:= fVec[1];
result[2]:= fVec[2];
result[3]:= fVec[3];
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
function oxV4DToV4F( const dVec: TOXVector4 ): TVector;
begin
result[0]:= dVec[0];
result[1]:= dVec[1];
result[2]:= dVec[2];
result[3]:= dVec[3];
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
function oxV3FToV3D( const fVec: TVector3f ): TOXVector3;
begin
result[0]:= fVec[0];
result[1]:= fVec[1];
result[2]:= fVec[2];
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
function oxV3DToV3F( const dVec: TOXVector3 ): TVector3f;
begin
result[0]:= dVec[0];
result[1]:= dVec[1];
result[2]:= dVec[2];
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
procedure oxScaleV( var v : TOXVector3; factor : Float ); overload;
begin
v[0]:=v[0]*factor;
v[1]:=v[1]*factor;
v[2]:=v[2]*factor;
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
procedure oxScaleV( var v : TOXVector3; const factor : TOXVector3 ); overload;
begin
v[0]:=v[0]*factor[0];
v[1]:=v[1]*factor[1];
v[2]:=v[2]*factor[2];
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
procedure oxNormalizeV( var v : TOXVector3 ); overload;
var
invLen: Float;
begin
invLen:=RSqrt(oxVNorm(v));
v[0]:=v[0]*invLen;
v[1]:=v[1]*invLen;
v[2]:=v[2]*invLen;
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
procedure oxNormalizeV( var v : TOXVector4 ); overload;
var
invLen: Float;
begin
invLen:=RSqrt(oxVNorm(v));
v[0]:=v[0]*invLen;
v[1]:=v[1]*invLen;
v[2]:=v[2]*invLen;
v[3]:=0;
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
procedure oxNormalizeM( var M : TOXMatrix );
begin
M[0][3]:=0; oxNormalizeV(M[0]);
M[1][3]:=0; oxNormalizeV(M[1]);
M[2]:=oxVCrossProduct(M[0], M[1]);
M[0]:=oxVCrossProduct(M[1], M[2]);
M[3]:=WHmgVector;
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
procedure oxScaleV( var v : TOXVector4; factor : Float ); overload;
begin
v[0]:=v[0]*factor;
v[1]:=v[1]*factor;
v[2]:=v[2]*factor;
v[3]:=v[3]*factor;
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
function oxVIsNull( const v : TOXVector4 ) : Boolean; overload;
begin
Result:= ((v[0]=0) and (v[1]=0) and (v[2]=0));
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
function oxVIsNull( const v : TOXVector3 ) : Boolean; overload;
begin
Result:=((v[0]=0) and (v[1]=0) and (v[2]=0));
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
procedure oxScaleV( var v : TOXVector4; const factor : TOXVector4 ); overload;
begin
v[0]:=v[0]*factor[0];
v[1]:=v[1]*factor[1];
v[2]:=v[2]*factor[2];
v[3]:=v[3]*factor[3];
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
function oxMFToMD( const fMat: TMatrix ): TOXMatrix;
var dMat: TOXMatrix;
begin
dMat[0, 0]:= fMat[0, 0];
dMat[0, 1]:= fMat[0, 1];
dMat[0, 2]:= fMat[0, 2];
dMat[0, 3]:= fMat[0, 3];
//
dMat[1, 0]:= fMat[1, 0];
dMat[1, 1]:= fMat[1, 1];
dMat[1, 2]:= fMat[1, 2];
dMat[1, 3]:= fMat[1, 3];
//
dMat[2, 0]:= fMat[2, 0];
dMat[2, 1]:= fMat[2, 1];
dMat[2, 2]:= fMat[2, 2];
dMat[2, 3]:= fMat[2, 3];
//
dMat[3, 0]:= fMat[3, 0];
dMat[3, 1]:= fMat[3, 1];
dMat[3, 2]:= fMat[3, 2];
dMat[3, 3]:= fMat[3, 3];
result:= dMat;
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
function oxMDToMF( const dMat: TOXMatrix ): TMatrix;
var fMat: TMatrix;
begin
fMat[0, 0]:= dMat[0, 0];
fMat[0, 1]:= dMat[0, 1];
fMat[0, 2]:= dMat[0, 2];
fMat[0, 3]:= dMat[0, 3];
//
fMat[1, 0]:= dMat[1, 0];
fMat[1, 1]:= dMat[1, 1];
fMat[1, 2]:= dMat[1, 2];
fMat[1, 3]:= dMat[1, 3];
//
fMat[2, 0]:= dMat[2, 0];
fMat[2, 1]:= dMat[2, 1];
fMat[2, 2]:= dMat[2, 2];
fMat[2, 3]:= dMat[2, 3];
//
fMat[3, 0]:= dMat[3, 0];
fMat[3, 1]:= dMat[3, 1];
fMat[3, 2]:= dMat[3, 2];
fMat[3, 3]:= dMat[3, 3];
result:= fMat;
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
function oxVSubtract( const v1, v2 : TOXVector4 ): TOXVector4; overload;
begin
Result[0]:=v1[0]-v2[0];
Result[1]:=v1[1]-v2[1];
Result[2]:=v1[2]-v2[2];
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
function oxVSubtract( const v1, v2 : TOXVector3 ): TOXVector3; overload;
begin
Result[0]:=v1[0]-v2[0];
Result[1]:=v1[1]-v2[1];
Result[2]:=v1[2]-v2[2];
end;
{******************************************************************************}
// [15-9-2007]: Utils last change by Dave Gravel. //
{******************************************************************************}
function oxVScale( const v: TOXVector4; factor : Float ): TOXVector4; overload;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -