У меня есть другая перспектива ответить на это.
При работе на разных уровнях, например, в приложении MVC, контроллеру нужны службы для вызова бизнес-операций. В таких сценариях контейнер инжекции зависимостей может использоваться для инициализации служб, чтобы исключить исключение NullReferenceException. Это означает, что вам не нужно беспокоиться о проверке нулевого значения и просто вызвать службы с контроллера, как будто они всегда будут доступны (и инициализированы) как одиночный или прототип.
public class MyController
{
private ServiceA serviceA;
private ServiceB serviceB;
public MyController(ServiceA serviceA, ServiceB serviceB)
{
this.serviceA = serviceA;
this.serviceB = serviceB;
}
public void MyMethod()
{
// We don't need to check null because the dependency injection container
// injects it, provided you took care of bootstrapping it.
var someObject = serviceA.DoThis();
}
}
Вы можете попробовать посмотреть альфа-фигуры. Библиотека CGAL может их вычислить.
Изменить: я вижу, что в документе, который вы связали, используются альфа-формы, а также есть список алгоритмов. Разве это недостаточно высокий уровень для вас? Поскольку вы указали python как тег, я уверен, что в Python есть библиотеки триангуляции Delaunay, которые, по моему мнению, являются самой сложной частью реализации алгоритма; вам просто нужно убедиться, что вы можете изменить полученный результат триангуляции. Функции граничных запросов, вероятно, могут быть реализованы с помощью ассоциативных массивов.
Я написал приложение для вычисления невыпуклой оболочки набора точек (вам понадобится java jre для запуска).