贾维斯Jarvis前进的算法可以返回未分类的结果吗?

问题描述

我正在尝试为非常复杂的点集计算复杂的船体。查看图片

enter image description here

左侧的绿色/蓝绿色线包含彼此相邻的凸包点,即彼此紧挨着的凸包点。继续该序列,下一个点应该是右下角的青色/绿色。

但是,如果我沿着数组走动,则下一个似乎是右上角的黄色。

是的,输出为ascii,点云是正确的(与GUI输出相比)。

摘要

for(int i = 0; i< rd.length; i++) {
if( (*rd)[i].lon < lonMin) {
     lonMin = (*rd)[i].lon;
     leftMostPos = i;
}
}


 int [] hullIdx = new int[0];

 int p = leftMostPos,m = to!int((*rd).length),q;

 do {

    hullIdx ~= [p];

    q = (p + 1) % m;

    for ( int ij = 0; ij < m ; ij ++) {

         auto a = (*rd)[p];
         auto b = (*rd)[ij];
         auto c = (*rd)[q];

         double ornt = (b.lat - a.lat) * ( c.lon - b.lon) - (b.lon - a.lon) * (c.lat - b.lat) ;
         if (ornt < 0) q = ij;


      }
      p = q;

 } while ( p != leftMostPos);

语言是D,我正在解决地理纬度和经度问题。以Lons为坐标,lats为x坐标。矩阵朝下方向逐行增加y坐标。也要考虑到这一点。

我想知道Jarvis算法如何返回未排序的输出。非常感谢您的帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)