[英]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.