c# - 如何将点移动给定距离d(并获得新坐标)

时间:2011-01-04 21:55:24

标签: c# geometry 2d point

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

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

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

4 个答案:

答案 0 :(得分:17)

给定一个点(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

您可能需要查看:

答案 1 :(得分:8)

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

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

顺便说一句,角度应该是弧度。

radians = degrees * Math.PI / 180.0;

答案 2 :(得分:0)

如果没有关于点移动方向的约束,最简单的方法是仅沿一个轴移动它。

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

答案 3 :(得分: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);