Скачиваний:
13
Добавлен:
02.05.2014
Размер:
1.23 Mб
Скачать

4.2 Разработка алгоритма системы моделирования

Задачу построения модели можно разделить на две части:

  • генерация формы и размера волокна;

  • определение места волокна на плоскости.

На первом этапе производитсярасчет числа соприкосновений с использованием теории ДЛФО для коллоидных систем путем определения сил притяженияUmи отталкиванияUот, которые позволяют смоделировать геометрическое положение волокна в композиционной системе. При этом приняты следующие допущения: волокна имеют определенную геометрическую форму, располагаются в вертикальной и горизонтальной плоскости слоями, как это показано на рис.4.2.

Рис. 4.2. Визуальное представление волокнистой структуры бумаги

При реализации данного алгоритма была выбрана модель, которая позволяет не строить всю композицию сразу после запуска комплекса, система реагировать на события, происходящие в местах контакта волокон, в данный момент времени. Это служит двум целям. Во-первых, такая модель получается реалистичнее, во-вторых, тратится меньше ресурсов ЭВМ. Также это позволяет выбирать практически любую форму волокна, что позволяет моделировать структуру практически любого композита и с любым количеством вкраплений и примесей. [15]

Для решения первой задачи используется генератор случайных чисел (ГСЧ). Причем, используется нормальное распределение. Код модуля ГСЧ приведен в листинге 4.1.

public static void rndnormal(ref double x1, ref double x2)

{

double u = 0;

double v = 0;

double s = 0;

Random R = new Random();

while( true )

{

u = 2*R.Next()-1;

v = 2*R.Next()-1;

s = AP.Math.Sqr(u)+AP.Math.Sqr(v);

if( s>0 & s<1 )

{

s = Math.Sqrt(-(2*Math.Log(s)/s));

x1 = u*s;

x2 = v*s;

return;

}

}

}

Листинг 4.1. Генератор случайных чисел нормального распределения.

Как видно из листинга 4.1, выходными данными являются 2 числа в заданном диапазоне. Математическое ожидание необходимо указывать в зависимости от типа помола, СКО задается исходя из экспериментальных данных при изучении бумажного полотна.

Сами границы волокна строятся с использованием кривых Безье, математическое описание которых уже определено в среде разработки Microsoft Visual Studio 2005.

Как видно из рисунка 4.3, после генерации формы и размера волокна следует размещение его на плоскости. Это происходит с помощью ГСЧ равномерного распределения. В листинге 4.2 можно наблюдать, как саму генерацию, так и последующее размещение.

Рис. 4.3. Алгоритм генерации.

После генерации координат положения проходит проверка, нет ли так называемого «перехлеста» с предыдущими волокнами. Только после проверки объект попадает на канву. Если координаты объекта не удовлетворяют условиям, то происходит повторная генерация координат. На рис. 4.3 этот цикл обозначен (1). Чтобы не вводить программу в бесконечный цикл, используется счетчик операций (2). Если превышен лимит операций для данного объекта, то начинается генерация следующего, с другимихарактеристиками. Потом все циклы размещения объекта производятся еще раз. Для генерации нового объекта также предусмотрен счетчик операций. Генерацию модели можно считать завершенной, когда превысится лимит у обоих счетчиков.

StartPosition:

x[0] = R.Next(10, 350); //Вычисление координат первой точки

y[0] = R.Next(50, 350);

x[1] = x[0] + a[1] * k;

x[2] = x[1] + a[2] * k;

x[3] = x[2] + a[3] * k;

x[4] = x[3] + a[4] * k;

x[5] = x[4] - a[5] * k;

x[6] = x[5] - a[6] * k;

x[7] = x[6] - a[7] * k;

y[1] = y[0] - b[1] * k;

y[2] = y[1] + R.Next(1, 4) * k;

y[3] = y[2] - b[3] * k;

y[4] = y[3] + b[4] * k;

y[5] = y[4] + b[5] * k;

y[6] = y[5] - R.Next(1, 4) * k;

y[7] = y[6] + b[7] * k;

int[,] kor = new int[8, 2];

for (int i = 0; i < 8; i++)

{

kor[i, 0] = x[i];

kor[i, 1] = y[i];

}

for (int i = 0; i < 8; i++)

{

Color pixelColor1 = B.GetPixel(kor[i, 0], kor[i, 1]);

string aaa1 = pixelColor1.Name;

if (aaa1 != "ffffffff")

{

goto StartPosition;

}

}

Point p0 = new Point(x[0], y[0]);

Point p1 = new Point(x[1], y[1]);

Point p2 = new Point(x[2], y[2]);

Point p3 = new Point(x[3], y[3]); //Задание массива точек

Point p4 = new Point(x[4], y[4]);

Point p5 = new Point(x[5], y[5]);

Point p6 = new Point(x[6], y[6]);

Point p7 = new Point(x[7], y[7]);

Point[] dek = { p0, p1, p2, p3, p4, p5, p6, p7 };

path1.StartFigure();

path1.AddClosedCurve(dek);

path1.CloseFigure();

G.DrawPath(new Pen(Color.Black, 3), path1);

G.FillPath(Brushes.Bisque, path1);

Pen pen = new Pen(Color.Black, 5);

break;

Листинг 4.2. Размещение объектов на плоскости.

Для решения второй задачи используется попиксельное сканирование получившейся модели структуры. Это обусловлено тем, что цвет пикселей у волокна и у пустоты разный, также используется тот факт, что границы волокна были исполнены черным цветом (см. рис.4.1). Алгоритм сканера представлен на рис. 4.4. Он состоит из цикла с четко заданными условиями. Результатом такого анализа является база данных, где для каждого среза, который определяется частотой дискретизации, выводятся расстояния между волокнами, так называемые «пустоты», и непосредственно диаметры волокон в месте среза.

Входными данными для анализа является канва со структурой. Анализ начинается с координаты (0, 0) и ведется попиксельно с шагом 1 по оси Y. По оси X анализ ведется с заданным шагом дискретизации, что, впрочем, не мешает анализировать структуру с шагом 1 по оси X. Такой способ займет больше времени, но даст более полную информацию о смоделированной структуре.

Анализ можно считать законченным в том случае, когда координаты X и Y будут равны максимальным. Результат анализа записывается в базу данных.

Рис. 4.4. Алгоритм сканирования структуры.

Соседние файлы в папке Моделирование композитного материала