2012-11-09 12 views
1

所以我有一個Node類,它包含一個Vec2float *成員變量「center」。原因是因爲我想使用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? 
} 

引用: VEC 2類:那畫圖形功能http://libcinder.org/docs/v0.8.4/classcinder_1_1_vec2.html 列表,即時通訊使用drawSolidCircle:http://libcinder.org/docs/v0.8.4/namespacecinder_1_1gl.html

有什麼建議?

回答

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; 

我鑄造雙打單獨浮動,然後用VEC 2的構造做了一個變量p,然後設置中心相等。就像我說的那樣編譯,我們將看看它是否有效:D

2

爲了讓您的生活變得輕鬆,您可以使用cinder命名空間。在文件頂部的包含之後添加以下行。

using namespace ci; 

然後,您可以簡單的寫,例如:

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

事實上,Vec2<float>被Typedef的在煤渣Vec2f

此外,你不應該將雙打投入浮游物,因爲它們是隱式鑄造的,只是將它們傳入!

最後,你真的要小心指針。大多數情況下,如果我需要一組對象,我會使用std::vector,並使用shared_ptr。這裏是我學習如何做到的地方:https://forum.libcinder.org/topic/efficiency-vector-of-pointers

我不會介紹矢量背後的全部理論。這裏有一個很好的參考(使用處理語言):http://natureofcode.com/book/chapter-1-vectors/總之,是的,你應該使用它們來存儲位置,但在數學上它們仍然是向量(你可以將位置向量看作是從原點(0,0)到你當前的位置)。

我還建議你看看圖書館提供的大量樣本。