Pregunta

estoy desarrollando en la aplicación en XNA que dibuja trayectorias aleatorias. Por desgracia, estoy fuera de contacto con la representación gráfica, así que estoy un poco atascado. Mis necesidades de aplicación para hacer lo siguiente:

  1. Pick un ángulo aleatorio de mi origen (0,0), que es simple.
  2. Dibujar un círculo en relación a dicho origen, 16px de distancia (o cualquier distancia I especificar), en el ángulo encontró anteriormente.

(Disculpen mi terrible photoshoping)

texto alternativo http://www.refuctored.com/coor.png

El segundo círculo en (16,16) representaría un ángulo de 45 grados 16 pixeles lejos de mi origen.

Me gustaría disponer de un método en el que pase en mi distancia y el ángulo que devuelve un punto a gráfico en. es decir.

private Point GetCoordinate(float angle, int distance)
{
   // Do something.
   return new Point(x,y);
}

Yo sé que esto es simple, pero alquilásemos, estoy bastante fuera de contacto con la representación gráfica. Cualquier ayuda?

Gracias, George

¿Fue útil?

Solución

Si el ángulo está en grados, en primer lugar hacer:

angle *= Math.PI / 180;

A continuación:

return new Point(distance * Math.Cos(angle), distance * Math.Sin(angle));

Por cierto, el punto en (16, 16) no es 16 píxeles de distancia desde el origen, pero sqrt (16 ^ 2 + 16 ^ 2) = sqrt (512) = ~ 22.63 píxeles.

Otros consejos

private Point GetCoordinate(float angle, int distance)
{
  float x = cos(angle) * distance;
  float y = sin(angle) * distance;
  return new Point(x, y);
}

Tenga en cuenta que las funciones trigonométricas probablemente toman radianes. Si el ángulo está en grados, se divide por 180 / pi.

en general:

x = d * cos(theta)
y = d * sin(theta)

Donde d es la distancia desde el origen y theta es el ángulo.

Teorema de Pitágoras . A continuación, este hilo debe tener detalles más específicos para usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top