пятница, 8 июня 2012 г.

Время сессии, а мысли о станке, Python'e и Blender'е

Смешно, но меня все не покидает мысль, о скорейшей реализации станка и ПО для него, но надо подходить к этому делу с умом. К сожалению, когда читал про станки и детали машин, понял, что в этой жизни мало, что известно человеку. Те же станки создаются на базе уже существующих моделей и рассчитать их невозможно, если только использовать метод конечных элементов, который очень ресурсоёмок. А расчёты передач заключаются в том, чтобы использовать упрощенные формулы с массой инженерных коэффициентов полученных опытным путём.
Что касается ПО, тут тоже свои заморочки. Никак не могу придумать анализатор контуров. Ну то есть то, как будет скрипт определять внешний это контур или внутренний. Думаю осуществить эту штуку с помощью бинарного поиска по оси X или Y. То есть, контуры уже известны, будет произведена дополнительная нарезка. На участке контура, будет произведено исследование на экстремум и если минимум, то контур внутренний нас интересует, иначе внешний. Как будет реализован бинарный поиск и что я вообще имею под ним ввиду? Я имею ввиду следующий алгоритм:

  1. Производится срез по оси X или Y. (Ось выбирается та у которой расстояние между максимальным и минимальным значением меньше, с той целью, чтобы в результате деления было, как можно меньше итераций, под максимальным и минимальным значением имеется ввиду крайние точки контуров)
  2. В результате среза, как обычно получаем список координат.
  3. Находим контуры, которые пересекает данная плоскость среза.
  4. Между двух точек контура (в порядке очереди) проводим исследование на экстремум, для этого:
    1. Находим производную dx/dy или dy/dx
    2. Приравниваем ее нулю.
    3. Смотрим перемену знака в точке экстремума.
    4. В зависимости от пункта (3), сохраняем значение максимум или минимум.
  5. Если максимум контур интересует внешний, иначе внутренний.
  6. Значение внешний или внутренний контур сохраняется. В дальнейшем данный контур дополнительной обработке не подвергается с целью избежания лишних затрат вычислительных ресурсов ЭВМ.
  7. После того, как проанализировали все контуры пересекающие плоскость среза производим поиск необработанных контуров, и определяем их местоположение. Если все контуры имеют координаты меньше/больше, чем координаты предыдущей плоскости среза, то про другую половину локации забываем. Лучше поясню рисунком.
  8. Время поиска будет зависеть от положения контуров.
P.S. Возможно, я буду использовать другой тип поиска плоскостей для среза. Который заключается в следующем.
  1. Для минимизации усилий, будет сделан проход, заранее определяющий, плоскости среза по оси X или Y.
  2. При проходе, будут определяться пересекающиеся проекции контуров. И в качестве мест для среза, будут выбраны участки с максимальным приоритетом, то есть с большим числом пересечений данного участка контурами.
Хотя, если подумать, то второй вариант предполагает массу дополнительных проходов, что может привести к торможению.

Ладно, время подумать над алгоритмом есть, хоть и немного. Буду думать, а реализацией, после сессии займусь.

Комментариев нет:

Отправить комментарий