Estou tentando traçar as posições x e y de uma espiral arquimediana em C ++.
Até agora eu tenho tentado algo assim, mas sem sorte:
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);
}
EDIT: Mais informações
Estou desenvolvendo um aplicativo de jogo em 3D que demonstra o uso do mecanismo de física Bullet simulando dominós. Em vez de colocar os dominós na cena manualmente, quero usar um pouco de matemática para fazer isso por mim :)
Para quem estiver interessado aqui, está no GitHub .
int
. Em particular,dx
edy
provavelmente terá 0.Respostas:
Descobri isso :) Os dominós agora estão sendo colocados ao longo das coordenadas X e Y geradas pela função.
O código original da pergunta estava traçando uma onda de pontos para fora da posição ou origem central e não era o que eu queria. O que eu precisava era que cada ponto seguisse
Archimedean spiral
com um certo espaço entre as espirais.Inicialmente, usei
integer
valores para armazenar as coordenadasx
e,y
mas isso estava causando um erro de precisão ao truncar ofloating point
valor para armazená-lo nointeger
tipo de dados.O exemplo abaixo gera pontos ao longo da espiral continuamente, em relação ao
maxPoints
valor.O código do projeto está no GitHub , você precisará de Bullet e freeglut
fonte
Essa não é realmente uma resposta direta a essa pergunta (que já tem uma resposta de qualquer maneira), mas pode interessar as pessoas que desejam implementar esse algoritmo em 3D.
Eu tive que tentar implementar esse algoritmo para gerar espirais 3D no blender usando Python (poderia ser facilmente convertido em desenho com PIL ou Matplotlib em 2D). Então, aqui está o algoritmo e o resultado:
fonte
size
parâmetro uniforme ).