@Kimely

Как попарно соединить вершины многоугольника, что бы линии не пересекались?

Мне это нужно для визуализатора своебразных формул.

Например формула 3р,5р,4р должна выглядеть так
9e41b69ca43c4582a506461245e689f2.png
Я нарисовал кривенько но смысл ясен. Интересует реализация на C# или просто дайте алгоритм я сам напишу.
  • Вопрос задан
  • 3307 просмотров
Пригласить эксперта
Ответы на вопрос 3
aush
@aush
Можно получить список вершин по формулам и по очереди их соеденить. В этом случае линии пересекаться гарантировано не будут.

IEnumerable<Point> GetPoints(int points) // points - количество вершин
{
    return Enumerable.Range(0, points)
        .Select(i => 2 * i * Math.PI / points)
        .Select(arg => new Point
        {
            X = Math.Cos(arg), 
            Y = Math.Sin(arg)
        });
}

struct Point
{
    public double X;
    public double Y;
}


UPD: стало интересно, решил немного порисовать. Получаются примерно такие картинки ppppp.png

По вашему комменту я так и не понял, что именно вы хотите сделать, но если интересно, можете глянуть код: архив с проектом (код лепил по мере появления идей, поэтому имеется некоторая каша; если что будет непонятно - спрашивайте).
Ответ написан
Комментировать
vipuhoff
@vipuhoff
Вам проще всего посмотреть в сторону графов, любую описанную вами формулу (например из химии) можно описать графом, построение которого задача уже 100500 раз решенная, пример можно глянуть тут habrahabr.ru/post/116758
Ответ написан
Комментировать
tsarevfs
@tsarevfs
C++ developer
Вам интересно как это нарисовать или как получить геометрически? Если второе, опишите подробнее в чем задача: что дано и что должно быть на выходе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы