7

Hi I was wondering if there is any efficent way to calculating coordinates of point (which was moved distance d from it's original location).

Let's say I have a point P(0.3,0.5) and I need to move that point random direction with distance d.

So far I did it by random picking new x and y coordinates and I was checking if distance between old and new point equals d. I do realize that is't too eficient way to do that. How would You do it ??

geronimo
  • 71
  • 1
  • 1
  • 2
  • What do you mean by 'random direction?' It seems like you could use some trig to figure new coordinates given a distance and an angle? – n8wrl Jan 04 '11 at 21:58

4 Answers4

20

Given a point (x1, y1), we want to find a "random" point (x2, y2) at a distance d from it.

Pick a random angle theta. Then:

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

This will be a random point on a circle of radius d centered at (x1, y1)

Proof:

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

You might want to look at:

Ani
  • 111,048
  • 26
  • 262
  • 307
10

The formula for that involves basic trig functions.

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

By the way, angle should be in radians.

radians = degrees * Math.PI / 180.0;
Tesserex
  • 17,166
  • 5
  • 66
  • 106
0

You need to resolve simple equation:

double dx_square = rand.NextDouble(d);
double dy_square = d - dx_square;
double dx = Math.Sqrt(dx_square);
double dy = Math.Sqrt(dy_square);
Victor Haydin
  • 3,518
  • 2
  • 26
  • 41
-1

If there is no constraint as to in which direction the point is to move, the easiest way is to move it along only one axis.

So, if you have to move the point by a distance of 1 unit, your point P(0.3,0.5), can simply become either of the following: P(1.3,0.5), or P(0.3,1.5)

Ayush
  • 41,754
  • 51
  • 164
  • 239