通常,要在 2D 中绘制曲线,您需要更改一个参数,然后收集 x、y 点对并绘制这些对。在您的情况下,只需改变水平距离(x),然后收集相应的 y 值,然后您可以绘制这些值。
至于公式,就很不清楚了。基本上它只是一条抛物线,周围有一堆(定义不明确的)行话。要绘制此图,您希望将 x 从 0 变为 L(这并不明显,顺便说一句,我必须计算出数学,即如何改变 x 以使斜率与图中所建议的一样,无论如何,它是 0 到 L,他们应该这么说)。
我现在没有运行 C#,但希望你可以翻译这个 Python 代码:
from matplotlib.pyplot import plot, show
from numpy import arange
G1 = .1 # an initial slope (grade) of 10% (note that one never uses percentages directly in calculations, it's always %/100)
G2 = -.02 # a final slope (grade) of 2%
c = 0 # elevation (value of curve when x=0, that is, y at PVC
L = 10. # the length of the curve in whatever unit you want to use (ft, m, mi, etc), but this basically sets your unit system
N = 1000 # I'm going to calculate and plot 100 points to illustrate this curve
x = arange(0, L, float(L)/N) # an array of N x values from 0 to (almost) L
# calculate the curve
a = (G2-G1)/(2*L)
b = G1
y = a*x*x + b*x + c # this is shorthand for a loop y[0]=a*x[0]*x[0] + b*...
plot(x, y)
show()
print (y[1]-y[0])/(x[1]-x[0]), (y[-1]-y[-2])/(x[-1]-x[-2])
最后一行打印初始斜率和最终斜率作为检查(在 Python 中从数组后面的 neg 索引计数),这与我为 G1 和 G2 指定的匹配。情节看起来像:
至于您的要求:“我要设置的示例情况是两个等级(垂直倾斜/下降)都只有 5 和 -5。假设点 1 在 0、0 和点 2 是 100, 100.",在抛物线中,你基本上得到了三个自由参数(对应于 a、b 和 c),我认为,在这里,你过度指定了它。
什么是 PVC、PVT 和 PVI?PVC:起点,所以Y_PVC是起点的高度。PVT:终点。PVI:如果你在初始斜率 G1(即左侧曲线的切线)从 PVC 画一条线,并且类似地从 PVT,它们相交的点称为 PVI(尽管为什么有人会关心这一点是超越我)。