Как я могу сделать это эффективно
Рассмотрим следующий код:
#include <string>
класс пересекается {
общественный:
статические конструкторы и перекрытия(СТД::строка polygonA, СТД::строка polygonB);
};
боол пересекаются::внахлест(СТД::строка polygonA, СТД::строка polygonB) {
// реализация идет здесь
вернуть true;
}
Реализуйте метод Intersect::overlap, чтобы он возвращал true, если существует перекрытие с двумя выпуклыми полигонами polygonA и polygonB, предоставленными в качестве входных данных, и возвращал false, если такого перекрытия не существует. Он также должен работать с невыпуклыми многоугольниками.
все должно быть реализовано внутри статического метода. Проверьте, нет ли точек по часовой стрелке.
экс:
формат ввода: std::string polygonAlpha = "0 0,0 1,2 0,0 0";
std::string polygonBravo = "1 0,1 1,3 0,1 0";
std::string polygonCharlie = "2 2,2 3,4 2,2 2";
Что я уже пробовал:
std::vector<int> vect; std::vector<int> vect1; std::stringstream ss(polygonA); std::stringstream ss1(polygonB); for (int i; ss >> i;) { vect.push_back(i); if (ss.peek() == ',') ss.ignore(); } for (int i; ss1 >> i;) { vect1.push_back(i); if (ss.peek() == ',') ss.ignore(); } // if signed area of a polygon is negative then it's clockwise oriented if it's positive counter clockwise oriented int signedarea=0; signedarea=signedarea+ (vect[0]*vect[3]-vect[1]*vect[2])+vect[2]*vect[5]-vect[3]*vect[4]+vect[4]*vect[7]-vect[5]*vect[6]; std::cout << signedarea << std::endl;
Richard MacCutchan
В чем же вопрос?