我的数学生锈了,不知道如何计算从最高点H到N点中间2个最低点之间的交点的干扰。
import matplotlib.pyplot as plt
from scipy import interpolate
import numpy as np
y= [10.5,10,12,13,10,11,16,10,9,13,10]
x= np.linspace(1, len(y), len(y), endpoint=True)
dist = np.linalg.norm(y-x)
print dst
fig, ax = plt.subplots(figsize=(8, 6))
ax.plot(x, y, color='red')
答案 0 :(得分:1)
import heapq
import operator
import math
y = [10.5,10,12,13,10,11,16,10,9,13,10]
x= np.linspace(1, len(y), len(y), endpoint=True)
y1,y2 = heapq.nsmallest(2, enumerate(y), key=operator.itemgetter(1))
x1,y1 = y1
x1 = x[x1]
x2,y2 = y2
x2 = x[x2]
m = (y2-y1)/(x2-x1)
print("Equation of line: y = {}(x-{}) + {}".format(m, x1, y1))
apexPoint = (5,4) # or wherever the apex point is
X,Y = apexPoint
M = 1/m
print("Equation of perpendicular line: y = {}(x-{}) + {}".format(M, X, Y))
intersect_x = ((M*X)+Y-(m*x1)-y1)/(M-m)
intersect_y = m*(intersect_x - x1) + y1
dist = math.sqrt((X - intersect_x)**2 + (Y - intersect_y)**2) # this is your answer
答案 1 :(得分:0)
我查看了你的图表。线不垂直。它是从点到线段的垂直线。
假设你的顶点是(x0,y0),你的基点是(x1,y1)和(x2,y2):
连接2个点(x1,y1)和(x2,y2)的线的等式是:
y = (y2-y1)/(x2-x1) * x + (y2 * (x2-x1) - x1 * (y2-y1)) / (x2-x1)
在线上获得y拦截:
ymid = (y2-y1)/(x2-x1) * x0 + (y2 * (x2-x1) - x1 * (y2-y1)) / (x2-x1)
你的距离是:
y0 - ymid
答案 2 :(得分:0)
这不能直接回答你的问题,但也许你想要查看 awesome python模块shapely
。
您可以使用模块创建几何对象,例如LineStrings
,Points
。
简单地致电:
object.project(其他[,normalized = False])
返回沿此几何对象到最近点的距离 另一个对象。
会给你答案。
这是它的文档: Shapely Documentation