Пытаясь выяснить класс Vec2 от Cinder

Итак, у меня есть класс Node, который содержит переменную-член «center», которая является Vec2float *. Причина этого в том, что я хочу использовать функцию drawSolidCircle, и мне нужна переменная Vec2float для представления центра. Один из моих вопросов: Vec2float — вектор или точка в пространстве? Многие функции-члены делают его похожим на некоторый векторный класс, но функция set () принимает только два аргумента, которые делают его похожим на точку в пространстве, и для рисования круга вам понадобится точка и радиус, а не вектор. Еще одна проблема, с которой я столкнулся, это то, что если кто-то дает мне 2 двойных, как я могу правильно конвертировать их в Vec2float и установить x и y центра (если он даже имеет x и y). Например, в приведенной ниже функции мне дан массив Entries и его длина, ‘n’. Запись имеет две переменные-члены ‘x’ & «у», которые оба удваиваются. Я хочу создать массив узлов и скопировать эти данные, чтобы использовать его для рисования кругов.

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

Какие-либо предложения?

1

Решение

Чтобы сделать вашу жизнь проще, вы можете использовать пространство имен Cinder. Добавьте следующую строку после включений вверху вашего файла.

using namespace ci;

который затем позволяет вам просто написать, например:

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

В самом деле, Vec2<float> Тип определен как Vec2f в гари.

Кроме того, вам не нужно разыгрывать двойники в поплавки, потому что они неявно разыгрываются, просто передайте их!

Наконец, вы действительно должны быть осторожны с указателями. Большую часть времени, если я хочу массив объектов, я бы использовал std::vectorи использовать shared_ptr, Вот где я научился это делать: https://forum.libcinder.org/topic/efficiency-vector-of-pointers

Я не буду охватывать всю теорию за векторами. Вот хорошая ссылка (с использованием языка обработки): http://natureofcode.com/book/chapter-1-vectors/ Короче говоря, да, вы должны использовать их для хранения позиций, но математически они по-прежнему являются векторами (вы можете представить вектор положения как стрелку от начала координат (0,0) до вашей текущей позиции).

Я также предлагаю вам взглянуть на многочисленные образцы, предоставленные библиотекой.

2

Другие решения

ну я понял что-то, он собирает сейчас, будет ли она работать для моей программы в будущем является дискуссионным. Но вот что я сделал:

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;

я отлил двойные числа к числам с плавающей запятой по отдельности, затем создал переменную p с помощью конструктора Vec2, а затем установил центр, равный этому. как я уже сказал, он компилируется, посмотрим, сработает ли это

0

А ты уже прошел курс программирования? Супер скидка!
Прокачать скилл $$$
×