2011-01-04 19 views
6

Hola Me preguntaba si hay alguna manera eficiente de calcular las coordenadas del punto (que se movió distancia d desde su ubicación original).C# - cómo mover el punto una distancia dada d (y obtener una nueva coordenadas)

Digamos que tengo un punto P (0.3,0.5) y necesito mover ese punto al azar con la distancia d.

Hasta ahora lo hice seleccionando al azar nuevas coordenadas xey y estaba comprobando si la distancia entre el punto antiguo y el nuevo es igual a d. Me doy cuenta de que no es una forma demasiado eficiente de hacer eso. ¿Cómo lo harías?

+0

¿Qué quiere decir con Parece que podrías usar algunos trig para calcular nuevas coordenadas dada una distancia y un ángulo? – n8wrl

Respuesta

17

Dado un punto (x1, y1), queremos encontrar un punto "aleatorio" (x2, y2) a una distancia d de él.

Elija un ángulo aleatorio theta. Entonces:

x2 = x1 + d * cos(theta) 
y2 = y1 + d * sin(theta) 

Este será un punto aleatorio en un círculo de radio d centrado en (x1, y1)

Prueba:

Distance between (x1, y1) and (x2, y2) 
= sqrt ((x2 - x1)^2 + (y2 - y1)^2) 
= sqrt (d^2 * (sin^2 (theta) + cos^2 (theta))) 
= d 

Es posible que desee mirar:

0

Si no hay restricción en cuanto a en qué dirección el punto es para mover, la manera más fácil es para moverlo a lo largo de un solo eje.

lo tanto, si usted tiene que mover el punto por una distancia de 1 unidad, su punto P (0.3,0.5), sólo puede llegar a ser uno de los siguientes: P (1.3,0.5), o P (0,3 , 1.5)

8

La fórmula para eso implica funciones trigonométricas básicas.

new_x = old_x + Math.cos(angle) * distance; 
new_y = old_y + Math.sin(angle) * distance; 

Por cierto, el ángulo debe ser en radianes.

radians = degrees * Math.PI/180.0; 
0

Es necesario resolver la ecuación simple: '? Dirección aleatoria'

double dx_square = rand.NextDouble(d); 
double dy_square = d - dx_square; 
double dx = Math.Sqrt(dx_square); 
double dy = Math.Sqrt(dy_square); 
Cuestiones relacionadas