gpt4 book ai didi

python - 如何计算两条线之间的交点,其中一条线由数据框列定义

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

我有以下数据框:

pd.DataFrame.from_dict({
'x0': {
199: 162.2, 441: 324.5, 903: 209.0, 1272: 241.4, 1431: 142.4, 1510: 314.7, 1657: 274.1,
1777: 217.7, 1811: 261.8, 2022: 143.0, 2164: 341.6, 2167: 364.7, 2461: 348.2, 2606: 256.7,
2895: 353.2, 114: 249.8, 240: 181.1, 278: 191.6, 372: 249.2, 460: 87.8
},
'y0': {
199: 246.8, 441: 55.4, 903: 236.0, 1272: 233.6, 1431: 230.6, 1510: 249.4, 1657: 67.7,
1777: 239.3, 1811: 193.7, 2022: 224.0, 2164: 101.6, 2167: 50.3, 2461: 191.9, 2606: 242.3,
2895: 200.4, 114: 51.5, 240: 104.9, 278: 132.5, 372: 167.0, 460: 207.2
},
'x1': {
199: 201.8, 441: 363.6, 903: 258.1, 1272: 257.0, 1431: 122.4, 1510: 331.0, 1657: 358.7,
1777: 265.0, 1811: 365.9, 2022: 176.8, 2164: 383.9, 2167: 351.1, 2461: 364.0, 2606: 300.0,
2895: 352.4, 114: 278.1, 240: 233.3, 278: 171.6, 372: 219.5, 460: 156.8
},
'y1': {
199: 240.2, 441: 114.6, 903: 236.0, 1272: 275.3, 1431: 286.6, 1510: 237.4, 1657: 178.2,
1777: 244.4, 1811: 100.6, 2022: 273.7, 2164: 154.5, 2167: 184.2, 2461: 127.5, 2606: 244.1,
2895: 115.1, 114: 85.0, 240: 117.4, 278: 84.1, 372: 159.2, 460: 199.5
}
})
         x0     y0     x1     y1
199 162.2 246.8 201.8 240.2
441 324.5 55.4 363.6 114.6
903 209.0 236.0 258.1 236.0
1272 241.4 233.6 257.0 275.3
1431 142.4 230.6 122.4 286.6
1510 314.7 249.4 331.0 237.4
...

其中后续列定义段的起始和结束坐标。我需要计算该线段和线的交点,例如x = 100y = 60。我想将获得的点存储在列 x1y1 中,以便如果存在交集,则值将被替换,否则原始 x1 > 和 y1 值将被保留。我发现在this link下定义交点的解决方案,但我不知道如何对其进行矢量化并使其与 Pandas 一起使用。或者直接在列上工作可能会更容易?有任何想法吗?

最佳答案

如果您将数据转换为斜率截距格式,您可以轻松实现/矢量化此问题:

slopes = (df['y1'] - df['y0']) / (df['x1'] - df['x0'])
y_intercepts = df['y0'] - (slopes * df['x0'])

然后您的拦截问题可以通过以下方式解决任何行:

def get_vertical_intercept(x):
return slopes * x + y_intercepts

def get_horizontal_intercept(y):
return (y - y_intercepts) / slopes

至于替换 daframe 值:

intercepts = get_horizontal_intercept(256)
intercepts[np.isinf] = df['x1']
df['x1'] = intercepts.round(1)

正如你所想象的,其他列可以类似地填充......

>>> df

x0 y0 x1 y1
199 162.2 246.8 107.0 240.2
441 324.5 55.4 457.0 114.6
903 209.0 236.0 258.1 236.0
1272 241.4 233.6 249.8 275.3
1431 142.4 230.6 133.3 286.6

关于python - 如何计算两条线之间的交点,其中一条线由数据框列定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60295331/

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