2012-11-09 4 views
1

그래서 Vec2float * 인 멤버 변수 "center"가 포함 된 Node 클래스가 있습니다. 그 이유는 drawSolidCircle 함수를 사용하고 싶기 때문에 센터를 나타 내기 위해 Vec2float 변수가 필요하기 때문입니다. 제가 가진 질문 중 하나는 Vec2float가 벡터입니까, 아니면 우주의 한 지점입니까? 많은 멤버 함수는 어떤 종류의 벡터 클래스처럼 들리지만 set() 함수는 공간에서 점처럼 보이게하는 두 개의 인수 만 가져오고 원을 그리려면 점이 필요합니다. 벡터가 아닌 반경. 내가 겪고있는 또 다른 문제는, 누군가 2 배의 복식을 준다면 어떻게 Vec2float로 적절하게 변환하고 x와 y 중심을 설정하는지 (x와 y가있는 경우에도)입니다. 예를 들어, 아래의 함수에서, 배열의 배열과 그 길이 인 'n'이 주어집니다. 엔트리는 두 개의 멤버 변수 'x'& 'y'를 가지며 두 개의 두 배가됩니다. 노드 배열을 만들고 그 데이터를 복사하여 원을 그려 내고 싶습니다.Cinder에서 Vec2 클래스를 찾으려고 시도

cinder::Vec2<float>* center;//in my Node class 

void function::build(Entry* c, int n) { 
Node* nd = new Node[n]; 
for(int i = 0;i<n;i++) { 
    nd[i].center = //what goes here if c[i].x and c[i].y are doubles? 
} 

참조 : VEC2 클래스 : http://libcinder.org/docs/v0.8.4/namespacecinder_1_1gl.html

어떤 제안 : 모양을 그릴 기능 http://libcinder.org/docs/v0.8.4/classcinder_1_1_vec2.html 목록, 메신저 drawSolidCircle를 사용하고 계십니까?

답변

0

나는 뭔가를 알아 낸 것입니다. 미래에 내 프로그램에서 작동할지 여부는 논쟁의 여지가 있습니다. 하지만, 여기에 내가 무슨 짓을 :

float f1 = (float)(c[i].x); 
float f2 = (float)(c[i].y); 
cinder::Vec2<float>* p = new cinder::Vec2<float>(f1,f2); 
nd[i].center = p; 

난 다음, 복식 별도로 수레에 주조 VEC2 생성자를 사용하여 변수 페이지를 만든 후 그와 동일한 중심을 설정. 내가 컴파일 한 것처럼, 우리는 그것이 작동 하는지를 볼 것입니다 : D

2

당신의 삶을 편하게하기 위해서, 당신은 Cinder 네임 스페이스를 사용할 수 있습니다. 파일 맨 위에 포함 된 다음 행을 추가하십시오. 단순히 예를 들어, 쓰기 할 수 있습니다

using namespace ci; 

은 :

Vec2f center(1.5f, 1.5f); 
std::cout << center << std::endl; 

사실, Vec2<float>은 쇠 찌끼에서 Vec2f로 형식 정의된다.

또한 실수로 캐스팅 되었기 때문에 두 개를 float에 캐스팅 할 필요가 없습니다.

마지막으로, 포인터에주의해야합니다. 대부분의 경우 객체 배열을 원한다면 std::vector을 사용하고 shared_ptr을 사용합니다. 여기에 내가 그걸하는 법을 배웠다. https://forum.libcinder.org/topic/efficiency-vector-of-pointers

벡터의 모든 이론을 다루지 않겠다. 간단히 말하자면, 위치를 저장하는 데 사용해야합니다. 수학적으로 여전히 벡터입니다 (위치 벡터를 원점 (0,0)에서부터 화살표 (0,0)로 생각할 수 있습니다. 현재 위치).

또한 라이브러리와 함께 제공되는 수많은 샘플을 살펴 보시기 바랍니다.

관련 문제