Im essayant de tracer les positions x et y d'une spirale archimédienne en C ++.
Jusqu'à présent, j'ai essayé quelque chose comme ça, mais pas de chance:
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: Plus d'infos
Je développe une application de jeu 3D qui démontre l'utilisation du moteur physique Bullet en simulant des dominos. Au lieu de placer les dominos dans la scène manuellement, je veux utiliser des mathématiques pour le faire pour moi :)
Pour tous ceux qui sont intéressés ici, c'est sur GitHub .
int
. En particulier,dx
etdy
obtiendra probablement 0.Réponses:
Compris :) Les dominos sont maintenant placés le long des coordonnées X et Y générées par la fonction.
Le code original dans la question traçait une vague de points vers l'extérieur depuis la position centrale ou l'origine et n'était pas ce que je voulais. Ce dont j'avais besoin, c'était que chaque point suive le
Archimedean spiral
avec un certain espace entre les spirales.Initialement, j'ai utilisé des
integer
valeurs pour stocker les coordonnéesx
ety
mais cela provoquait une erreur de précision en tronquant lafloating point
valeur afin de la stocker dans leinteger
type de données.L'exemple ci-dessous génère des points le long de la spirale en continu, par rapport à la
maxPoints
valeur.Le code du projet est sur GitHub , vous aurez besoin de Bullet et de freeglut
la source
Ce n'est pas vraiment une réponse directe à cette question (qui a déjà une réponse de toute façon), mais pourrait intéresser les personnes qui souhaitent implémenter cet algorithme en 3D.
J'ai dû essayer d'implémenter cet algorithme pour générer des spirales 3D dans Blender en utilisant Python (pourrait facilement être converti en dessin avec PIL ou Matplotlib en 2D). Voici donc l'algorithme et le résultat:
la source
size
paramètre uniforme ).