Разработка клиент-серверного приложения. Алгоритм круговой интерполяции. Реализация алгоритма интерполяции в виде клиент-серверного приложения, страница 3

ifstream inputData;

ofstream xOut;

ofstream yOut;

MsgT msgSend,

msgReply;

int  connect_id;

int main( int argc, char *argv[] )

{

// Проверка командных опций программы //

if (argc < 2) {

cerr << "Client: cmd args error!" << endl;

exit(1);

}

unsigned int flag;

if (strcmp(argv[1],"-l") == 0)         flag = 0;

else if (strcmp(argv[1],"-g") == 0)    flag = NAME_FLAG_ATTACH_GLOBAL;

else {

cerr << "Client: cmd args error!" << endl;

exit(1);

}

// Открытие канала //

connect_id = name_open( ATTACH_POINT, flag );

if (connect_id == -1) {

cerr << "Client: name open error!" << endl;

exit(2);

}

cout << "Client: started. PID=" << getpid() << ". " << endl;

int X1,Y1,                       // Начальная точка

X0,Y0,                    // Центр дуги

alpha,                    // Угол поворота

clockWise,                // Направление, по часовой, против часовой

step;                     // Шаг

inputData.open("input.txt", ios_base::in );

xOut.open("x.txt", ios_base::out);

yOut.open("y.txt", ios_base::out);

if (!inputData || !xOut || !yOut) {

cerr << "Client: open file error!" << endl;

}

// Читаем из файла исходные данные //

inputData >> X1 >> Y1 >> X0 >> Y0 >> alpha >> clockWise >> step;

msgSend.clientMsg.startPoint.X = X1;

msgSend.clientMsg.startPoint.Y = Y1;

msgSend.clientMsg.centerPoint.X = X0;

msgSend.clientMsg.centerPoint.Y = Y0;

msgSend.clientMsg.angle = alpha;

msgSend.clientMsg.clockwise = clockWise;

msgSend.clientMsg.step = step;

// Цикл обработки сообщений //

while (1)

{

usleep(20000);

if (MsgSend( connect_id, &msgSend, sizeof(msgSend), &msgReply, sizeof(msgReply) ) != -1) {

usleep(20000);

cout << "Send is OK!" << endl;

}

// Вывод результатов в файл //

for (int i=0; i<msgReply.serverMsg.lenVector; ++i) {

xOut << msgReply.serverMsg.resultVector[i].X << endl;

yOut << msgReply.serverMsg.resultVector[i].Y << endl;

}

// Завершение по концу файла с исходными данными //

if ( inputData.eof() )    break;

// Новое сообщение //

// Читаем из файла исходные данные для очередной дуги //

inputData >> X0 >> Y0 >> alpha >> clockWise >> step;

msgSend.clientMsg.startPoint.X = msgReply.serverMsg.resultVector[msgReply.serverMsg.lenVector-1].X;

msgSend.clientMsg.startPoint.Y = msgReply.serverMsg.resultVector[msgReply.serverMsg.lenVector-1].Y;

msgSend.clientMsg.centerPoint.X = X0;

msgSend.clientMsg.centerPoint.Y = Y0;

msgSend.clientMsg.angle = alpha;

msgSend.clientMsg.clockwise = clockWise;

msgSend.clientMsg.step = step;

}

inputData.close();xOut.close(); yOut.close();

name_close( connect_id );

return EXIT_SUCCESS;

}

Примеры результатов работы программы.

Исходные данные для программы клиента задаются в файле Input.txt в следующем виде:

<начальная точка>,

            <центр дуги>, <угол поворота>, <направление>, <шаг>

            <центр дуги>, <угол поворота>, <направление>, <шаг>

            <центр дуги>, <угол поворота>, <направление>, <шаг>

            .......

и т.д. Конечная точка дуги является начальной точкой для следующей дуги.

Входные данные:

-50 100

30 30 180 1 1

0 0 100 0 1

-50 -50 120 1 1

Результат интерполяции выводится в текстовые файлы X.txt и Y.txt для дальнейшего анализа в Matlab.


Рис. 2.1.1. Результаты интерполяции.

3. Исследование приложения с помощью системного профайлинга.

            3.1. Исследование локального варианта интерполяции.