Поскольку вы не показываете свой собственный код, я просто выскажу некоторые идеи.Если вам нужно больше подробностей, включая код, проявите больше усилий, чем спросите.
Я предполагаю, что многоугольник считается простым многоугольником, который не пересекается сам по себе.Если многоугольник пересекает сам себя, определение его «внутри» не так однозначно, и существует несколько определений внутренней части.Я не буду считать, что многоугольник выпуклый - все внутренние углы меньше 180 °.(Это позволит получить более простой ответ.) Я также предполагаю, что вы хотите, чтобы центр вашей метки находился вне многоугольника, но позволил бы углу или небольшой части метки находиться внутри.
Во-первых,Пройдите через многоугольник и найдите его «угол намотки», величина, на которую угол направления изменяется во время обхода.Если многоугольник простой, угол будет либо + 180 °, либо -180 °.Один из них означает, что вы прошли многоугольник по часовой стрелке, а другой - против часовой стрелки.(Это зависит от вашей системы координат: декартовой, графической или другой.)
Затем снова обведите полигон.Теперь, когда вы знаете направление многоугольника, в каждой вершине вы можете определить, идет ли внешний угол по часовой стрелке или против часовой стрелки от входящего сегмента.Найдите это направление и размер угла, затем сдвиньте половину этого угла в этом направлении.Переместитесь на заданное расстояние от вершины вдоль этого угла, и у вас будет положение центра вашей метки.
Это должно хорошо работать для подавляющего большинства полигонов.В некоторых краевых случаях для невыпуклых многоугольников это местоположение перемещалось от многоугольника в другую часть многоугольника.Затем вы уменьшаете расстояние, на которое метка находится от своей вершины, до тех пор, пока метка не переместится обратно внутрь многоугольника.
Я дал ответ на связанный вопрос: Как эффективно определить, является ли многоугольник выпуклым,невыпуклый или сложный? .