U_karkas

На этой странице вы найдете :
1) Описание программы u_karkas и пример работы с ней.
2) Описание библиотеки для работы с одно- и двумерными кубическими сплайнами SplineDLL.

Итак, для чего нужна программа u_karkas :
  1. Для быстрого и точного создания оболочек по их сечениям.
  2. Для отработки технологии такого создания.
  3. Наконец, для демонстрации работы библиотеки SplineDLL.


Теперь конкретнее.
Допустим, у нас есть фотография самолета :

А также его чертежи :

Которые дают нам ряд сечений, расположенных на определенном расстоянии (причем сечения предпочтительно выпуклые и находяться на единой оси) :

Хорошо бы из этих сечений сделать единую сетку, а в итоге модель - что-нибудь вроде этого :

 
Программа u_karkas дает нам именно такую возможность.

Вот внешний вид программы :



А вот попытка объяснить как все работает :
Прграмма по набору сечений строит сетку, состоящую из N окружностей-сечений (sections), расположенных на одинаковом расстоянии и M продольных полосок. Причем расположение продольных полосок задается специальными радиусами (rads - выделены красным цветом):


Итак, вы можете создавать выпуклые сечения, нанизанные на одну ось, задавать число N и количество (M) и расположение радиусов и после этого получить сетку, после чего сохранить ее в формате MicroModelator и использовать по своему усмотрению.
Для математиков : причем здесь сплайны ? Они используются именно для создания точек сетки - они находяться на одномерных сплайнах, расположенных на полуплоскостях - образованных осью и радиусами. Эта плоскость пересекаясь с заданными сечениями дает узловые точки сплайна.

Теперь об управлении программой.
На общем виде программы вы видете три рабочих поля - сбоку, спереди, и сверху и поле 3д отображения построенной сетки. На поле сверху и сбоку вы можете перемещать выделенное сечение вдоль оси, на виде спереди происходит : 1) редактирование выделенного сечения или 2) редактировние радиусов, в зависимости от текущего режима. На задний план вы можете поместить чертеж, сохраненный в форматеbmp (View->BackBitmap->). Перемещение чертежа в каждом из окон осуществляется правой клавишей мыши, Crtl + правая клавиша - перемещение сечений, Shift + правая клавиша - перемещение всего вместе.
Вот вид рабочей панели :

1) Скопировать выделенное сечение.
2) Вставить в выделенное сечение.
3) Кнопка установки режима сечений.
4) Кнопка установки режима радиусов.
5) Мышь - выделение.
6) Мышь - перемещение выделенной точки/сечения/вращения радиуса.
7) Если выделены две соседние точки сечения, то между ними появляется еще одна.
8) Удаление выделенной точки.
9) Сделать следующее сечение текущим.
10) Сделать предыдущее сечение текущим.
11) Удалить текущее сечение.
12) Добавить сечение.
13) Построить сетку.
14) Показать сечения (удалить сетку).
15) Параметры сетки (здесь менять N !).
16) Удалить выделенный радиус.
17) Добавить радиус.
18) Распределить радиусы равномерно.
19) Создать радиусы автоматически - идеально для простых сечений.
20) Увеличить отображение сечений*.
21) Уменьшить отображение сечений*.
22) Увеличить отображение чертежа*.
23) Уменьшить отображение чертежа*.
24) Обновить экраны.
25) Сохранить сетку в формате MicroModelator.
* - для текущего окна.

Обратите внимание на флаг"View->Zero grads". Если он включен, то касательная построенной сетки на границах будет параллельна оси ("нулевой градиент"), иначе касательная совпадает с направлением перехода между предпоследним и последним сечением. Это хорошо видно на следующем рисунке (1 - сечения, 2 - флаг установлен, 3 - флаг снят) :

Вы можете сохранять и загружать созданные сечения в формате u_karkas - .uka.

Добавлено в версии 1.2
1) Отмена и повтор (5 шагов).
2) Теперь можно "имитировать" нажатие кнопки "мышь-перемещение"(6) нажатием пробела в режиме "мышь-выделение"(кнопка 5).
3) Флаг"Edit->Linear Interpolation" управляет теперь способом построения сетки - с помощью сплайнов или линейной интерполяцией. На следующем рисунке представлены (1) каркас самолета и (2) - флаг выключен, (3) - флаг включен. Визуально (2) смотриться лучше, однако при резких переходах (между 4 и 3 последними сечениями) мы видим (номер 5 - вид сверху), как продольные линии уходят внутрь (сплайн соблюдает условие непрерывности третьей производной). На рисунке 4 - флаг включен и такого эффекта нет - продольные линии - ломаные.


Система: Windows 9x, Pentium 166, 32 ОЗУ, HiColor/TrueColor 1024*768 рекомендуется.

Теперь о библиотеке SplineDLL.
Она представляет возможность легко использовать в своих программах одно- и двумерные кубические сплайны, предоставляя следующие функции :
SPLINEDLL_EXPORT LPVOID BuildSPLINE1 (
				int _cx_setka,     //размерность сетки по x
				float* _x_setka,   //упорядоченные по возрастанию координаты x узлов
				float *_funcs,     //соответствующие значения функций
				float *gradient    //два значения первых производных на концах отрезка
				) ;
SPLINEDLL_EXPORT LPVOID BuildSPLINE2 (
				int _cx_setka2,    //размерность сетки по x
				float* _x_setka2,  //упорядоченные по возрастанию координаты x узлов
				int _cy_setka2,    //размерность сетки по y
				float* _y_setka2,  //упорядоченные по возрастанию координаты y узлов
				float *_funcs2,    //соответствующие значения функций (2 мерная матрица по x-строкам)
				float *gradients   //производные ((df/dx "слева", df/dx "справа")*_cy_setka, 
								   // (df/dy "сверху", df/dy "снизу")*_cx_setka,
								   // d^2f/dxdy (x0, y0), d^2f/dxdy (xn, y0), d^2f/dxdy (x0, yn), 
							       //d^2f/dxdy (xn, yn), )
				) ;
SPLINEDLL_EXPORT float SplineFunction (float x, LPVOID spline) ;
SPLINEDLL_EXPORT float Spline2dFunction (float x, float y, LPVOID spline) ;
SPLINEDLL_EXPORT float LinearFunction (float x, LPVOID spline) ;
SPLINEDLL_EXPORT float Linear2dFunction (float x, float y, LPVOID spline) ;
SPLINEDLL_EXPORT void FreeSpline (LPVOID spline) ;
SPLINEDLL_EXPORT void FreeSpline2d (LPVOID spline) ;
Первая пара функций строит нобходимые коэффициенты сплайна, возвращая указатель на структуру, содержащую их.
Следующая пара функций дает возможность вычислить значения сплайна, заданного полученной структурой в нужной точке. Далее - две функции возвращающие значения, получаемые линейной интерполяцией по узлам сетки сплайна.
И последние функции удаляют созданные структуры, освобождая память.

Вот файлы по этой программе :
Описание Файлы Размер
Библиотека SplineDLL и файлы для ее подключения splinedll.rar 30 кб.
Программа u_karkas, SFX-архив u_ka.exe
u_ka.r00
u_ka.r01
100/100/24 кб.
Модель самолета Су-17М-4, созданная с помощью u_karkas, сохраненная в .mod формате (чертежи взяты с этого сайта, за что им спасибо) su17.rar 100 кб.
Hosted by uCoz