[英]Best way to deal with vector3d (x,y,z) operation in c
我正在启动一个项目,我需要在向量之间进行操作。 这是一个学校项目,所以我需要自己做所有事情。 我有这种结构。
typedef struct s_vector
{
float x;
float y;
float z;
} t_vector;
现在,我希望能够以简单的方式在此t_vector之间进行操作。 我的第一个(也是唯一一个)想法是处理这样的功能:
t_vector *addv(t_vector *a, t_vector *b); // do a += b.
当然,我的必杀技是c ++中的一种“重载运算符”,但是我知道这在c中不存在。
那么对您来说,用c处理这种操作的最佳方法是什么?
与C ++不同,C完全是关于透明度的。 您总是知道发生了什么事。 因此,不支持操作员重做错误的事情,并且这种代码不受欢迎。 因此,您将必须创建一个命名函数来执行所需的操作。
但是,在C ++中,您可能会使add运算符采用常量对象。 您可能也应该在C中执行此操作。
因此,我建议:
t_vector t_vector_add(const t_vector *a, const t_vector *b);
通常,我将按如下方式转换C ++样式的类运算符:
// C++
class Vector {
public:
Vector functionA(SomeType argument);
Vector functionB(Vector argument)const;
const Vector functionC(const Vector argument);
};
// C
t_vector *t_vector_functionA(t_vector *this, SomeType *argument);
t_vector *t_vector_functionB(const t_vector *this, t_vector *argument);
const t_vector *t_vector_functionC(t_vector *this, const t_vector argument);
当然,如果不需要this指针,也不需要它,则可以使用任何喜欢的命名方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.