簡體   English   中英

處理C語言中vector3d(x,y,z)運算的最佳方法

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM