Classificando vértices de células voronoi para calcular polígono

Atualmente, estou tentando obter as células cortadas de uma interseção Polygon-Voronoi.

Aqui está o que eu tenho até agora:

Eu tenho um polígono e calculei alguns pontos para calcular um diagrama de voronoi e as linhas vermelhas na figura abaixo são as arestas de voronoi. Depois, usei um algoritmo para obter os pontos dos cantos de todas as células e agora preciso obtê-los na direção certa (no sentido horário) para gerar o polígono da célula.

Cantos encontrados para uma célula

Primeiro eu estava usando este método:

private List<Vector> sortClockwise(List<Vector> points)
    {
        points = points.OrderBy(x => Math.Atan2(x.X, x.Y)).ToList();
        return points;
    }

mas em alguns polígonos côncavos especiais, isso não funciona e a ordem correta é confusa.

Alguém tem uma sugestão ou sugestão de como isso pode ser feito da maneira mais simples? Considere que os pontos do polígono já estão na ordem correta e os cantos do voronoi estão misturados e precisam ser classificados nos pontos do polígono.

Minha ideia:

Encontre o primeiro ponto poligonal nos cantos da célulasiga a direção do polígono e veja se o ponto de voronoi está nessa linha.se sim: obtenha o ponto final da borda voronoi encontrada e procure as bordas voronoi compartilhadas.se arestas compartilhadas forem encontradas, sempre escolha a mais corretafaça até chegar ao ponto do punho

Essa é a única maneira de fazer isso?

EDIT - UPDATE

Ok, eu tenho algum tipo de meia resposta agora.

Como eu disse, tenho todos os vértices que pertencem a uma das células dos voronoi, mas a ordem ainda está confusa, então pensei que poderia classificá-los por ângulo do centróide da seguinte forma:

private List<Vector> sortClockwiseBySentroid(List<Vector> points, Vector center)
    {
        points = points.OrderBy(x => Math.Atan2(x.X - center.X, x.Y - center.Y)).ToList();
        return points;
    }

Mas isso nem sempre funciona. Aqui estão os exemplos quando está funcionando e quando não está. O problema é que, nas arestas côncavas, o ângulo do centro para o canto às vezes é menor do que o que realmente preciso. Alguma sugestão sobre como consertar isso?

Aqui está funcionando

Aqui não está funcionando ...

questionAnswers(1)

yourAnswerToTheQuestion