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

c#-如何将点移动给定距离d(并获得新坐标),c#,geometry,2d,point,C#,Geometry,2d,Point,嗨 我想知道是否有任何有效的方法来计算点的坐标(它从原始位置移动了d距离) 假设我有一个点p(0.3,0.5),我需要将该点沿距离d的方向随机移动 到目前为止,我是通过随机选取新的x和y坐标来完成的,我正在检查新旧点之间的距离是否等于d。我确实意识到这样做并不太有效。 你会怎么做呢?给定一个点(x1,y1),我们想找到一个距离它d的“随机”点(x2,y2) 选择一个随机角度theta。然后: x2 = x1 + d * cos(theta) y2 = y1 + d * sin(theta) 这

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

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

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

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

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

x2 = x1 + d * cos(theta)
y2 = y1 + d * sin(theta)
这将是以
(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个单位的距离,则点p(0.3,0.5)可以简单地变为以下任一值: P(1.3,0.5),或
P(0.3,1.5)

该公式涉及基本的触发函数

new_x = old_x + Math.cos(angle) * distance;
new_y = old_y + Math.sin(angle) * distance;
顺便说一下,角度应该是弧度

radians = degrees * Math.PI / 180.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);

你所说的“随机方向”是什么意思?看起来你可以使用一些三角来计算给定距离和角度的新坐标?