0

Python:如何在两行一个接一个地反映几个(如果不是很多)n维点,每个点由两个n维坐标定义。

给定几个 n 维点,

eg P1 = (4, 3, 2, 5, 7) P2 = (7, 3, 2, 2, 3),

以及两条反射线中的每条线的两个 n 维点,

eg L1P1 = (5, 6, 4, 3, 2) L1P2 = (7, 6, 9, 8, 1) L2P1 = (1, 3, 4, 9, 2) L2P2 = (5, 4, 3, 7, 6),

在第一行和第二行中反射未定义线的点,在本例中为 P1 和 P2,并返回每个双反射点的坐标。

我对这种数学还很陌生,并且无法得到任何可以实现这一目标的工作。考虑到每个轴的旋转角度,我开始尝试实现 n 维旋转,但很快意识到这对于我的项目范围来说太难了。我切换到通过迭代每个点并找到它与反射线的交点来尝试 nd 反射,这样我就可以将交点和给定点之间的假想线延伸到线的另一侧以创建新的反射点. 我认为这不是解决问题的最有效方法,并且在网上找不到太多关于找到交叉点坐标而不是距离的信息,这就是我问这个的原因 - 看看是否有人可以帮助提供一个多合一的解决方案。

我正在使用 Python 3.7 并且可以使用任何包,尽管流行的包更可取——尽管效率是最重要的。

任何提示表示赞赏,谢谢!

4

1 回答 1

0

我们必须计算点 S,点 P 和线 AB

在此处输入图像描述

首先定义向量

AP = P - A
AB = B - A

N 是 P 在 AB 线上的投影,我们使用向量的点(标量)积来计算它:

AN = AB * Dot(AP, AB) / Dot(AB, AB)

区别

PN = AB * Dot(AP, AB) / Dot(AB, AB) - AP

对称(反射)点

S = P + 2 * PN  = 
    P + 2 * AB * Dot(AP, AB) / Dot(AB, AB) - 2 * AP

示例是二维的,但这种方法也适用于 n 维情况。

于 2019-10-17T01:57:20.397 回答