массивы — Как в C ++, как я могу создать точки расположения произвольно?

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

for (int c = 0; c < number; c++){
for(int d = 0; d < 3; d++){
coordinate[c][d] = randomrange(low, high);
}
}

Где randomrange () — это рандомизатор произвольного диапазона, number — это количество созданных точек, а d — координаты x, y, z. Это работает, однако я хочу пойти дальше. Как бы я определил известную форму? Скажем, я хочу 80 точек на окружности круга или 500, которые образуют края куба. Я могу хорошо объяснить на бумаге, но у меня проблема с описанием процесса как кодирования. Это не относится к вопросу, но я заканчиваю тем, что брал точки в текстовый файл, а затем использую matlab, scatter3 для построения точек. Создание точек «формы» — моя проблема.

2

Решение

Набор окружностей и ребер куба являются одномерными наборами, поэтому вы можете представлять их как реальные интервалы. Для круга это просто: используйте интервал (0, 2pi) и преобразуйте случайное значение фи из интервала в точку:

xcentre + R cos (phi), ycentre + R sin (phi)

Для куба у вас есть 12 сегментов, поэтому используйте интервал (0, 12) и разбейте случайное число из интервала на целую часть и дробь. Затем используйте целое число в качестве номера ребра и дробь в качестве позиции внутри ребра.

2

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

Простой вариант:
Сначала подумайте о значениях min / max x / y (отдельно; чтобы уменьшить ошибочные значения для шага ниже), сгенерируйте некоторые координаты, соответствующие этому диапазону, а затем проверьте, соответствует ли он, например. a^2+b^2=r^2 (круг)
Если нет, попробуйте еще раз.

Лучше, но возможно только для определенных фигур:
Создайте радиус между (0-max) и углом (0-360)
(или просто угол, если он должен быть на границе круга)
и использовать некоторую математику (sin / cos …), чтобы преобразовать ее в x и y.
http://en.wikipedia.org/wiki/Polar_coordinate_system

0