我应该如何在 C 中实现点和向量?

How should I implement point and vector in C?

我正在尝试使用 struct 在 C 中实现数学概念点和向量。

我看过别人的 C++ 实现。

Tuple Point(float x, float y, float z)
{
    return {x, y, z, 1.0f};
}

Tuple Vector(float x, float y, float z)
{
    return { x, y, z, 0.0f };
}

Tuple::Tuple()
    : m_x(0.f)
    , m_y(0.f)
    , m_z(0.f)
    , m_w(0.f)
{
}

Tuple::Tuple(float x, float y, float z, float w)
    : m_x(x)
    , m_y(y)
    , m_z(z)
    , m_w(w)
{
}

我不确定我应该如何在 C 中实现它。 这就是我所做的。

typedef struct s_tuple
{
    double x;
    double y;
    double z;
    double w;
}              t_tuple;

typedef struct s_point
{
    double x;
    double y;
    double z;
    double w = 1.0;
}              t_point

typedef struct s_vector
{
    double x;
    double y;
    double z;
    double w = 0.0;
}              t_vector

我不确定我做的是否正确。我什至不确定 t_tuple 在此实现中是否出于某种原因而存在。我该如何解决?

一种可能的方法是使用 工厂函数 为每个 "type" 元组创建具有正确值的元组结构:

typedef struct s_tuple
{
    double x;
    double y;
    double z;
    double w;
}              t_tuple;

t_tuple create_tuple(double x, double y, double z, double w)
{
    t_tuple tuple = {
        x, y, z, w
    };
    return tuple;
}

t_tuple create_point(double x, double y, double z)
{
    return create_tuple(x, y, z, 1.0);
}

t_tuple create_vector(double x, double y, double z)
{
    return create_tuple(x, y, z, 0.0);
}