问题
用户可以按任何顺序提供最多四个纬度和经度坐标.他们使用谷歌地图.使用Google的PolygonAPI(v3),他们选择的坐标应突出显示四个坐标之间的选定区域.
题
如何按(逆时针)顺序排列纬度和经度坐标数组?
解决方案和搜索
StackOverflow问题
相关网站
已知算法
码
这是我到目前为止:
// 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) 我正在使用格雷厄姆扫描算法找到一组点的凸壳,我试图按极角对点进行排序,但我不知道怎么做(我已经按照他们的方式对点集进行了排序) 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)
如果有人能帮助我,我会很高兴的.
我正在尝试计算矩形联合的周长,其中我有左下角和右上角的点。每个矩形都位于 x 轴上(每个矩形的左下角是 (x, 0))。我一直在研究这样做的不同方法,似乎 Sweep-Line 算法是最好的方法。我也看过格雷厄姆扫描。我的目标是 O(n log n) 算法。老实说,虽然我对如何进行迷失了方向,但我希望这里的某个人可以尽最大努力为我简化它,并尝试帮助我准确了解如何实现这一目标。
我从我所做的研究中收集到的一些东西:
我们需要对点进行排序(我不确定我们对它们进行排序的标准)。
我们将分而治之(以实现 O(log n))。
我们需要计算交点(最好的方法是什么?)
我们需要某种数据结构来保存点(也许是二叉树?)
我最终会在 Java 中实现这个算法。
我正在尝试实现Graham\xe2\x80\x99s 扫描算法,并且无法按相对于 y 值最低的点的极角对点进行排序。
\n\n我找到了这个答案并了解如何计算极角,但不了解如何对点进行排序。
\n\n我见过的实现是Collections.sort()使用的实现,但它们似乎都不适用于我想要使用的 Point2D 类,因为我希望能够将双精度作为坐标。
基本上我希望能够对ArrayList<Point2D>按极角对同一个 ArrayList 中 y 值最低的点进行排序。
有人可以帮我解决这个问题吗?谢谢。
\nJarvis:对于具有 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
grahams-scan ×5
java ×3
algorithm ×2
convex-hull ×2
geometry ×2
cgal ×1
coordinates ×1
javascript ×1
sorting ×1