【问题标题】:Area of a curve between intersection points on a plane平面上交点之间的曲线面积
【发布时间】:2016-04-20 01:07:56
【问题描述】:

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

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')

图表如下:

现在我需要找到 pt_array 线下方所有曲线的区域。我该怎么做?任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: python numpy scipy curve


    【解决方案1】:

    要找到曲线的面积,您可以执行以下步骤:

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

    交点(x<sub>i</sub>, pt)和子线点(x<sub>j</sub>, y<sub>j</sub>)之间的三角形面积(标记为A的区域)就是0.5 * (x<sub>j</sub> - x<sub>i</sub>) * (pt - y<sub>j</sub>)。对于标记为 C 的区域,只需颠倒 x 坐标的顺序即可。

    两个子线点(x<sub>i</sub>, y<sub>i</sub>)(x<sub>j</sub>, y<sub>j</sub>)之间的梯形面积(标记为B的区域)为0.5 * (x<sub>j</sub> - x<sub>i</sub>) * (y<sub>i</sub> + y<sub>j</sub>)

    右侧的区域 A、C 显示了一个角落案例,您可能需要或可能不需要以不同方式处理,其中三角形区域之间没有梯形区域。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-07
      • 2019-08-15
      • 2019-02-07
      • 2017-10-12
      • 2016-11-19
      相关资源
      最近更新 更多