【问题标题】:2D Mathematics Geographical Directions二维数学地理方向
【发布时间】:2009-11-29 00:56:02
【问题描述】:

我正在尝试使用东南西北方向的逻辑检查 2D 图形上点 (px, py) 相对于线段 (lx1, ly1) (lx2, ly2) 的位置。我实现的逻辑是从该点在线段上画一条垂线。

如果垂直线在线上,则表示它的南边。

如果右边的点是它的东边。

如果左侧的点表示西。

如果垂直方向远离直线,则表示北。

如果垂直线向后远离线,则意味着南。

我的问题是这个逻辑在纸面上看起来不错,但很难确定它是 NW、NE、SW 还是 SE 案例。谁能建议我如何计算这个逻辑?我正在使用 C++,但任何语言的算法都会有很大帮助。

我正在使用线段的端点来计算南北东西关系。

干杯

【问题讨论】:

    标签: math 2d


    【解决方案1】:
    • delta_x = x2 - x1
    • delta_y = y2 - y1
    • distance = sqrt (delta_x^2 + delta_y^2)
    • tan (theta) = delta_y / delta_x
    • theta = arctan (delta_y / delta_x);; 但不要除以零!
    • theta 乘以180/PI 得到度数

    度数是从 x 轴的正侧逆时针方向。最终,您需要做少量代数来重新调整度数,使 0 向上(而不是向右)并顺时针运行。但在此之前:

    一个问题是arctan (1 / -1)arctan (-1 / 1) 相同。 ,对于左上角(需要 180 度偏移)和右下角(按原样),您将获得 -PI/4 弧度或 -45 度。您必须对delta_y 的符号进行测试vs. delta_x 的结果是否需要调整arctan

    在编写解决方案之前,请务必编写测试代码,以确保您调用的函数产生预期值。

    【讨论】:

    • 使用大多数数学库中可用的atan2() 函数调用来避免被零除的问题。
    • 哦,给定一个以弧度表示的角度(如 arctan() 所做的那样),您可以通过乘以 180/PI 而不是乘以 2*PI 来获得度数。
    • 大家好,感谢您的帮助。我会尝试这些建议并更新您。
    【解决方案2】:

    我很同情ndim。计算从一个点到另一个点的方向很容易。我不明白哪种情况会要求您从一条线上获得方向。这是地图应用程序吗?有一条路吗?在路段的一半左右,你有一点偏向一边?

    【讨论】:

    • 嗨,是的,它是一款公路类游戏。你能告诉我如何计算从一个点到另一个点的方向吗???
    【解决方案3】:

    线段的“北”或“NE”或“东”的实际含义尚不清楚。

    诸如“北”或“东”或“NE”之类的方向通常用于描述一个点相对于另一个(基)点的位置。您用作该基点​​的线段上的点是什么?

    编辑: 既然您说要使用端点(x2,y2) 作为罗盘的中心点,那么将通过检查增量来相对于罗盘定位点(x,y)矢量(x-x2,y-y2).

    易于推理的方法在增量向量上使用atan2(),并考虑atan2()返回的角度。

    但是,将atan2() 的参数相互比较并从中确定结果角度范围也可能是个好主意。这基本上避免了在运行时调用atan2(),代价是您需要在编译时(或之前)进行一些计算。

    【讨论】:

      猜你喜欢
      • 2018-08-31
      • 2012-08-29
      • 2014-04-03
      • 1970-01-01
      • 1970-01-01
      • 2017-10-30
      • 1970-01-01
      • 2021-01-31
      相关资源
      最近更新 更多