Packed Record TGenericVector4

Unit

Declaration

type TGenericVector4 = packed record

Description

Vector of 4 floating-point values.

See also
TGenericVector3
Vector of 3 floating-point values.

Overview

Nested Types

Public TIndex = 0..Count - 1;

Fields

Public nested const Count = 4;
Public var X: TGenericScalar;
Public var Y: TGenericScalar;
Public var Z: TGenericScalar;
Public var W: TGenericScalar;

Methods

Public class operator + (const A, B: TGenericVector4): TGenericVector4; inline;
Public class operator - (const A, B: TGenericVector4): TGenericVector4; inline;
Public class operator - (const V: TGenericVector4): TGenericVector4; inline;
Public class operator * (const V: TGenericVector4; const Scalar: TGenericScalar): TGenericVector4; inline;
Public class operator * (const Scalar: TGenericScalar; const V: TGenericVector4): TGenericVector4; inline;
Public class operator * (const V1, V2: TGenericVector4): TGenericVector4; inline;
Public class operator / (const V: TGenericVector4; const Scalar: TGenericScalar): TGenericVector4; inline;
Public procedure Init(const AX, AY, AZ, AW: TGenericScalar); inline; deprecated 'initialize instead like "V := Vector4(X, Y, Z, W)"; modifying a temporary record value is a trap, e.g. this is not reliable: "Scene.Rotation.Init(X, Y, Z, W)"';
Public function ToString: string;
Public function ToRawString: string;
Public function Length: TGenericScalar; inline;
Public function LengthSqr: TGenericScalar; inline;
Public function AdjustToLength(const NewLength: TGenericScalar): TGenericVector4; inline;
Public class function DotProduct(const V1, V2: TGenericVector4): TGenericScalar; static; inline;
Public function Abs: TGenericVector4; inline;
Public function IsZero: boolean; overload; inline;
Public function IsZero(const Epsilon: TGenericScalar): boolean; overload; inline;
Public function IsPerfectlyZero: boolean; inline;
Public class function Equals(const V1, V2: TGenericVector4): boolean; overload; inline; static;
Public class function Equals(const V1, V2: TGenericVector4; const Epsilon: TGenericScalar): boolean; overload; inline; static;
Public class function PerfectlyEquals(const V1, V2: TGenericVector4): boolean; static; inline;
Public function ToPosition: TGenericVector3; inline;
Public class function Lerp(const A: TGenericScalar; const V1, V2: TGenericVector4): TGenericVector4; static; inline;
Public class function Zero: TGenericVector4; static; inline;

Properties

Public property Data [constIndex:TIndex]: TGenericScalar read GetItems write SetItems; deprecated 'use instead X, Y, Z, W fields; modifying a temporary record value is a trap, e.g. this is not reliable: "Scene.Rotation.Data[0] := Scene.Rotation.Data[0] + 1"';
Public property AsArray [constIndex:TIndex]: TGenericScalar read GetItems;
Public property Items [constIndex:TIndex]: TGenericScalar read GetItems write SetItems; deprecated 'use instead X, Y, Z, W fields; modifying a temporary record value is a trap, e.g. this is not reliable "Scene.Rotation[0] := Scene.Rotation[0] + 1"';
Public property XYZ: TGenericVector3 read GetXYZ ;
Public property XY: TGenericVector2 read GetXY ;
Public class property One [constIndex:TIndex]: TGenericVector4 read GetOne;

Description

Nested Types

Public TIndex = 0..Count - 1;
 

Fields

Public nested const Count = 4;
 
Public var X: TGenericScalar;

procedure SetXYZ(const AValue: TGenericVector3); {$ifdef INLINE_GENERIC_VECTORS}inline;{$endif} procedure SetXY(const AValue: TGenericVector2); {$ifdef INLINE_GENERIC_VECTORS}inline;{$endif}

Public var Y: TGenericScalar;

procedure SetXYZ(const AValue: TGenericVector3); {$ifdef INLINE_GENERIC_VECTORS}inline;{$endif} procedure SetXY(const AValue: TGenericVector2); {$ifdef INLINE_GENERIC_VECTORS}inline;{$endif}

Public var Z: TGenericScalar;

procedure SetXYZ(const AValue: TGenericVector3); {$ifdef INLINE_GENERIC_VECTORS}inline;{$endif} procedure SetXY(const AValue: TGenericVector2); {$ifdef INLINE_GENERIC_VECTORS}inline;{$endif}

Public var W: TGenericScalar;

procedure SetXYZ(const AValue: TGenericVector3); {$ifdef INLINE_GENERIC_VECTORS}inline;{$endif} procedure SetXY(const AValue: TGenericVector2); {$ifdef INLINE_GENERIC_VECTORS}inline;{$endif}

Methods

Public class operator + (const A, B: TGenericVector4): TGenericVector4; inline;
 
Public class operator - (const A, B: TGenericVector4): TGenericVector4; inline;
 
Public class operator - (const V: TGenericVector4): TGenericVector4; inline;
 
Public class operator * (const V: TGenericVector4; const Scalar: TGenericScalar): TGenericVector4; inline;
 
Public class operator * (const Scalar: TGenericScalar; const V: TGenericVector4): TGenericVector4; inline;
 
Public class operator * (const V1, V2: TGenericVector4): TGenericVector4; inline;

Vector * vector makes a component-wise multiplication. This is consistent with GLSL and other vector APIs.

Public class operator / (const V: TGenericVector4; const Scalar: TGenericScalar): TGenericVector4; inline;
 
Public procedure Init(const AX, AY, AZ, AW: TGenericScalar); inline; deprecated 'initialize instead like "V := Vector4(X, Y, Z, W)"; modifying a temporary record value is a trap, e.g. this is not reliable: "Scene.Rotation.Init(X, Y, Z, W)"';

Warning: this symbol is deprecated: initialize instead like "V := Vector4(X, Y, Z, W)"; modifying a temporary record value is a trap, e.g. this is not reliable: "Scene.Rotation.Init(X, Y, Z, W)"

 
Public function ToString: string;
 
Public function ToRawString: string;

Convert to string using the most precise (not always easily readable by humans) float format. This may use the exponential (scientific) notation to represent the floating-point value, if needed.

This is suitable for storing the value in a file, with a best precision possible.

Public function Length: TGenericScalar; inline;
 
Public function LengthSqr: TGenericScalar; inline;

Vector length squared. This is slightly faster than Length as it avoids calculating a square root along the way. (But, please remember to not optimize your code without a need. Optimize only parts that are proven bottlenecks, otherwise don't make the code less readable for the sake of speed.)

Public function AdjustToLength(const NewLength: TGenericScalar): TGenericVector4; inline;

Calculate a new vector scaled so that it has length equal to NewLength. NewLength may be negative, in which case we'll negate the vector and then adjust it's length to Abs(NewLength).

Public class function DotProduct(const V1, V2: TGenericVector4): TGenericScalar; static; inline;

Dot product of two vectors. See https://en.wikipedia.org/wiki/Dot_product .

Public function Abs: TGenericVector4; inline;

Absolute value on all components.

Public function IsZero: boolean; overload; inline;

Are all components equal to zero (within some epsilon margin).

Public function IsZero(const Epsilon: TGenericScalar): boolean; overload; inline;

Are all components equal to zero (within Epsilon margin).

Public function IsPerfectlyZero: boolean; inline;
 
Public class function Equals(const V1, V2: TGenericVector4): boolean; overload; inline; static;

Compare two vectors, with epsilon to tolerate slightly different floats.

Public class function Equals(const V1, V2: TGenericVector4; const Epsilon: TGenericScalar): boolean; overload; inline; static;
 
Public class function PerfectlyEquals(const V1, V2: TGenericVector4): boolean; static; inline;

Compare two vectors using exact comparison (like the "=" operator to compare floats).

Public function ToPosition: TGenericVector3; inline;

Convert a 4D homogeneous coordinate to 3D position.

Public class function Lerp(const A: TGenericScalar; const V1, V2: TGenericVector4): TGenericVector4; static; inline;

Linear interpolation between two vector values. Works analogous to TVector3.Lerp

Public class function Zero: TGenericVector4; static; inline;
 

Properties

Public property Data [constIndex:TIndex]: TGenericScalar read GetItems write SetItems; deprecated 'use instead X, Y, Z, W fields; modifying a temporary record value is a trap, e.g. this is not reliable: "Scene.Rotation.Data[0] := Scene.Rotation.Data[0] + 1"';

Warning: this symbol is deprecated: use instead X, Y, Z, W fields; modifying a temporary record value is a trap, e.g. this is not reliable: "Scene.Rotation.Data[0] := Scene.Rotation.Data[0] + 1"

Access (get, set) vector components by index. We discourage using it. Use X, Y, Z, W to change vector components. Use AsArray to access it by index, read-only.

Public property AsArray [constIndex:TIndex]: TGenericScalar read GetItems;

Get vector components by index.

Public property Items [constIndex:TIndex]: TGenericScalar read GetItems write SetItems; deprecated 'use instead X, Y, Z, W fields; modifying a temporary record value is a trap, e.g. this is not reliable "Scene.Rotation[0] := Scene.Rotation[0] + 1"';

Warning: this symbol is deprecated: use instead X, Y, Z, W fields; modifying a temporary record value is a trap, e.g. this is not reliable "Scene.Rotation[0] := Scene.Rotation[0] + 1"

 
Public property XYZ: TGenericVector3 read GetXYZ ;

Get first 3 components as a 3D vector. This simply rejects the 4th component.

Public property XY: TGenericVector2 read GetXY ;

Get first 2 components as a 2D vector. This simply rejects the remaining vector components.

Public class property One [constIndex:TIndex]: TGenericVector4 read GetOne;
 

Generated by PasDoc 0.16.0.