【问题标题】:Linear relationships for two (x,y) graphs两个 (x,y) 图的线性关系
【发布时间】:2009-07-22 13:02:56
【问题描述】:

我有来自[coordinates1] 数据库(GIS - 但可以是任何数据库)的x,y 数据。我的应用程序有自己的坐标系,引用同一张地图。

我已经确定坐标1 (x,y) 和coordinates2(x,y) 之间存在线性关系,因为我减去了两个不同的坐标1 和coordinates2(将x1x2y1y2 相除) 并且在所有情况下,我都让它们分别显示 0.724 或 0.141 或 0.825,即坐标 1 + 坐标 2。

我现在需要弄清楚——或者你帮忙——如果coordinates1(100000,200000)coordinates2(0.125,0.255) 如何从coordinates1(x,y) 中的数据计算coordinates2(x,y)

【问题讨论】:

  • 你不能:(100000,200000) 和 (0.125,0.255) 是线性独立的。
  • 好的...所以你有 (x1,y1) 和 (x1',y1') 并且想要从 (x2,y2) 计算 (x2',y2'),对吗?跨度>
  • (100000,200000) 和 (0.125,0.255) 只是示例,因为我不想输入坐标,因为实时数据已获得许可。这是否仍然意味着坐标是线性独立的?
  • 是的,Erich Mirabal 你是对的
  • 两个坐标系的原点(0,0)位置是否相同?

标签: math graph coordinates relationship


【解决方案1】:

为了清楚起见,我将在你的基地中调用坐标(xnyn),以及目标中的坐标 (un, vn)。

现在,如果我们假设:

  1. 两个坐标系的原点相同。
  2. 两个坐标系的方向相同(即一个不相对于另一个旋转)。

在这种情况下,您只需要一组点 {(x1, y1), (u1, v1)} 确定(un的位置, vn):

  • un = u1/x1 * xn
  • vn = v1/y1 * yn

注意:我们必须有 x1 ≠ 0,y1 ≠ 0


另一方面,如果两个坐标系有不同的原点(但它们仍然没有相对于彼此旋转),我们将需要两组点 {(x1, y1), (u1, v1 )} 和 {(x2, y2), (u2, v2)}:

  • un = (u2 - u1)/(x2 - x1) * (xn子> - x1) + u1
  • vn = (v2 - v1)/(y2 - y1) * (yn sub> - y1) + v1

注意:我们必须有 x1x2, y1 y2


现在,如果两个坐标系相对于彼此旋转,您需要(我相信)另外一组匹配坐标。但听起来你不需要那个(除非你的一张地图的北指向不是笔直向上的方向),所以我现在不打算计算数学。 :)

【讨论】:

  • +1。我要写的差不多。这消除了他的模棱两可和其他答案。
  • 这似乎有道理,但我还是有点迷茫。坐标 (538129.75, 169167.5) 从 (0,0) 开始,我的地图上的相同坐标是 (-4.166675, 53.816227),从 (-4.5, 54.5) 开始如果我有新的坐标 (537353.5, 179877) 或 (538051.4174927.5) ) 我仍在苦苦挣扎,因为 U1 为零,你会得到除以零的异常
  • @Vault:我添加了关于除以零可能性的注释。以下是您的数据的变量值:x1=538129.75, y1=169167.5, x2=0, y2=0, u1=-4.166675, v1=53.816227, u2=-4.5, v2=54.5
  • @Vault:给定这些值,对于 (X,Y)=(537353.5, 179877),我得到:U = (-4.5 + 4.166675)/(0 - 538129.75)*(537353.5 - 538129.75 ) - 4.166675 = -4.167156; V = (54.5 - 53.816227)/(0 - 169167.5)*(179877 - 169167.5) - 53.816227 = -53.859515
【解决方案2】:

要进行转换,您需要知道两个坐标系中一个点O 的坐标。

假设O 在坐标系1 中有坐标x1O,y1O,在坐标系2 中有x2O,y2O

那么系统 1 中坐标为 x1,y1 和系统 2 中坐标为 x2,y2 的点将满足:

(x1O - x1) = Kx * (x2O - x2)
(y1O - y1) = Ky * (y2O - y2)

其中KxKy 是比例因子。如果您知道两个系统中另一个点 M 的坐标,那么您将拥有 KxKy

Kx = (x1O - x1M) / (x2O - x2M)
Ky = (y1O - y1M) / (y2O - y2M)

然后,你只需要应用第一个关系从一个系统到另一个系统,

x1 = x1O - Kx * (x2O - x2)
y1 = y10 - Ky * (y2O - y2)

x2 = x2O - (x1O - x1) / Kx
y2 = y2O - (y1O - y1) / Ky

你还需要代码吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 2018-03-25
    • 2016-10-24
    相关资源
    最近更新 更多