Python D维空间中圆上两点间欧氏距离的计算

Python D维空间中圆上两点间欧氏距离的计算,python,pytorch,geometry,Python,Pytorch,Geometry,计算两点之间的直接欧氏距离非常简单: import torch p1 = torch.tensor([1.0, 3.5]) p2 = torch.tensor([5.0, 9.2]) dis = torch.sum(torch.square(p1-p2)) dis >>> tensor(48.4900) 但是,如果不穿过圆,如何计算圆上两点之间的距离?它是圆周长上的距离,在D维空间中 显然,在2D中,圆只是一个圆: import numpy as np import mat

计算两点之间的直接欧氏距离非常简单:

import torch
p1 = torch.tensor([1.0, 3.5])
p2 = torch.tensor([5.0, 9.2])

dis = torch.sum(torch.square(p1-p2))
dis
>>> tensor(48.4900)
但是,如果不穿过圆,如何计算圆上两点之间的距离?它是圆周长上的距离,在D维空间中

显然,在2D中,圆只是一个圆:

import numpy as np
import matplotlib.pyplot as plt

def circle_points(r, n):
    circles = []
    for r, n in zip(r, n):
        t = np.linspace(0, 2*np.pi, n, endpoint=False)
        x = r * np.cos(t)
        y = r * np.sin(t)
        circles.append(np.c_[x, y])
    return circles

r = [2]
n = [20]
circles = circle_points(r, n)

fig, ax = plt.subplots()
for circle in circles:
    ax.scatter(circle[:, 0], circle[:, 1])
ax.set_aspect('equal')
plt.show()


而在3D中,它将是一个球体、4D超球体等。

居中
成为圆的中心

然后,您可以使用点积公式计算两个中心到点向量之间的角度,该公式将点积与角度的余弦和向量的范数联系起来(查找向量的几何定义)

然后,弧的长度是圆的半径乘以角度,即

distance = angle*r

简单优雅,我喜欢!你能给我解释一下吗?
norm()
的目的是什么?当你说两点之间的角度时,我们是从圆心开始说话的吗?dot产品会给我什么?好的,我会更新答案以考虑中心。但是是的,你需要中心到点向量之间的点积;我只是假设中心是(0,0),因为这是你的图像显示的。因为公式适用于单位向量,所以需要
标准值
!非常感谢:)
normalize = lambda vect: vect/vect.norm()
v1 = normalize(point_1 - center)
v2 = normalize(point_2 - center)
angle = torch.arccos(v1.dot(v2))
distance = angle*r