Я пытаюсь построить x и y положения архимедовой спирали в C ++.
До сих пор я пробовал что-то вроде этого, но не повезло:
int dx = 0;
int dy = 0;
int x = 0;
int y = 0;
for (int i = 0; i < maxPoints; i++)
{
dx = sin(i * PI / 2);
dy = cos(-i * PI / 2);
x += dx;
y += dy;
plot(x, y);
}
РЕДАКТИРОВАТЬ: Больше информации
Я занимаюсь разработкой приложения для 3D-игр, которое демонстрирует использование физического движка Bullet путем имитации домино. Вместо того, чтобы помещать домино в сцену вручную, я хочу использовать математику, чтобы сделать это для меня :)
Для всех, кто интересуется здесь, это на GitHub .
int
. В частности,dx
иdy
, вероятно, получит 0.Ответы:
Выяснили это :) Домино теперь размещаются вдоль координат X и Y, сгенерированных функцией.
Исходный код в вопросе строил волну точек наружу от центральной точки или начала координат, и это было не то, что я хотел. Мне нужно было, чтобы каждая точка следовала
Archimedean spiral
с определенным промежутком между спиралями.Первоначально я использовал
integer
значение для храненияx
иy
координат , но это вызывает прецизионную ошибку усеченияfloating point
значения для того , чтобы хранить его вinteger
типе данных.Приведенный ниже пример генерирует точки вдоль спирали непрерывно относительно
maxPoints
значения.Код для проекта есть на GitHub , вам понадобится Bullet и freeglut
источник
На самом деле это не прямой ответ на этот вопрос (у которого уже есть ответ), но он может заинтересовать людей, которые хотят реализовать этот алгоритм в 3D.
Мне пришлось попробовать реализовать этот алгоритм для создания трехмерных спиралей в блендере с использованием Python (его можно было легко преобразовать в рисование с помощью PIL или Matplotlib в 2D). Итак, вот алгоритм и результат:
источник
size
параметр).