2011-09-21 2 views
2

C++에서 Vector2 클래스가 있습니까? 그렇다면이 클래스를 사용하려면 무엇을 포함해야합니까?C++의 Vector2 클래스

입자의 위치 나 속도와 같은 2 차원 벡터를 저장하는 데 사용하고 싶습니다.

+1

언제부터 2 차원 컬렉션을 배치합니까? –

+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입니다.

EDIT : Eigen 또는 glm과 같은 유용한 수학 라이브러리가 있습니다.이 라이브러리는 많은 유용한 알고리즘과 함께 이러한 유형을 정의합니다 (성능 구현 포함).

+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

로 2 차원 벡터 :이

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

유형 등 INT, 더블, 클래스, 같은

3

표준 라이브러리에는 "vector2"클래스가 없습니다. 필요에 맞는 한 쌍의 클래스가 있지만,이 시나리오에서는 고유 한 벡터 클래스를 만드는 것이 가장 좋습니다 (첫 번째 및 두 번째가 아닌 x 및 y라는 변수가 있으므로).

class Vector2 
{ 
public: 
    double x; 
    double y; 

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

그런 다음 표준 : : 벡터 클래스는 당신이 필요 아닙니다

등/크로스 점의 제품을 찾는 기능을 추가, 연산자 +를 오버로드 할 수 있습니다. std :: vector 클래스는 C 배열로 대체 된 배열입니다.

+0

아니, 표현 템플릿을 사용하여 구현하지 않는 한'operator +'등을 오버로드하지 마라. 코드는 생성에 의해 속도가 느려질 것이다. 많은 임시 직원들 –

+0

@ 그레고리 : 성능이 임시 직원들에게 얼마나 고통 스러울 지 모르겠습니다.OTOH, (현명한) 오버로드 된 연산자가없는 벡터 산술은 지옥처럼 보입니다. – UncleBens

관련 문제