如何移动二次线?
How to shift a quadratic line?
如何将二次蓝线移动到较低的位置?现在曲线之间的space因为二次函数不一样了。
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
plt.rcParams["figure.figsize"] = [8, 8]
x = np.linspace(-1, 1, 100)
y = x**2
ax.set_ylim(-0.3, 1.06)
ax.plot(x, y)
ax.scatter(1/2*(ax.get_xlim()[0] + ax.get_xlim()[1]), 0.15, marker = 'o', s=900, facecolors='none')
width_l = ax.get_ylim()[1] - ax.get_ylim()[0]
ax.plot(x, y - 0.1*width_l)
plt.show()
期望的结果是两条平行线:
这是一种从曲线计算法线的方法,并在指定为法线的 length
的给定距离处绘制平行线:
import matplotlib.pyplot as plt
import numpy as np
import math
def get_parallels(length=.1):
px, py = [], []
for idx in range(len(x)-1):
x0, y0, xa, ya = x[idx], y[idx], x[idx+1], y[idx+1]
dx, dy = xa-x0, ya-y0
norm = math.hypot(dx, dy) * 1/length
dx /= norm
dy /= norm
px.append(x0-dy)
py.append(y0+dx)
return px, py
fig, ax = plt.subplots()
plt.rcParams["figure.figsize"] = [8, 8]
x = np.linspace(-1, 1, 100)
y = x**2
ax.set_ylim(-0.3, 1.06)
ax.plot(x, y)
for length in (-.3, -.2, -.1, .1, .2, .3, .4):
ax.plot(*get_parallels(length=length))
plt.show()
或绘制一个不合理的数字:
for length in (ndx*.025 for ndx in range(-100, 20) if ndx != 0 ):
ax.plot(*get_parallels(length=length))
如何将二次蓝线移动到较低的位置?现在曲线之间的space因为二次函数不一样了。
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
plt.rcParams["figure.figsize"] = [8, 8]
x = np.linspace(-1, 1, 100)
y = x**2
ax.set_ylim(-0.3, 1.06)
ax.plot(x, y)
ax.scatter(1/2*(ax.get_xlim()[0] + ax.get_xlim()[1]), 0.15, marker = 'o', s=900, facecolors='none')
width_l = ax.get_ylim()[1] - ax.get_ylim()[0]
ax.plot(x, y - 0.1*width_l)
plt.show()
期望的结果是两条平行线:
这是一种从曲线计算法线的方法,并在指定为法线的 length
的给定距离处绘制平行线:
import matplotlib.pyplot as plt
import numpy as np
import math
def get_parallels(length=.1):
px, py = [], []
for idx in range(len(x)-1):
x0, y0, xa, ya = x[idx], y[idx], x[idx+1], y[idx+1]
dx, dy = xa-x0, ya-y0
norm = math.hypot(dx, dy) * 1/length
dx /= norm
dy /= norm
px.append(x0-dy)
py.append(y0+dx)
return px, py
fig, ax = plt.subplots()
plt.rcParams["figure.figsize"] = [8, 8]
x = np.linspace(-1, 1, 100)
y = x**2
ax.set_ylim(-0.3, 1.06)
ax.plot(x, y)
for length in (-.3, -.2, -.1, .1, .2, .3, .4):
ax.plot(*get_parallels(length=length))
plt.show()
或绘制一个不合理的数字:
for length in (ndx*.025 for ndx in range(-100, 20) if ndx != 0 ):
ax.plot(*get_parallels(length=length))