2011-09-21 32 views
2

在C++中,是否有Vector2類?如果有,我需要包含哪些內容才能使用它?C++中的Vector2類

我想用它來存儲二維矢量,例如粒子的位置或速度。

+1

從何時開始定位二維集合? –

+2

如果你在飛機上工作,它是。這個問題非常明顯。 – Dan

回答

5

在這裏,你去。

struct Vector2 
{ 
    float x; 
    float y; 
}; 

或者您也可以使用std::pair<float, float>

然後,您需要了解更多關於結構數組(SOA)與結構數組(AOS)以及它如何影響代碼性能的信息。

粒子系統通常會轉向SOA。

最後這裏是一個series of blog posts on AOS & SOA applied to the implementation of a particle system

編輯:有很好的數學圖書館像Eigenglm這將爲您定義這些類型以及許多有用的算法(具有性能實現)。

+0

或'struct Point2 {...}; typedef std :: vector Vector2'? –

+0

在這裏使用'std :: pair <>'不是一個好主意。 'Vector2'說的比'std :: pair <>'多得多。 – wilhelmtell

0

標題<utility>中有std::pair。不過,它不支持向量運算。

-2

你爲什麼不做一個矢量向量?

std::vector<std::vector<YourType> > yourvector; 

或者用於對一個矢量,

std::vector<std::pair<float, float> > yourvector; 
+2

不那麼整齊,有可能是你的向量[1]有一個向量,但不包含任何東西。一對總是2個值。 – RvdK

+0

是的,在第一次回答之前我沒有足夠的想法 - 編輯它:) –

-2

A 2維矢​​量:

std::vector< std::vector<type> > vec2d; 

其中類型如int,雙,類等

3

有在標準庫中不是「vector2」類。 有一個適合你需求的pair類,但是對於這個場景,最好創建你自己的vector類(因爲這樣你就得到了名爲x和y的變量,而不是第一個和第二個),例如

class Vector2 
{ 
public: 
    double x; 
    double y; 

    Vector2(double x, double y); 
    ... etc 
} 

然後,您可以使用操作符重載+,增加功能尋找交叉/點積等

性病:: vector類是不是你所需要的。 std :: vector類幾乎只是C malloced數組的替代品。

+0

不,不要重載'運算符+'等,除非你使用表達式模板來實現它們,否則你的代碼將會由於生成而減慢很多臨時工 –

+0

@Gregory:我不明白這裏臨時工的表現如何。OTOH,沒有(明智的)重載操作符的矢量算術將看起來像地獄。 – UncleBens