平面上交点之间的曲线面积

时间:2016-01-14 16:03:01

标签: python numpy scipy curve

我有一条随机生成的曲线和一条贯穿它的线。我已经使用插值找到了曲线与线的交点坐标。但现在我必须找到这些点之间的曲线区域。我的代码如下:

import numpy as np
import matplotlib.pylab as pl
from matplotlib import mlab
def find_inter_coord(a,x):
    y = a-x
    index = mlab.find((y[1:] >= 0) & (y[:-1] < 0)| (y[1:] < 0) & (y[:-1] >= 0))
    crossing_index = [i - y[i] / (y[i+1] - y[i]) for i in index]
    return crossing_index
data = np.random.uniform(low=-1000, high=-200, size=(100,))
pt = -750.5
pt_array = (pt) * 100
x = find_inter_coord(data, pt)
pl.figure(figsize = (10,5))
pl.plot(data)
pl.plot(pt_array)
pl.scatter(x, [pt for p in x], color='red')

图表如下:

Output Graph 现在我需要找到pt_array行下方所有曲线的区域..我该怎么做?任何帮助都会受到重视。感谢

1 个答案:

答案 0 :(得分:0)

要查找曲线的区域,您可以执行以下步骤:

  1. 找到线下方的所有点(绿点)。
  2. 对于每对交叉点,如果它们之间的线下方有点,请执行以下操作:
    1. 计算三角形的区域,直至行下的第一个数据点(标记为 A 的区域)
    2. 计算连续点之间所有梯形的区域(标记为 B 的区域)
    3. 计算线下最后一个点与下一个交叉点之间的三角形区域(标记为 C 的区域)
  3. enter image description here

    交点(xi, pt)和子线点(xj, yj)之间的三角形区域(标记为 A 的区域)仅为0.5 * (xj - xi) * (pt - yj)。对于标记为 C 的区域,只需颠倒x坐标的顺序。

    两个子线点(xi, yi)(xj, yj)(标记为 B 的区域)之间的梯形区域为0.5 * (xj - xi) * (yi + yj)

    右边的区域A,C显示了一个角落的情况,您可能需要或可能不需要处理不同的角度,三角形区域之间没有梯形区域。