1

所以我有一个 Node 类,它包含一个 Vec2float* 的成员变量“center”。这样做的原因是因为我想使用drawSolidCircle函数,并且我需要一个Vec2float变量来表示中心。我的一个问题是, Vec2float 是一个向量,还是空间中的一个点?许多成员函数使它听起来像某种矢量类,但 set() 函数只接受两个参数,这使它看起来像空间中的一个点,为了画一个圆,你需要一个点和半径,而不是矢量。我遇到的另一个问题是,如果有人给了我 2 个双打,我该如何正确地将它们转换为 Vec2float 并设置中心的 x 和 y(如果它甚至有 x 和 y)。因此,例如在下面的函数中,我得到了一个条目数组和它的长度,'n'。一个条目有两个成员变量“x”和“y”,它们都是双精度数。我想创建一个节点数组并复制该数据以使用它来绘制圆圈。

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/classcinder_1_1_vec2.html 绘制形状的函数列表,我使用 drawSolidCircle:http ://libcinder.org/docs/v0.8.4/namespacecinder_1_1gl.html

有什么建议么?

4

2 回答 2

2

为了让您的生活更轻松,您可以使用 cinder 命名空间。在文件顶部的包含后添加以下行。

using namespace ci;

然后,您可以简单地编写,例如:

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

确实,Vec2<float>它的类型定义Vec2f与 Cinder 中的一样。

此外,您不必将双精度数转换为浮点数,因为它们是隐式转换的,只需将它们传入!

最后,你真的必须小心指针。大多数时候,如果我想要一个对象数组,我会使用 astd::vector和使用shared_ptr. 这是我学习如何做到这一点的地方:https ://forum.libcinder.org/topic/efficiency-vector-of-pointers

我不会涵盖向量背后的整个理论。这是一个很好的参考(使用处理语言): http: //natureofcode.com/book/chapter-1-vectors/简而言之,是的,您应该使用它们来存储位置,但在数学上它们仍然是向量(您可以想到位置向量作为从原点 (0,0) 到当前位置的箭头)。

我还建议您查看该库提供的大量示例。

于 2012-11-13T22:34:40.317 回答
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 构造函数创建一个变量 p ,然后将中心设置为等于该变量。就像我说的那样编译,我们将看看它是否有效:D

于 2012-11-11T15:37:43.603 回答