gpt4 book ai didi

python - 测试两个线段是否大致共线(在同一条线上)

转载 作者:行者123 更新时间:2023-12-05 01:05:15 27 4
gpt4 key购买 nike

我想使用 numpy.cross 测试两个段是否大致共线(在同一行)。我有以米为单位的线段坐标。

import numpy as np

segment_A_x1 = -8020537.5158307655
segment_A_y1 = 5674541.918222183
segment_A_x2 = -8020547.42095263
segment_A_y2 = 5674500.781350276

segment_B_x1 = -8020556.569040865
segment_B_y1 = 5674462.788207927
segment_B_x2 = -8020594.740831952
segment_B_y2 = 5674328.095911447

a = np.array([[segment_A_x1, segment_A_y1], [segment_A_x2, segment_A_y2]])
b = np.array([[segment_B_x1, segment_B_y1], [segment_B_x2, segment_B_y2]])
crossproduct = np.cross(a, b)

>>>array([7.42783487e+08, 1.65354844e+09])

crossproduct 值相当高,即使我会说这两个段大致共线。为什么?

如何确定分段是否与 crossproduct 结果共线?

是否有可能使用以米为单位的公差来判断线段是否大致共线?

最佳答案

您的方法的问题在于叉积值取决于测量尺度。

也许最直观的共线性度量是线段之间的角度。让我们计算一下:

import math

def slope(line):
"""Line slope given two points"""
p1, p2 = line
return (p2[1] - p1[1]) / (p2[0] - p1[0])

def angle(s1, s2):
"""Angle between two lines given their slopes"""
return math.degrees(math.atan((s2 - s1) / (1 + (s2 * s1))))

ang = angle(slope(b), slope(a))
print('Angle in degrees = ', ang)
Angle in degrees = 2.2845

我使用了 answer安德森·奥利维拉(Anderson Oliveira)。

关于python - 测试两个线段是否大致共线(在同一条线上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70762830/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com