C语言中应该如何实现点和向量?[关闭]

问题描述 投票:0回答:1

我想在C语言中实现数学概念点和向量,使用struct。

我看到了别人的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在这个实现中是否有存在的理由。我应该如何解决呢?

c math vector tuples point
1个回答
3
投票

一种可能的方法是让 工厂功能 为每个 "类型 "元组创建具有正确值的元组结构。

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.