我应该如何在 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);
}
我正在尝试使用 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);
}