Нахождение пересечения между квадратичной c и линией - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь найти пересечение между прямой и квадратичной кривой c, однако результат, который я получаю, кажется мнимым, хотя я не понимаю, как это может быть, поскольку я вижу, как они пересекаются по реальным осям:

Import numpy
#quadratic coefficients



a,b,c = (-3.09363812e-04, 1.52138019e+03, -1.87044961e+09)

# y = ax^2 + bx + c



#line coefficients

m,d = (1.06446434e-03, -2.61660911e+03)

#y = mx + d



intersect = (-(b-m)+((b-m)**2 - 4*a*(c-d))**0.5)/(2*a)

print(intersect)

Вывод этого 2458883.4674943495-107.95731226786134j

Я пытаюсь найти пересечение между желтой кривой над синими точками и черной пунктирной линией

1 Ответ

0 голосов
/ 24 марта 2020

Графики, представленные вами в сравнении с вашими уравнениями, не совпадают, и ваши уравнения не пересекаются.

Я переписал для вас пример кода. numpy не требуется, и точное решение возможно.

import math
import collections


def calculateIntersection(p, l):
  b = p.B - l.slope
  c = p.C - l.yInt

  discriminant = b**2 - (4 * p.A * c)

  if discriminant > 0.0:
    # 2 points of intersection
    x1 = (-b + math.sqrt(discriminant)) / (2.0 * p.A)
    x2 = (-b - math.sqrt(discriminant)) / (2.0 * p.A)

    return discriminant, [(x1, l.slope * x1 + l.yInt), (x2, l.slope * x2 + l.yInt)]

  elif discriminant == 0.0:
    # 1 point of intersection
    x1 = -b / (2.0 * p.A)

    return discriminant, [(x1, slope * x1 + l.yInt)]
  else:
    # no points of intersection
    return discriminant, []


Line = collections.namedtuple('Line', 'slope yInt')
Poly = collections.namedtuple('Poly', 'A B C')

p = Poly(A=-3.09363812e-04, B=1.52138019e+03, C=-1.87044961e+09)
print(p)

l = Line(slope=1.06446434e-03, yInt=-2.61660911e+03)
print(l)

(discriminant, points) = calculateIntersection(p, l)

if (len(points) > 0):
  print("Intersection: {}".format(points))
else:
  print("No intersection: {}".format(discriminant))
...