У меня есть кривая Безье и я пытаюсь пересечь ее вертикальной линией. У меня нет фона в математике, поэтому я надеялся найти точку пересечения с помощью функции пересечения без необходимости решать линейные уравнения. Любая помощь будет принята с благодарностью!Линия и пересечение кривой в питоне с использованием кривой Безье и вертикальной линии
Вот то, что я до сих пор
#!/bin/python
import matplotlib.pyplot as plt
from matplotlib.path import Path
from matplotlib.lines import Line2D
import matplotlib.patches as patches
import matplotlib.ticker as plticker
import numpy as np
from matplotlib import cbook
from shapely.geometry import LineString, Point
verts = [
(0., 0.), # P0
(0, 100), # P1
(100, 0), # P2
(100, 100), # P3
]
codes = [Path.MOVETO,
Path.CURVE4,
Path.CURVE4,
Path.CURVE4,
]
path = Path(verts, codes)
fig = plt.figure()
ax = fig.add_subplot(111)
patch = patches.PathPatch(path, facecolor='none', lw=2, picker=0)
#add the line
ax.add_patch(patch)
xs, ys = zip(*verts)
#add the handles lines
#ax.plot(xs, ys, 'x--', lw=2, color='black', ms=10)
#ax.text(1, 1, 'P0')
#ax.text(20, 4, 'P1')
#ax.text(96, 80, 'P2')
#ax.text(96, 96, 'P3')
ax.set_xlim(-0.1, 100.1)
ax.set_ylim(-0.1, 100.1)
intervals = float(5)
loc = plticker.MultipleLocator(base=intervals)
ax.xaxis.set_major_locator(loc)
ax.yaxis.set_major_locator(loc)
ax.grid(True,'both')
#################
print ""
#print zip(*path.iter_segments(stroke_width=10.0,curves=False))
def on_move(event):
#thisline = event.artist
xmouse, ymouse = event.xdata, event.ydata
#print "x: ", str(xmouse), ", y: ", str(ymouse)
def on_click(event):
xmouse, ymouse = event.xdata, event.ydata
print xmouse
newline = Line2D([xmouse,xmouse], [0,100])
ax.add_line(newline)
fig.canvas.draw()
fig.canvas.mpl_connect('motion_notify_event', on_move)
fig.canvas.mpl_connect('button_press_event', on_click)
###############
plt.show()
Но почему бы не только решить уравнение в любом случае? Просто потому, что у вас нет фона, это не значит, что не так много сайтов, которые объясняют, как это сделать. Для кубических кривых вы будете внедрять алгоритм Кардано, объясненный в нескольких местах в Интернете. Вы решаете его отдельно для каждого измерения, а затем видите, какие решения найдены не только в одном, но и том и другом, и это ваши ответы. –
Я знаю, что это не решает проблему, а вычисляет эти типы линий ... Примечание для себя: Многочлен нечетной степени создаст инвертированную s-кривую, как показано на изображении. Например, y = x^3, y = x^5, y = x^7. Существует два вида переводов, которые мы можем сделать с графиком функции. Они меняются и масштабируются. Это можно сделать, используя формулу. 'a' - вертикальная шкала, b - горизонтальная шкала, c - вертикальный сдвиг, d - горизонтальный сдвиг. y = a * (b (xc)) + d, например, это должно привести к аналогичному графику изображения в исходном столбце: y = 0,1415 * (0,1415 * (x-50))^3 + 50 –
Нет, t: в то время как It * может * показывать кривую S, правило, которое вы указали, справедливо только для истинного многочлена - то, что кривые Безье не являются.Во-первых, это не простые полиномиальные функции, а * параметрические функции * с полиномиальным базисом, поэтому нет никакой гарантии, что поведение в одном измерении переносится на два или более. Кроме того, кривые Безье даже не используют полные полиномы, а * разделы * полинома, поэтому даже в одном измерении им не нужно полностью подчиняться одному и тому же правилу общей формы. См. Http://pomax.github.io/bezierinfo/#extended –