标签: grahams-scan

将纬度和经度坐标分为顺时针有序的四边形

问题

用户可以按任何顺序提供最多四个纬度和经度坐标.他们使用谷歌地图.使用Google的PolygonAPI(v3),他们选择的坐标应突出显示四个坐标之间的选定区域.

如何按(逆时针)顺序排列纬度和经度坐标数组?

解决方案和搜索

StackOverflow问题

相关网站

已知算法

  • 格雷厄姆的扫描(太复杂了)
  • Jarvis March算法(处理N点)
  • 递归凸壳(删除一个点)

这是我到目前为止:

// Ensures the markers are sorted: NW, NE, SE, SW
function sortMarkers() {
  var ns = markers.slice( 0 );
  var ew = markers.slice( 0 );

  ew.sort( function( a, b ) {
    if( a.position.lat() < b.position.lat() ) {
      return -1;
    }
    else if( a.position.lat() > b.position.lat() ) {
      return 1;
    }

    return 0;
  });

  ns.sort( function( a, b …
Run Code Online (Sandbox Code Playgroud)

javascript geometry coordinates grahams-scan

32
推荐指数
2
解决办法
2万
查看次数

在Java中按极角对点进行排序

我正在使用格雷厄姆扫描算法找到一组点的凸壳,我试图按极角对点进行排序,但我不知道怎么做(我已经按照他们的方式对点集进行了排序) Y坐标).

我已经写过的是这样的:

public double angle(Coord o, Coord a)
{
    return Math.atan((double)(a.y - o.y) / (double)(a.x - o.x));
}
Run Code Online (Sandbox Code Playgroud)

这里Coord是一流的,我有X和Y坐标为double.

我还看了Stack Overflow中的一篇类似文章,其中有人试图用C++实现这个角度,但我不明白qsqrt.我们在Java中有这样的东西吗?

qreal Interpolation::dp(QPointF pt1, QPointF pt2)
{
    return (pt2.x()-pt1.x())/qSqrt((pt2.x()-pt1.x())*(pt2.x()-pt1.x()) + (pt2.y()-pt1.y())*(pt2.y()-pt1.y()));
}
Run Code Online (Sandbox Code Playgroud)

如果有人能帮助我,我会很高兴的.

java grahams-scan

8
推荐指数
2
解决办法
1万
查看次数

计算联合矩形周长的算法

我正在尝试计算矩形联合的周长,其中我有左下角和右上角的点。每个矩形都位于 x 轴上(每个矩形的左下角是 (x, 0))。我一直在研究这样做的不同方法,似乎 Sweep-Line 算法是最好的方法。我也看过格雷厄姆扫描。我的目标是 O(n log n) 算法。老实说,虽然我对如何进行迷失了方向,但我希望这里的某个人可以尽最大努力为我简化它,并尝试帮助我准确了解如何实现这一目标。

我从我所做的研究中收集到的一些东西:

我们需要对点进行排序(我不确定我们对它们进行排序的标准)。

我们将分而治之(以实现 O(log n))。

我们需要计算交点(最好的方法是什么?)

我们需要某种数据结构来保存点(也许是二叉树?)

我最终会在 Java 中实现这个算法。

java algorithm geometry grahams-scan

5
推荐指数
1
解决办法
1483
查看次数

按极角排序

我正在尝试实现Graham\xe2\x80\x99s 扫描算法,并且无法按相对于 y 值最低的点的极角对点进行排序。

\n\n

我找到了这个答案并了解如何计算极角,但不了解如何对点进行排序。

\n\n

我见过的实现是Collections.sort()使用的实现,但它们似乎都不适用于我想要使用的 Point2D 类,因为我希望能够将双精度作为坐标。

\n\n

基本上我希望能够对ArrayList<Point2D>按极角对同一个 ArrayList 中 y 值最低的点进行排序。

\n\n

有人可以帮我解决这个问题吗?谢谢。

\n

java sorting convex-hull grahams-scan

5
推荐指数
2
解决办法
4753
查看次数

Jarvis 算法的输入,比 Graham 的算法(凸包)更快

Jarvis:对于具有 h 个极值点的 n 个输入点,该算法在最坏情况下需要 O(nh) 时间。

Graham:最坏的情况下是 O(nlogn)。

来源 the ref of CGAL, from where I use the two algorithms.

这意味着当 h 小于 logn 时,Jarvis 对于数据集(假设是二维)速度更快。不过,我希望看到它的实际效果,但我未能找到用于此目的的数据集。有人知道吗?

谷歌搜索得到这个链接,它实际上支持我上面所说的。

algorithm convex-hull cgal computational-geometry grahams-scan

2
推荐指数
1
解决办法
978
查看次数