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. Исследование локального варианта интерполяции.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.