javascript - 在另一个点的对面找到一个点
问题描述
给定两个二维点(p1 和 p2),我需要找到一个点(p3)(从 p1 的角度来看)位于 p2 的另一侧,同时它需要与 p2 有给定的距离。
在给定距离更大的情况下,它可能看起来像这样:
^
|
| p1
| p2
|
| p3
<-|---------------------------->
v
或者像这样具有较小的给定距离:
^
|
|
| p3
| p2
|p1
<-|---------------------------->
v
我怎样才能计算这个点(p3)?
我选择的语言是 JavaScript,但我并不是严格要求 JavaScript 答案。如果您可以以可翻译成代码的方式对其进行解释,或者您编写伪代码就可以了。
这是我最后一次尝试(显然这行不通):
calculate_point_on_other_side_of_p2(p1, p2, distance_p2_to_p3) {
deltaX = p1.x-p2.x
deltaY = p1.y-p2.y
distance_p1_to_p2 = sqrt(deltaX*deltaX + deltaY*deltaY)
if (deltaX < 0)
p3.x = p2.x+distance_p2_to_p3
else
p3.x = p1.x-distance_p2_to_p3
if (deltaY < 0)
p3.y = p2.y+distance_p2_to_p3
else
p3.y = p1.y-distance_p2_to_p3
return p3
}
解决方案
如果您了解 2D 矢量的工作原理,这是一个简单的问题。
计算从 p1 到 p2 的单位向量:
(nx, ny) = ((p2x - p1x)*i + (p2y-p1y)*j)/sqrt((p2x-p1x)^2 + (p2y-p1y)^2)
其中 i 和 j 分别是 x 和 y 方向的单位向量。
现在您可以在距 p1 的任何距离 d 处计算 (p3x, p3y):
(p3x, p3y) = (p1x, p1y) + (d*nx, d*ny)
推荐阅读
- python - 异常值:“QuerySet”对象没有属性“密码”
- excel - 在每组天下运行标题
- python - 我想向已经与 python 字典中的值关联的键添加一个新值
- excel - 在 IF 条件不工作的情况下使用 VBA 进行数据验证
- javascript - 我们可以仅在代码行(GAS/JS)中总结并删除一些数组值吗?
- r - 如何在闪亮的模块中查看服务器的输出?
- java - 如何在 Spring Boot 应用程序中实现 HPKP?
- performance - 连接 https 站点 responseHeader 延迟
- java - 模拟 DoNothing 类的私有 void 方法 - 使用 PowerMockito
- assembly - Nand2tetris Project4- 测试失败 - Fill.asm:第 3 行比较失败