7

嗨,我想知道是否有任何有效的方法来计算点的坐标(从原始位置移动距离 d)。

假设我有一个点 P(0.3,0.5),我需要将该点随机移动距离 d。

到目前为止,我通过随机选择新的 x 和 y 坐标来做到这一点,并且我正在检查新旧点之间的距离是否等于 d。我确实意识到这样做不是太有效的方法。你会怎么做?

4

4 回答 4

20

给定一个 point (x1, y1),我们想找到一个(x2, y2)离它很远的“随机”点d

选择一个随机的角度theta。然后:

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

这将是一个以半径d为中心的圆上的随机点(x1, y1)

证明

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

你可能想看看:

于 2011-01-04T21:58:46.813 回答
10

其公式涉及基本的三角函数。

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

顺便说一句,角度应该以弧度为单位。

radians = degrees * Math.PI / 180.0;
于 2011-01-04T21:58:57.347 回答
0

您需要解决简单的方程:

double dx_square = rand.NextDouble(d);
double dy_square = d - dx_square;
double dx = Math.Sqrt(dx_square);
double dy = Math.Sqrt(dy_square);
于 2011-01-04T21:59:46.380 回答
-1

如果对点的移动方向没有限制,最简单的方法是仅沿一个轴移动它。

因此,如果您必须将该点移动 1 个单位的距离,则您的点 P(0.3,0.5) 可以简单地变为以下任意一种:P(1.3,0.5) 或 P(0.3,1.5)

于 2011-01-04T21:58:53.993 回答