Эти три класса недопустимых полигонов нужно будет проверить независимо.
Случай B:
Убедитесь, что в вашем многоугольнике нет повторяющихся вершин.
Случай C:
Убедитесь, что вершины не соприкасаются ни с какими ребрами.Предполагая, что вы используете числа с плавающей запятой, это может быть сложно, потому что числа с плавающей запятой должны быть равны.Это можно обойти, сказав, что они не могут находиться в пределах некоторого EPS
друг от друга, но это может сделать недействительными некоторые другие многоугольники, которые только почти недействительны.Я лично использовал бы EPS
сам, если бы мне действительно не требовалась предельная точность (в этот момент я не знаю, что я буду делать).
Случай D:
Как вы сказали, этоможно найти, проверив, пересекаются ли какие-либо ребра.
Случай E: два ребра перекрываются (пересекаются в бесконечном количестве точек), а их вершины нет.
Я не уверен, если это необходимобыть отдельным случаем, но эта ситуация не может быть поймана проверкой для случая D (я думаю, что вы в конечном итоге делится на ноль).Поэтому вам также необходимо проверить, что два ребра не соответствуют точно одной и той же линии.
На данный момент я не могу представить ни одного другого случая