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

ger*_*imo 7 c# geometry 2d point

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

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

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

Ani*_*Ani 18

鉴于一点(x1, y1),我们希望(x2, y2)在距离d它的位置找到一个"随机"点.

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

x2 = x1 + d * cos(theta)
y2 = y1 + d * sin(theta)
Run Code Online (Sandbox Code Playgroud)

这将是以半径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
Run Code Online (Sandbox Code Playgroud)

你可能想看看:


Tes*_*rex 9

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

new_x = old_x + Math.cos(angle) * distance;
new_y = old_y + Math.sin(angle) * distance;
Run Code Online (Sandbox Code Playgroud)

顺便说一下,角度应该是弧度.

radians = degrees * Math.PI / 180.0;
Run Code Online (Sandbox Code Playgroud)