首页 > 解决方案 > 如何用线投影绘图的交点?

问题描述

我正在寻找一种方法来使用 x 轴上的垂直不连续线(样式“--”)投影图形的交点,然后在该轴上写入 x 坐标。

这是我寻找交叉点的尝试。由于某种原因,该点并不完全在交叉点上。真奇怪。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

n = 256 
k = np.arange(0, 100) 
g = 1 - np.exp(-0.5 * k * (k - 1) / n)
plt.plot(g, '-')
plt.hlines(0.5, 0, 100, 'r')
idx = np.argwhere(np.diff(np.sign(g - 0.5)))
plt.plot(k[idx], g[idx], 'o')
plt.show()

在此处输入图像描述

标签: pythonnumpymatplotlib

解决方案


正如 tevemadar 的评论中所提到的,您需要通过求解 g = 0.5 的 k 来找到交点,即您绘制 hline 的位置。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

n = 256
k = np.arange(0, 100)
f = 0.5
g = 1 - np.exp(-0.5 * k * (k - 1) / n)
plt.plot(g, '-')

hline_pos = 0.5
plt.hlines(hline_pos, 0, 100, 'r')
# inverse
# np.exp(-0.5 * k * (k - 1) / n) = 1 - g
# -0.5 * k * (k - 1) / n = np.log(1 - g)
# k^2 - k = np.log(1 - g) * (-n/0.5)
solve_for = hline_pos
constant = np.log(1 - solve_for) * (-n/0.5)
ks = np.roots([1, -1, -constant])
ks = np.sort(ks) # sort to get the positive root based on the domain boundaries

plt.scatter(ks[1], hline_pos)
plt.vlines(ks[1], 0, hline_pos, linestyles='--')

plt.show()

在此处输入图像描述


推荐阅读