首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2维数学地理方向

2维数学地理方向
EN

Stack Overflow用户
提问于 2009-11-29 08:56:02
回答 3查看 807关注 0票数 0

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

如果垂直线在线上,那就意味着它的南边。

如果右边的点意味着它的东边。

如果左边的点表示西边。

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

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

我的问题是,这个逻辑在纸面上看起来很好,但真的很难决定它是NW,NE,SW还是SE情况。有人能建议我如何计算这个逻辑吗??我正在使用C++,但是算法在任何语言中都会有很大的帮助。

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

干杯

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-29 17:23:10

  • 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) ;;但不要除以zero!
  • multiply theta by 180/PI以获得学位

度数从x轴的正侧逆时针方向旋转。最终,您将需要做少量的代数操作来重定向度数,以便0向上(而不是向右)并顺时针方向运行。但在此之前:

一个问题是arctan (1 / -1)arctan (-1 / 1)是一样的。也就是说,对于左上角(需要180度偏移)和右下角(可以按原样),你会得到-PI/4弧度或-45度。您必须对delta_ydelta_x的符号进行测试,以查看arctan的结果是否需要调整。

在对解决方案进行编码之前,请确保还对测试进行了编码,以确保所调用的函数生成期望值。

票数 1
EN

Stack Overflow用户

发布于 2009-11-29 09:52:49

我很同情ndim。计算从一个点到另一个点的方向很容易。我不明白哪种上下文需要你想要一条线的方向。这是一个地图应用程序吗?有没有一条路,沿着一段路走到一半,你就会在边上找到一些点?

票数 1
EN

Stack Overflow用户

发布于 2009-11-29 09:09:04

线段的“北”或“北”或“东”的语义实际上是什么意思还不清楚。

像“北”、“东”或“东北”这样的方向通常用来描述一个点相对于另一个点(基点)的位置。用作该基点的直线段上的点是什么?

EDIT:既然您说要使用端点(x2,y2)作为指南针的中心点,那么将通过检查增量向量(x-x2,y-y2)来定位相对于指南针的点(x,y)

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1814302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档