diff --git a/src/MissionManager/SurveyMissionItem.cc b/src/MissionManager/SurveyMissionItem.cc index 91d2989..80c2367 100644 --- a/src/MissionManager/SurveyMissionItem.cc +++ b/src/MissionManager/SurveyMissionItem.cc @@ -554,53 +554,6 @@ void SurveyMissionItem::_swapPoints(QList& points, int index1, int inde points[index2] = temp; } -QList SurveyMissionItem::_convexPolygon(const QList& polygon) -{ - // We use the Graham scan algorithem to convert the possibly concave polygon to a convex polygon - // https://en.wikipedia.org/wiki/Graham_scan - - QList workPolygon(polygon); - - // First point must be lowest y-coordinate point - for (int i=1; i angle) { - _swapPoints(workPolygon, i, j); - angle = _dp(workPolygon[0], workPolygon[j]); - } - } - } - - // Perform the the Graham scan - - workPolygon.insert(0, workPolygon.last()); // Sentinel for algo stop - int convexCount = 1; // Number of points on the convex hull. - - for (int i=2; i<=polygon.count(); i++) { - while (_ccw(workPolygon[convexCount-1], workPolygon[convexCount], workPolygon[i]) <= 0) { - if (convexCount > 1) { - convexCount -= 1; - } else if (i == polygon.count()) { - break; - } else { - i++; - } - } - convexCount++; - _swapPoints(workPolygon, convexCount, i); - } - - return workPolygon.mid(1, convexCount); -} - /// Returns true if the current grid angle generates north/south oriented transects bool SurveyMissionItem::_gridAngleIsNorthSouthTransects() { @@ -695,8 +648,6 @@ void SurveyMissionItem::_generateGrid(void) qCDebug(SurveyMissionItemLog) << "vertex:x:y" << vertex << polygonPoints.last().x() << polygonPoints.last().y(); } - polygonPoints = _convexPolygon(polygonPoints); - double coveredArea = 0.0; for (int i=0; i& lineList, c void SurveyMissionItem::_intersectLinesWithPolygon(const QList& lineList, const QPolygonF& polygon, QList& resultLines) { resultLines.clear(); + for (int i=0; i intersections; + // Intersect the line with all the polygon edges for (int j=0; j 1) { + QPointF firstPoint; + QPointF secondPoint; + double currentMaxDistance = 0; + + for (int i=0; i currentMaxDistance) { + firstPoint = intersections[i]; + secondPoint = intersections[j]; + currentMaxDistance = newMaxDistance; + } + } + } + + resultLines += QLineF(firstPoint, secondPoint); } } } diff --git a/src/MissionManager/SurveyMissionItem.h b/src/MissionManager/SurveyMissionItem.h index 307042c..92b084f 100644 --- a/src/MissionManager/SurveyMissionItem.h +++ b/src/MissionManager/SurveyMissionItem.h @@ -217,7 +217,6 @@ private: qreal _ccw(QPointF pt1, QPointF pt2, QPointF pt3); qreal _dp(QPointF pt1, QPointF pt2); void _swapPoints(QList& points, int index1, int index2); - QList _convexPolygon(const QList& polygon); void _reverseTransectOrder(QList>& transects); void _reverseInternalTransectPoints(QList>& transects); void _adjustTransectsToEntryPointLocation(QList>& transects);