怎么求这两组点的数学关系,也可以说是求俩个坐标系的关系?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么求这两组点的数学关系,也可以说是求俩个坐标系的关系?相关的知识,希望对你有一定的参考价值。

已知两组点,坐标是
(150,150) (150,650) (990,150) (990,650)

(15,270) (145,145) (140,440) (220,360)
上下俩个坐标表示的是同一个点,问题是怎么求这两组点的数学关系,也可以说是求俩个坐标系的关系?最好有个计算过程,用什么数学工具或者软件呀?
无语,第二个坐标是斜的,还压缩了一下,要用软件求

参考技术A 是平面坐标:
主要是两个坐标对应相减
X差=150-15=135
Y差=150-270=-120
所以下边的坐标系在上边坐标系的第四项限(135,-120)
知上边坐标系,减(135,-120)得下边的坐标系。
反之,下边坐标加该点,就得上边坐标系的点。
参考技术B 自己编程序就行了
2个坐标的关系-
距离,位置(夹角)等关系
用c语言能编出来

向量化计算numpy中一组点的所有单位向量

【中文标题】向量化计算numpy中一组点的所有单位向量【英文标题】:Vectorize calculating all unit vectors for a set of points in numpy 【发布时间】:2020-10-26 03:26:38 【问题描述】:

我需要计算两组点之间的所有单位向量。

目前我有这个:

def all_unit_vectors(points_a, points_b):
    results = np.zeros((len(points_a) * len(points_b), 3), dtype=np.float32)
    
    count = 0
    for pt_a in points_a:
        for pt_b in points_b:
            results[count] = (pt_a - pt_b)/np.linalg.norm([pt_a - pt_b])
            count += 1
            
    return results
            
       
in_a = np.array([[51.34, 63.68, 7.98], 
                 [53.16, 63.23, 7.19],
                 [77.50, 62.55, 4.23],
                 [79.54, 62.73, 3.61]])

in_b = np.array([[105.58, 61.09, 5.50],
                 [107.37, 60.66, 6.50],
                 [130.73, 58.30, 12.33],
                 [132.32, 58.48, 13.38]])


results = all_unit_vectors(in_a, in_b)

print(results)

哪个(正确)输出:

[[-0.368511    0.01759667  0.01684932]
 [-0.3777128   0.02035861  0.00997707]
 [-0.47964868  0.03250422 -0.02628129]
 [-0.4851439   0.03115273 -0.03235091]
 [-0.3551545   0.01449887  0.01145004]
 [-0.3644423   0.01727756  0.00463872]
 [-0.46762046  0.02971985 -0.03098581]
 [-0.4732132   0.02839518 -0.03700341]
 [-0.17814296  0.00926242 -0.00805704]
 [-0.18821244  0.01190899 -0.01430339]
 [-0.3044056   0.02430441 -0.04632135]
 [-0.31113514  0.0230996  -0.05193153]
 [-0.16408844  0.0103343  -0.01190965]
 [-0.1741932   0.01295652 -0.01808905]
 [-0.29113463  0.02519489 -0.04959355]
 [-0.29793915  0.02399093 -0.05515092]]

all_unit_vectors() 中的循环可以向量化吗?

【问题讨论】:

“我需要计算两组点之间的所有单位向量。” 示例输出中的行不是单位向量。为什么要将pt_a - pt_b 除以np.linalg.norm([pt_a, pt_b]) @WarrenWeckesser 不是吗?我是从***.com/a/52781450/280795 那里得到的(虽然我不清楚v 在那个答案中的样子) np.linalg.norm([-0.368511, 0.01759667, 0.01684932]) 是 0.369...,而不是 1。要获得单位向量,您必须除以 np.linalg.norm(pt_a - pt_b)。差异pt_a - pt_b 对应于您链接到的答案中的v,因此您必须将v 的两个出现替换为pt_a - pt_b @WarrenWeckesser 哦,当然。谢谢你把它捡起来。我已经编辑了这个问题,所以没有人会犯同样的错误。 【参考方案1】:

norm 计算为平方和的根,您可以按如下方式实现自己的norm 计算,然后用broadcasting 向量化您的解决方案:

diff = (in_a[:, None] - in_b).reshape(-1, 3)
norm = ((in_a[:, None] ** 2 + in_b ** 2).sum(2) ** 0.5).reshape(-1, 1)

diff / norm

给予:

[[-0.36851098  0.01759667  0.01684932]
 [-0.3777128   0.02035861  0.00997706]
 [-0.47964868  0.03250422 -0.02628129]
 [-0.4851439   0.03115273 -0.03235091]
 [-0.35515452  0.01449887  0.01145004]
 [-0.36444229  0.01727756  0.00463872]
 [-0.46762047  0.02971985 -0.03098581]
 [-0.4732132   0.02839518 -0.03700341]
 [-0.17814297  0.00926242 -0.00805704]
 [-0.18821243  0.01190899 -0.01430339]
 [-0.30440561  0.02430441 -0.04632135]
 [-0.31113513  0.0230996  -0.05193153]
 [-0.16408845  0.0103343  -0.01190965]
 [-0.1741932   0.01295652 -0.01808905]
 [-0.29113461  0.02519489 -0.04959355]
 [-0.29793917  0.02399093 -0.05515092]]

Play.

【讨论】:

以上是关于怎么求这两组点的数学关系,也可以说是求俩个坐标系的关系?的主要内容,如果未能解决你的问题,请参考以下文章

请高手帮我找出这两组数据的对应关系,谢谢!!

向量化计算numpy中一组点的所有单位向量

两组点之间的最佳匹配

求java程序:输入n个正整数,分成两组求和,求两列数字组合使这两组的和最接近平均数

数学中一个点在直角坐标系中绕原点旋转90或180度后的坐标怎么求?

向数学达人求助,如何求到平面上五个任意的点距离最近的点的位置?已知那五个点的位置