«Эксперт-Сплайн» предлагает воспользоваться API для автоматизации алгоритмов построения
скалярных полей. Предлагаемая версия программы поддерживает 64бит Python 3.11.0. Для подключения к интерпретатору
Python пропишите в настройках системы Windows переменную окружения PYTHONPATH, и задайте в ней путь к
используемой версии библиотеки API. Библиотека, реализующая API для среды Python, называется exspline
и находится в папке ProgramFiles\ExpertSpline\Win64_версияAPI. Предоставляются только ограниченные возможности
функционала «Эксперт-Сплайн» в текущей демонстрационной версии.
Координатная сетка сплайна
- class exspline.PlainMesh2D(xshift, yshift, model_step, xcells:int, ycells:int, cell_ratio:int=2, angle=0)
-
Класс определяет координатную сетку сплайна. Параметры xshift и yshift задают на плоскости координаты левого
нижнего угла сетки. Параметр model_step задает шаг сетки сплайна, от этого шага будет зависеть разрешающая
способность сетки при моделировании. Параметры xcells, ycells определяют количество ячеек сплайна
по горизонтали и вертикали соответственно. Ячейки непрерывно-гладкого поля сплайна целесообразно дробить при преобразовании
в поле дискретных значений. Параметр cell_ratio задает дробление шага сетки сплайна в процессе
дискретизации, допустимые значения: 1,2,3,4,5,6. Параметр angle задает поворот сетки относительно ее левого нижнего угла.
- model_step
- Значение шага сетки сплайна.
- cell_ratio
- Коэффициент дробления шага сетки сплайна при переходе в дискретную сетку.
- cells
- Количество ячеек сплайна в представлении кортежа.
- nodes
- Количество узлов дискретной сетки в представлении кортежа.
- node_pos(x:int, y:int)
- Возвращает кортеж с координатами узла x, y дискретной сетки.
- class exspline.RectangleMesh(minx, miny, maxx, maxy, xcells:int, ycells:int, cell_ratio:int=2)
-
Класс дает определение для координатной сетки сплайна прямоугольного вида, наследует PlainMesh2D. Параметры minx и miny
задают на плоскости координаты левого нижнего угла сетки. Параметры maxx и maxy задают на плоскости
координаты правого верхнего угла сетки. Параметры xcells, ycells определяют количество ячеек по горизонтали
и вертикали соответственно, но эти значения могут быть усреднены в зависимости от соотношения сторон сетки. Параметр cell_ratio
задает дробление шага сетки сплайна в процессе дискретизации, допустимые значения: 1,2,3,4,5,6.
Определения регионов
- class exspline.Area(triangles:list=[], invert:bool=True)
-
Класс определяет конфигурацию триангулированного региона на координатной плоскости. Для инициализации объекта класса
требуется список кортежей вида ((ax,ay), (bx,by), (cx,cy)), заданных по координатам вершин треугольников. Параметр invert
инвертирует область определения региона. При инициализации по умолчанию инвертирование пустого региона покрывает всю область
построения.
- invert
- Флаг инвертирования заданной посредством треугольников области определения.
- __len__()
- len(self) возвращает, посредством протокола последовательности, количество треугольников в определении региона.
- __getitem__(n:int)
- self[n] возвращает, посредством протокола последовательности, треугольник с номером n из определения региона.
- class exspline.RectangleArea(minx, miny, maxx, maxy, invert:bool=False)
-
Класс дает определение для региона прямоугольного вида, наследует Area. Параметры minx, miny и
maxx, maxy задают координаты левого нижнего и правого верхнего угла прямоугольника соответственно. Параметр
invert инвертирует заданную прямоугольником область определения.
- class exspline.PolygonalArea(mesh:PlainMesh2D, polygons:list, invert:bool=False)
-
Класс дает определение для региона произвольного вида, наследует Area. Параметр mesh требует указать
координатную сетку, на которой будет триангулироваться регион. Далее должен следовать список кортежей с координатами
точек автоматически замыкаемых контуров региона. Параметр invert инвертирует область определения региона.
Данные для построения модели
- class exspline.Dot2D(x, y)
-
Класс определяет точку на координатной плоскости. Параметры x и y задают координаты
по горизонтали и вертикали соответственно.
- x
- Координата по горизонтали.
- y
- Координата по вертикали.
- pos
- Координата в виде кортежа.
- class exspline.ValueDot2D(pos:(x,y), value, weight=1, exact:bool=false)
-
Класс определяет условия аппроксимации значения моделируемого скалярного поля по указанным координатам,
наследует Dot2D. Параметр pos задает в виде кортежа координаты по горизонтали и вертикали
соответственно. Параметр value дает требуемое значение в точке. Параметр weight
задает весовой коэффициент. Параметр exact, в случае истинности, указывает на необходимость
точной интерполяции по значению.
- value
- Значение скалярного поля.
- weight
- Весовой коэффициент аппроксимации.
- exact
- Инерполяционное прохождение.
- class exspline.NormalDot2D(pos:(x,y), normal:(x,y,z)=(0,0,1), weight=1, exact:bool=false)
-
Класс определяет условия аппроксимации вектора нормали к поверхности моделируемого скалярного поля по указанным координатам,
наследует Dot2D. Параметр pos задает в виде кортежа координаты по горизонтали и вертикали соответственно.
Параметр normal дает требуемое значение вектора нормали в точке. Длина задаваемого вектора должна быть отлична
от нуля, сам вектор будет приведен к единичной длине. Параметр weight задает весовой коэффициент.
Параметр exact, в случае истинности, указывает на необходимость точной интерполяции.
- normal
- Единичный вектор нормали к поверхности скалярного поля.
- weight
- Весовой коэффициент аппроксимации.
- exact
- Инерполяционное прохождение.
- class exspline.AboveLimitDot2D(value, pos:(x,y))
-
Класс определяет верхнее ограничение на значение моделируемого скалярного по указанным координатам, наследует Dot2D.
Параметр value дает требуемое ограничение на верхнее значение. Параметр pos задает в виде кортежа
координаты точки приложения ограничения по горизонтали и вертикали соответственно.
- value
- Верхнее ограничение на значение скалярного поля.
- class exspline.BelowLimitDot2D(value, pos:(x,y))
-
Класс определяет нижнее ограничение на значение моделируемого скалярного по указанным координатам, наследует Dot2D.
Параметр value дает требуемое ограничение на нижнее значение. Параметр pos задает в виде кортежа
координаты точки приложения ограничения по горизонтали и вертикали соответственно.
- value
- Нижнее ограничение на значение скалярного поля.
- class exspline.AboveLimitAreaValue(value, area:Area=Area())
-
Класс определяет верхнее ограничение на значение моделируемого скалярного по заданному региону, наследует Area.
Параметр value дает требуемое ограничение на верхнее значение. Параметр area
указывает на регион зоны действия ограничения.
- value
- Верхнее ограничение на значение скалярного поля.
- class exspline.BelowLimitAreaValue(value, area:Area=Area())
-
Класс определяет нижнее ограничение на значение моделируемого скалярного по заданному региону, наследует Area.
Параметр value дает требуемое ограничение на нижнее значение. Параметр area
указывает на регион зоны действия ограничения.
- value
- Нижнее ограничение на значение скалярного поля.
- class exspline.IntegralAreaValue(value, area:Area=Area())
-
Класс определяет требуемое значение интеграла моделируемого скалярного по заданному региону, наследует Area.
Параметр value дает требуемое значение интеграла. Параметр area указывает на регион интегрирования.
Этот регион будет ограничен размерами области моделирования.
- value
- Значение интеграла по площади скалярного поля в пределах указанного региона.
Скалярные поля
- class exspline.PlainField2D(mesh:PlainMesh2D, value=0)
-
Класс определяет скалярное поле значений, наследует PlainMesh2D. Параметр mesh указывает
на используемую координатную сетку. Параметр value задает начальное значение для всего поля.
- value(x:int, y:int)
- Возвращает значение скалярного поля в узле x, y дискретной сетки.
- normal(x:int, y:int)
- Возвращает нормаль к поверхности скалярного поля в узле x, y дискретной сетки.
- __getitem__(x:int, y:int)
- self[x,y] возвращает, посредством протокола словаря, значение скалярного поля в узле x, y дискретной сетки.
- calculate_qspline(wdivgrad, values:list, limits:list=[])
-
Вычисляет методом минимизации функционала скалярное поле на базисе квадратичных сплайнов.
Параметр wdivgrad задает стабилизирующий вес кривизны расчетного поля. Список values
должен содержать типизированные классами ValueDot2D, NormalDot2D, IntegralAreaValue
исходные для расчета данные. Опциональный список limits должен содержать типизированные классами
AboveLimitDot2D, BelowLimitDot2D, AboveLimitAreaValue, BelowLimitAreaValue ограничения.
- calculate_cspline(wdivgrad, values:list, limits:list=[])
-
Вычисляет методом минимизации функционала скалярное поле на базисе кубических сплайнов.
Параметр wdivgrad задает стабилизирующий вес кривизны расчетного поля. Список values
должен содержать типизированные классами ValueDot2D, NormalDot2D, IntegralAreaValue
исходные для расчета данные. Опциональный список limits должен содержать типизированные классами
AboveLimitDot2D, BelowLimitDot2D, AboveLimitAreaValue, BelowLimitAreaValue ограничения.
Примеры использования
from exspline import *
from random import randint
field = PlainField2D(RectangleMesh(0,0,100,100,10,10))
values = [ValueDot2D((randint(0,100),randint(0,100)),randint(0,50)) for i in range(10)]
field.calculate_qspline(1,values)
for i in range(field.nodes.y):
for j in range(field.nodes.x):
print(field.node_pos(i,j),field.value(i,j),field.normal(i,j))