Заполнить массив векторами в C++

Я новичок в C++ и хотел бы добиться следующего:

 ttgl::vec3f positions[] = {
    ttgl::vec3f(-1.0f, 1.0f, 0.0f),
    ttgl::vec3f(1.0f, 1.0f, 0.0f),
    ttgl::vec3f(1.0f, -1.0f, 0.0f),
    ttgl::vec3f(1.0f, -1.0f, 0.0f),
    ttgl::vec3f(-1.0f, -1.0f, 0.0f),
    ttgl::vec3f(-1.0f, 1.0f, 0.0f),

};

Проблема в том, что я не знаю значений и должен динамически заполнять этот массив.

Я пытаюсь добиться этого с помощью следующей функции:

void getCirclePositions(GLfloat radius, GLint sides) {
ttgl::vec3f center = ttgl::vec3f(0.0f, 0.0f, 0.0f);
GLfloat angle = (2.0f * M_PI) / sides;
ttgl::vec3f positions[100];
positions[0] = center;


for (int i = 1; i <= sides; i++) {
    GLfloat angleFan = angle * (i + 1);
    GLfloat xCoordinate = radius * cos(angleFan);
    GLfloat yCoordinate = radius * sin(angleFan);
    ttgl::vec3f point = ttgl::vec3f(xCoordinate, yCoordinate, 0.0f);
    positions[i] = point;


}
return positions;
};

Это приводит к следующей ошибке:

Run-Time Check Failure #2 - Stack around the variable 'positions' was 
corrupted.

Как мне правильно вставить значения?

РЕДАКТИРОВАТЬ

Функция вызывается следующим образом:

 getCirclePositions(1.0f, 100);

Я отредактировал код соответствующим образом, и ошибка решена. Спасибо за это.

void getCirclePositions(GLfloat radius, GLint sides) {
ttgl::vec3f center = ttgl::vec3f(0.0f, 0.0f, 0.0f);
GLfloat angle = (2.0f * M_PI) / sides;
ttgl::vec3f positions[100];
positions[0] = center;


for (int i = 1; i < sides; i++) {
    GLfloat angleFan = angle * (i + 1);
    GLfloat xCoordinate = radius * cos(angleFan);
    GLfloat yCoordinate = radius * sin(angleFan);
    ttgl::vec3f point = ttgl::vec3f(xCoordinate, yCoordinate, 0.0f);
    positions[i] = point;


}
for (int i = 0; i >sides; i++) {
    std::cout << positions[i];
}

};

Как мне распечатать этот массив?

Использовать значения std::vector<ttgl::vec3f> и push_back (или emplace_back)?

UnholySheep 01.05.2018 15:42

sides> = 100?

tkausl 01.05.2018 15:43

Похоже, вы используете индексирование на основе единицы, но массивы C++ используют индексацию на основе нуля.

Fred Larson 01.05.2018 15:48
минимальный воспроизводимый пример плз .....
Lightness Races in Orbit 01.05.2018 15:49

@FredLarson positions[0] назначается до цикла в positions[0] = center;.

François Andrieux 01.05.2018 15:50

@ FrançoisAndrieux: Достаточно справедливо. Но в for (int i = 1; i <= sides; i++), если sides == 100, он выходит за пределы массива.

Fred Larson 01.05.2018 15:53

@FredLarson Это правда, но мы не знаем, что такое sides. То же самое будет верно и для i < sides, хотя стороны ограничены до менее 101. Поскольку кажется, что OP хранит как центр круга, так и положение каждой вершины, использованной для его рисования, в одном и том же массиве, ожидается, что positions будет нужны элементы n+1, чтобы нарисовать круг, состоящий из линий n (линии n плюс центр). В этом случае цикл for для перебора положений вершин будет от 1 до n включительно, а не от традиционного 0 до n-1 включительно.

François Andrieux 01.05.2018 15:58

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

Fred Larson 01.05.2018 16:02
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
8
288
0

Другие вопросы по теме