кривая растяжения до точки python - PullRequest
1 голос
/ 22 апреля 2020

У меня есть кривая, и я хочу зафиксировать начальную точку и перетащить конечную точку на синюю точку, сохраняя при этом общую форму кривой (растягивая и сжимая ее). Есть мысли, как мне это сделать?

import matplotlib.pyplot as pl
import numpy as np

x = np.linspace(1, 10)

def f(x):
    return np.sin(x) + np.random.normal(scale=0.1, size=len(x))

pl.plot(x, f(x))

pl.plot(8,.2,'bo')

Кривая с точкой

ОТВЕТ


#shift the end point to the dot
shift_x = 10-x[-1]
shift_y = .2-y[-1]


#shift the data
x=x+shift_x
y=y+shift_y

pl.plot(x,y)
pl.plot(10,.2,'bo')

смещение конечной точки в нужное место


#shift the data back to the original points based on how close it is
#to the end point
gradient_x = shift_x/len(x)
gradient_y = shift_y/len(y)

for i in range(len(x)):
    y[i] = y[i]-(len(x)-i)*gradient_y
    x[i] = x[i]-(len(x)-i)*gradient_x

pl.plot(x,y)
pl.plot(10,.2,'bo')

Все 3 преобразования

1 Ответ

0 голосов
/ 22 апреля 2020

Вы можете использовать простую шкалу для растяжения:

x_scale = (blue_x - x0) / (x1 - x0)
y_scale = (blue_y - y0) / (y1 - y0)

, а затем преобразовать все точки кривой:

new_x = (old_x - x0) * x_scale + x0
new_y = (old_y - y0) * y_scale + y0

при условии (x0, y0) - начало кривая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...