-1

我正在制作一个基本应用程序,它只在 C# 中沿曲线写入像素。

我在这个网站上发现了一个看起来很有希望的公式我相信这个网站也在这里谈论同样的事情。

我真正不明白的是如何实现它。我尝试查看第一个链接上的 JavaScript 代码,但我无法确定我需要提供哪些数据。涉及 PVC、PVI 或 PVT 的东西是我不明白的东西。

我要设置的示例情况是两个等级(垂直倾斜/下降)都只有 5 和 -5。假设点 1 位于 0, 0 处,点 2 位于 100, 100 处。

有人可以解释公式中的一些晦涩的变量吗?我将如何使用公式来绘制曲线?

4

1 回答 1

3

通常,要在 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(尽管为什么有人会关心这一点是超越我)。

于 2012-04-13T00:25:23.537 回答