Open Search
    Vectors

    About

    The vector classes of the MAXON API are based on these generic vector templates:

    For basic data types see Basic Data Types.

    Classes

    Two Component Vectors

    Two-component vectors contain these members:

    maxon::Float based vector classes are:

    maxon::Int based vector classes are:

    Three Component Vectors

    Three-component vectors contain these members:

    maxon::Float based vector classes are:

    maxon::Int based vector classes are:

    Four Component Vectors

    Four-component vectors contain these members:

    maxon::Float based vector classes are:

    maxon::Int based vector classes are:

    Data

    A member of a vector can be simply accessed directly or by using the "[]" operator:

    // This example creates and fills multiple maxon::Vector objects.
    vecA[0] = 1.0;
    vecA[1] = 2.0;
    vecA[2] = 3.0;
    // is the same as
    vecB.x = 1.0;
    vecB.y = 2.0;
    vecB.z = 3.0;
    T y
    Definition: vec.h:40
    T x
    Definition: vec.h:39
    T z
    Definition: vec.h:41

    The length or a vector can be calculated with:

    // This example compares the distance of two positions
    // to a reference position using GetSquaredLength().
    const maxon::Vector objectA(100, 200, 300);
    const maxon::Vector objectB(200, 300, 400);
    const maxon::Vector reference(300, 400, 500);
    const maxon::Vector distanceA = objectA - reference;
    const maxon::Vector distanceB = objectB - reference;
    if (distanceA.GetSquaredLength() < distanceB.GetSquaredLength())
    DiagnosticOutput("Object A is closer.");
    else
    DiagnosticOutput("Object B is closer.");
    #define DiagnosticOutput(formatString,...)
    Definition: debugdiagnostics.h:176
    constexpr T GetSquaredLength() const
    Returns the squared length of the vector.
    Definition: vec.h:466

    If all components of a given vector are zero, it can be checked with:

    // This example checks if the given vector is zero. If not, it is set to zero.
    maxon::IntVector2d vec(1, 2);
    if (!vec.IsZero())
    vec.SetZero();
    DiagnosticOutput("Vector: @", vec);

    The sum of all vector components is calculated with:

    // This example gets the sum and average value of all vector components.
    const maxon::Vector4d vec(1, 2, 3, 4);
    const maxon::Float sum = vec.GetSum();
    const maxon::Float avg = vec.GetAverage();
    DiagnosticOutput("Sum: @, Average: @", sum, avg);
    Float64 Float
    Definition: apibase.h:197
    A vector consisting of four components X, Y, Z and W.
    Definition: vec4.h:21

    The vector values can further be edited with:

    Further values are accessed with:

    // This example gets the minimum and maximum value stored in the given vector.
    const maxon::Float min = vec.GetMin();
    const maxon::Float max = vec.GetMax();
    DiagnosticOutput("Min: @, Max: @", min, max);
    const char Py_ssize_t const char Py_ssize_t Py_ssize_t max
    Definition: modsupport.h:59
    const char Py_ssize_t const char Py_ssize_t min
    Definition: modsupport.h:58

    A subset of the vector can be obtained with:

    // This example defines a vector and converts it to a maxon::Color.
    const maxon::Vector vector(0, 1, 0);
    const maxon::Color color = vector.GetColor();
    DiagnosticOutput("Color: @", color);

    Assignment

    A vector can be constructed and changed with the following operators:

    // This example creates and constructs a new vector using the given vectors.
    // copy
    // add
    pos += offset;
    // scale
    pos *= 3.0;
    void Py_ssize_t * pos
    Definition: dictobject.h:50

    Comparison

    Two vectors can be compared with:

    // This example checks if the given vectors are equal
    // within the range of the defined epsilon.
    const maxon::Float epsilon = 0.0001;
    if (vecA.IsEqual(vecB, epsilon))
    {
    const maxon::UInt hash = vecA.GetHashCode();
    DiagnosticOutput("Hash: @", hash);
    }
    PyObject Py_hash_t hash
    Definition: dictobject.h:35
    UInt64 UInt
    unsigned 32/64 bit int, size depends on the platform
    Definition: apibase.h:189
    BoolType IsEqual(const Vec3 &other, ValueTypeParam epsilon) const
    Tests component-wise if the difference is no bigger than 'epsilon'.
    Definition: vec.h:352
    constexpr HashInt GetHashCode() const
    Definition: vec.h:336

    Mathematical Functions

    Vector related mathematical functions are:

    • GetAngle(): Calculates the angle between the given vectors.
    • Cross(): Calculates the cross product.
    • Dot(): Calculates the dot product.
    Note
    For more complex vector operations like intersections see Geometry Utility Manual.
    // This example performs various mathematical operations on the given vectors.
    const maxon::Vector vecA(0, 1, 0);
    const maxon::Vector vecB(1, 0, 0);
    const maxon::Float angle = GetAngle(vecA, vecB);
    const maxon::Float dot = Dot(vecA, vecB);
    const maxon::Vector cross = Cross(vecA, vecB);

    Colors

    For vectors defining a color value the explicit class maxon::Color exists:

    // This example defines a vector and converts it to a maxon::Color.
    const maxon::Vector vector(0, 1, 0);
    const maxon::Color color = vector.GetColor();
    DiagnosticOutput("Color: @", color);

    Utility

    Further utility functions are:

    • maxon::ReflectRay(): Calculates the reflection vector for the given vector to the given normal.

    Color specific utility functions are:

    // This example blends the given two colors and calculates the result color brightness.
    const maxon::ColorA colorA { 1.0, 0.0, 1.0, 1.0 };
    const maxon::ColorA colorB { 0.0, 1.0, 0.0, 1.0 };
    // blend colors
    const maxon::ColorA colorBlend = maxon::BlendColor(colorA, colorB, 0.5);
    // get brightness
    const maxon::Float brightness = maxon::GetPerceivedBrightness(colorBlend);
    const maxon::Bool dark = maxon::IsColorPerceivedAsDark(colorBlend);
    DiagnosticOutput("Color @, Brightness @, Dark @", colorBlend, brightness, dark);
    bool Bool
    boolean type, possible values are only false/true, 8 bit
    Definition: apibase.h:181
    MAXON_ATTRIBUTE_FORCE_INLINE Bool IsColorPerceivedAsDark(const ColorA &color)
    Definition: vector4d.h:241
    MAXON_ATTRIBUTE_FORCE_INLINE Float GetPerceivedBrightness(const ColorA &color)
    Definition: vector4d.h:229
    MAXON_ATTRIBUTE_FORCE_INLINE COLORTYPE BlendColor(const COLORTYPE &col1, const COLORTYPE &col2, const typename COLORTYPE::ValueType blendValue)
    Definition: vector4d.h:212
    A color consisting of three components R, G, B and an alpha.
    Definition: col4.h:16

    Further Reading