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