Estoy tratando de trazar las posiciones x e y de una espiral de Arquímedes en C ++.
Hasta ahora he estado intentando algo como esto, pero no tuve suerte:
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);
}
EDITAR: más información
Estoy desarrollando una aplicación de juego en 3D que demuestra el uso del motor de física Bullet simulando dominó. En lugar de colocar las fichas de dominó en la escena manualmente, quiero usar algunas matemáticas para hacerlo por mí :)
Para cualquiera que esté interesado aquí, está en GitHub .
int
. En particular,dx
ydy
probablemente obtendrá 0.Respuestas:
Lo descubrí :) Las fichas de dominó ahora se colocan a lo largo de las coordenadas X e Y generadas por la función.
El código original en la pregunta estaba trazando una ola de puntos hacia afuera desde la posición central u origen y no era lo que quería. Lo que necesitaba era que cada punto siguiera
Archimedean spiral
con cierto espacio entre las espirales.Inicialmente, utilicé
integer
valores para almacenar las coordenadasx
y,y
pero esto estaba causando un error de precisión al truncar elfloating point
valor para almacenarlo en elinteger
tipo de datos.El siguiente ejemplo genera puntos a lo largo de la espiral continuamente, en relación con el
maxPoints
valor.El código para el proyecto está en GitHub , necesitará Bullet y freeglut
fuente
Esta no es realmente una respuesta directa a esta pregunta (que ya tiene una respuesta de todos modos), pero podría interesar a las personas que desean implementar este algoritmo en 3D.
Tuve que intentar implementar este algoritmo para generar espirales 3D en Blender usando Python (podría convertirse fácilmente en dibujo con PIL o Matplotlib en 2D). Así que aquí está el algoritmo y el resultado:
fuente
size
parámetro uniforme ).