如何计算python中一个点和一个交叉线之间的距离?

时间:2015-10-16 04:48:40

标签: python math scipy

我的数学生锈了,不知道如何计算从最高点H到N点中间2个最低点之间的交点的干扰。

Picture of the Chart

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

3 个答案:

答案 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

请参阅http://pythonfiddle.com/SO-33162756/

答案 2 :(得分:0)

这不能直接回答你的问题,但也许你想要查看 awesome python模块shapely

您可以使用模块创建几何对象,例如LineStringsPoints

简单地致电:

  

object.project(其他[,normalized = False])

     

返回沿此几何对象到最近点的距离   另一个对象。

会给你答案。

这是它的文档: Shapely Documentation