我编写了一个 Graham 扫描凸包算法的实现,测试数据使用了这些点。
根据我的程序,凸包是:
然而,我预期凸包应该是
我也使用https://github.com/shadwstalkr/GrahamScanDemo/尝试了我的点集,结果得到了相同的解决方案。在大声抱怨后,我在维基百科上读到了这样一句话:“如果对于物体内的每一对点,连接它们的直线段上的每一点也在物体内,则该物体是凸的。”
[(2.0,2.0),(4.0,2.0),(0.5,2.5),(3.0,3.5),(1.0,4.0),(0.0,4.0),(1.0,1.0),(3.0,2.5),(4.0,4.0),(3.5,1.5),(0.5,1.0)]
根据我的程序,凸包是:
[(0.0,4.0),(1.0,4.0),(4.0,4.0),(3.0,2.5),(4.0,2.0),(3.5,1.5),(1.0,1.0),(0.5,1.0)]
然而,我预期凸包应该是
[(0.0,4.0),(1.0,4.0),(4.0,4.0),(4.0,2.0),(3.5,1.5),(1.0,1.0),(0.5,1.0)]
我也使用https://github.com/shadwstalkr/GrahamScanDemo/尝试了我的点集,结果得到了相同的解决方案。在大声抱怨后,我在维基百科上读到了这样一句话:“如果对于物体内的每一对点,连接它们的直线段上的每一点也在物体内,则该物体是凸的。”
在画出我的点和外壳后,似乎我的程序产生了一个符合该定义的物体,但这是否意味着只需按角度排序即可获得凸包,而不需要任何外壳中的点?
我是否没有理解什么是凸包,正在尝试解决不同的问题,还是我的实现和shadwstalkr都是错误的?