c - Ansi C 重新评估 Y 坐标

标签 c graph coordinates ansi-c

我正在尝试根据评估的数学函数绘制图表,这是我最后认为需要做的。我的图表的限制坐标为 -250:-250 左下和 250:250 右上。我有Y-limit函数,它被定义为-10:10,但它可以是用户重新定义的,如果重新定义,我需要计算新的坐标。

我现在有一个包含 20000 个值的 y 坐标字段,每个值都乘以: ratioY = 25/(fabs( up-limit - down-limit )/20) 这将使坐标适应新的 Y 限制(如果限制为 -5:5,图形看起来会大 2 倍),这很好用,但现在图表不完全在它应该在的位置(见图)。只需将 25 乘以 postscript 坐标,(上限 - 下限)/20 就是“缩放”Y 坐标的比率。这工作得很好。

现在我正在尝试“移动坐标”,该坐标将从重估值中减去: ycoor = (ycoor *ratioY) - move-coorY ;.

现在我有这样的东西: move-coorY = 25* ((上限 - 下限)/2); 并且它无法正常工作。我需要从 0 开始执行 sin(0)。

这是一个正确的图表,为 -10:10

correct one -10:10
(来源:matematika.cz)

这是一个糟糕的图表,为 -5:10

moved one -5:10
(来源:matematika.cz)

最佳答案

也许不使用固定数字(例如您的ratioY)而是使用两个不同的坐标系更容易做到这一点。 物理坐标位于您的问题域中,即它们是正弦曲线的实际值。 逻辑坐标指的是设备,在您的情况下,它们是 Postscript 中的点值,但它们可能是 HTML Canvas 上的像素或其他内容。

我将用小号 x 表示第一个轴的物理坐标,并用大写 X 表示相应的逻辑坐标。在每个坐标系中我们有:

Lower bound:    x_min, X_max
Upper bound:    x_max, X_max
Range:          dx = x_max - x_min
                dX = X_max - X_min

然后您可以根据物理坐标计算逻辑坐标:

X(x) = X_min + (x - x_min) * dX / dx

反之亦然,这对于 Postscript 文件来说不是问题,但对于吸引人的 Canvas 很有用,在 Canvas 上单击鼠标即可产生物理坐标。

x(X) = x_min + (X - X_min) * dx / dX

在您的情况下,比率或比例因子为dX/dx,您可以为每个轴计算一次。让我们在第一个图表中用 y == 0 绘制第一个点:

y_min = -10
y_max = 10
   dy = 20

Y_min = -250
Y_max = 250
   dX = 500

 Y(0) = -250 + (0 - (-10)) * 500 / 20
      = -250 + 10 * 500 / 20
      = 0

在第二张图中,逻辑坐标是相同的,但是:

y_min = -5
y_max = 10
   dy = 15

 Y(0) = -250 + (0 - (-5)) * 500 / 15
      = -250 + 5 * 500 / 15
      = -83.3333

如果您更改图表的范围,例如从(-10, 10)到(-5, 10),只需调整物理坐标即可。如果调整图表大小,请更改逻辑坐标。 (另外,计算图表中的点与计算轴刻度线的位置相同。奇怪的是,你的刻度线是正确的,但不是你的图表。我认为你的问题是考虑非零图形和曲线数据的下限。)

此外,在打印时重新评估逻辑坐标可能比从先前的绘图中转换逻辑坐标更好。您可以即时执行此操作,因此只需将物理数据保存在数组中即可。

(最后,我承认我并不完全确定这两种坐标称为物理逻辑。我知道使用了这些术语,但也可能是相反的情况,或者它们甚至可能意味着完全不同的东西。)

关于c - Ansi C 重新评估 Y 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20925246/

相关文章:

c - 当分配增加超过 malloc 大小时不会出现段错误

代码未正确评估峰值

c - Linux 内核编程 : “Unable to handle kernel NULL pointer dereference at virtual address [address]”

c - 在 C 中查找数据模型

python - 在 Python 中将 xls 文件转换为 csv/txt 文件

matlab - 将 3d 坐标存储在点列表中 Matlab

C - 只有一个指针坐标相加,其余等于0

javascript - Firefox 或 Safari 中的 Highcharts 不是 "graphing"

Graphviz Dot,混合有向和无向

math - 在给定起始坐标、范围、方位角和仰角的情况下获取 ECEF XYZ