«MultiTouch Tester» Приложение с приятным интерфейсом, показывает точки соприкосновения с экраном вашего устройства и сохраняет их максимальное количество.
На некоторых устройствах могут возникнуть проблемы (Кружочки касания, близкие друг к другу или лежащие на одной оси могут иметь обратное действие).
Проблемы или предложения?
Пожалуйста, не постесняйтесь обратиться к нам.
—
For multi-touch testing only.
Shows your touch points with a nice UI and keeps the maximum count on screen.
Some devices may have problems with multi-touch. (Touch points closing to each other or crossing the same axes will get reverse action, etc.)
Any problems or suggestions?
Please feel free to contact us.
Источник: play.google.com
Русские Блоги
На основе PCL для реализации трехмерных координат точек экрана захвата
Эта функция еще не реализована, и я искренне приглашаю великих богов дать мне несколько советов.
Разбор ВСЕХ методов решения ЧЕРЕПАШКИ из 6 Задания КЕГЭ по Информатике
- Введение в проблему
- Описание функционального процесса
- Прогресс сейчас
- Код
- Официальный образец исходного кода
- Код консольного приложения
- Интеграция в приложение Qt
- Сообщение об ошибке
Введение в проблему
Я разработал программное обеспечение для обработки данных облака трехмерных точек на основе PCL1.8.0 + Qt5.7.0 + VS2013. Одна из функций состоит в том, чтобы выбрать трехмерные координаты точки на экране и отобразить трехмерные координаты в диалоговом окне подокна.
Описание функционального процесса
- Нажмите кнопку «Выбрать 3D-точку» в строке меню главного окна, и появится всплывающее окно, показывающее результат.Немодальный диалог дочернего окна;
- Согласно определению библиотеки облаков точек PCL, удерживайте Shift + левая кнопка мыши, чтобы выбрать точки данных в окне визуализации;
- Установите размер точки на 10 и отобразите ее красным, чтобы различать;
- Элемент управления lineEdit в диалоговом окне подокна отображает трехмерные координаты точки;
- Если вы выберете другую точку, обновите визуализацию экрана и обновите отображение координат подокна.
Прогресс сейчас
- Эта функция может быть легко реализована в консольном приложении;
- Интегрируйте код в собственное приложение, функция обратного вызова не работает во время выполнения.
Код
Официальный образец исходного кода
Код консольного приложения
#include iostream> #include vector> #include pcl/io/pcd_io.h> #include pcl/point_cloud.h> #include pcl/point_types.h> #include pcl/kdtree/kdtree_flann.h> #include boost/concept_check.hpp> typedef pcl::PointXYZRGBA PointT; typedef pcl::PointCloudPointT> PointCloudT; boost::mutex cloud_mutex;// Блокировка процесса // Определение структуры, используемое для перехода к функции обратного вызова struct callback_args < PointCloudT::Ptr clicked_points_3d; pcl::visualization::PCLVisualizer::Ptr viewerPtr; >; //Перезвони void pp_callback(const pcl::visualization::PointPickingEvent event, struct callback_args* args) < struct callback_args* data = (struct callback_args *)args; if (event.getPointIndex() == -1) return; PointT current_point; event.getPoint(current_point.x, current_point.y, current_point.z); data->clicked_points_3d->clear();// Очистить последнюю выбранную точку data->clicked_points_3d->points.push_back(current_point);// Добавляем вновь выбранные точки // Устанавливаем свойства рендеринга экрана, красный цвет показывает выбранную точку pcl::visualization::PointCloudColorHandlerCustomPointT> red(data->clicked_points_3d, 255, 0, 0); data->viewerPtr->removePointCloud(«clicked_points»); data->viewerPtr->addPointCloud(data->clicked_points_3d, red, «clicked_points»); data->viewerPtr->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 10, «clicked_points»); std::cout .x <» » .y <» » .z ::endl; > // Функция функция void pointpicking() < std::string filename(«E:\Date\12.pcd»); pcl::PointCloudpcl::PointXYZ>::Ptr cloud(new pcl::PointCloudpcl::PointXYZ>()); // Определяем средство просмотра визуального окна boost::shared_ptrpcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer(«viewer»)); // Считываем облако точек if (pcl::io::loadPCDFile(filename, *cloud)) < std::cerr <«ERROR: Cannot open file » <«! Aborting. » ::endl; return; > std::cout ->points.size() ::endl; cloud_mutex.lock(); // Получить мьютекс, в течение которого облако точек не может быть изменено // показать облако точек viewer->addPointCloud(cloud, «bunny»); // viewer-> setCameraPosition (0, 0, -2, 0, -1, 0, 0); // Устанавливаем положение камеры // Добавляем обратный вызов для выбора точки для просмотра: struct callback_args cb_args; PointCloudT::Ptr clicked_points_3d(new PointCloudT); cb_args.clicked_points_3d = clicked_points_3d; cb_args.viewerPtr = pcl::visualization::PCLVisualizer::Ptr(viewer); // Регистрируем событие выбора экрана viewer->registerPointPickingCallback(pp_callback, (void*) // Shift + левая кнопка мыши для выбора точки, нажмите Q для завершения std::cout <«Shift+click on points, end by pressing ‘Q’. » ::endl; // Spin until ‘Q’ is pressed: viewer->spin(); std::cout <«done.» ::endl; cloud_mutex.unlock();// Освобождаем мьютекс while (!viewer->wasStopped()) < viewer->spinOnce(100); boost::this_thread::sleep(boost::posix_time::microseconds(100000)); > > int main() < pointpicking(); std::cout <«Конец программы»::endl ; return 0; >
ПРОГА для 6 ЗАДАНИЯ на PYTHON, которая сама СЧИТАЕТ ТОЧКИ! | ЕГЭ по информатике 2023
Результаты приведены ниже:
Интеграция в приложение Qt
Он не был успешно реализован. Здесь задействовано много знаний C ++. Я также слаб в фундаменте, поэтому есть много проблем. Также есть много неточностей и даже ошибок в следующем коде. Добро пожаловать на великого бога.
typedef pcl::PointXYZRGBA PointT; typedef pcl::PointCloudPointT> PointCloudT; class QtApplication : public QMainWindow < Q_OBJECT public: QtApplication(QWidget *parent = 0); ~QtApplication(); // Объявить статическую функцию обратного вызова static void SelectPoint_callback(const pcl::visualization::PointPickingEvent // Указатель статического объекта static QtApplication *pThis; // Функция передачи, получаем точки, полученные в функции обратного вызова, а затем получаем доступ к закрытым членам в QtApplication для отображения void PointPickingShow(pcl::PointXYZRGBA current_point); // Блокировка взаимного исключения boost::mutex cloud_mutex; // Структура, используемая для передачи параметров функции обратного вызова struct callback_args < PointCloudT::Ptr clicked_points_3d; pcl::visualization::PCLVisualizer::Ptr viewerPtr; >; private: Ui::QtApplicationClass ui; //. , , , , слегка private slots: // Выбираем определение функции слота точки void SelectPoint(); >
// Инициализация указателя статического объекта QtApplication * QtApplication::pThis = NULL; //Конструктор QtApplication::QtApplication(QWidget *parent) : QMainWindow(parent) < ui.setupUi(this); pThis = this;// Указатель this присваивается pThis в конструкторе, так что функция обратного вызова может получить доступ к этому объекту через указатель pThis // инициализация initial(); //. , , слегка // Подключение сигнала строки меню и функции слота QObject::connect(ui.action_SelectPoint, QtApplication::SelectPoint); //. , , слегка > // Подбираем координаты трехмерной точки экрана, еще не реализовано void QtApplication::SelectPoint_callback(const pcl::visualization::PointPickingEvent if (pThis == NULL) return; struct callback_args* data = (struct callback_args *)args;// Позиция ошибки, данные не могут прочитать память if (event.getPointIndex() == -1) return; PointT current_point; event.getPoint(current_point.x, current_point.y, current_point.z); data->clicked_points_3d->push_back(current_point); // Устанавливаем свойства рендеринга. На данный момент идея состоит в том, чтобы закомментировать следующие предложения и поместить рендеринг в функцию ниже. Здесь передается только полученная current_point. //pcl::visualization::PointCloudColorHandlerCustom red(data->clicked_points_3d, 255, 0, 0); //data->viewerPtr->removePointCloud(«clicked_points»); //data->viewerPtr->addPointCloud(data->clicked_points_3d, red, «clicked_points»); //data->viewerPtr->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 10, «clicked_points»); // Передаем полученную точку функции-члену и получаем доступ к члену QtApplication для отображения координат pThis->PointPickingShow(current_point); > void QtApplication::PointPickingShow(pcl::PointXYZRGBA current_point) < // Получение полученной точки, обновление рендеринга и отображение ее трехмерных координат в подокне pcl::PointCloudPointT>::Ptr cloud_temp; cloud_temp->push_back(current_point); pcl::visualization::PointCloudColorHandlerCustomPointT> red(cloud_temp, 255, 0, 0); viewer->removePointCloud(«clicked_points»); viewer->addPointCloud(cloud_temp,red,»clicked_points»); viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 10, «clicked_points»); ui.qvtkWidget->update(); // 3D-координаты текущей точки передаются дочернему окну pointselected->setLineEdit(current_point.x, current_point.y, current_point.z); > void QtApplication::SelectPoint() < // pointselected — объект дочернего окна, установлен в немодальный режим, отображать дочернее окно pointselected->setModal(false); pointselected->show(); cloud_mutex.lock();// Заблокировано, данные облака точек не могут быть изменены в течение этого периода viewer->addPointCloud(cloud);// облако — это текущий загруженный указатель облака точек struct callback_args cb_args; PointCloudT::Ptr clicked_points_3d(new PointCloudT); cb_args.clicked_points_3d = clicked_points_3d; cb_args.viewerPtr = pcl::visualization::PCLVisualizer::Ptr(viewer); viewer->registerPointPickingCallback(SelectPoint_callback,(void*) cloud_mutex.unlock(); >
Результаты приведены ниже:
Сообщение об ошибке
Сообщение об ошибке точки останова программы выглядит следующим образом:
Как показано на рисунке выше, установите точку останова в функции обратного вызова, структура данных не сможет прочитать память, и если выполнение продолжится, будет сообщено об ошибке.
постскриптум
Текущая проблема находится здесь. Я застрял здесь долгое время и понятия не имею. Я приветствую всех великих богов, чтобы они дали мне совет. Большое спасибо!
Кроме того, я хотел бы поблагодарить следующих блоггеров, которые ссылаются на блог!
Источник: russianblogs.com
Вывод точек на экран — Паскаль
Система координат в графическом режиме определяется как это показано на рисунке. Верхний левый угол экрана имеет координату (0,0). Координаты других крайних точек зависят от установленного драйвера (GrDr) и выбранного режима его работы (GrMd).
SetBkColor(Цвет:Word)- установка цвета фона SetColor (Цвет:Word)- цвет рисунка (номер из палитры от 0 до 15) SetAllPalette – изменение палитры. SetPalette – замена одного цвета в палитре на другой. ClearDevice — очистка экрана. PutPixel(x,y,цвет:Word)- вывод на экран точки с координатами (x,y). MoveTo(X,Y:integer)- перемещение курсора указателя – CP, Current Pointer) по экрану. GetMaxX, GetMaxY- максимальные значения координат экрана X и Y.
Задача. Составить программу, которая выводит на экран разноцветные точки в случайных местах. В программе для задания координат и цвета будем использовать генератор случайных чисел Random. Диапазон случайных чисел определяется функциями GetMaxX, GetMaxY и GetMaxColor соответственно.
Program Plot_Stars; Uses Crt, Graph; Var Er, GDr, Gmode : Integer; X, Y : Integer; Color :Integer; Begin < Параметры графического режима >Gdr := Vga; Gmode := VgaLo; InitGraph(Gdr,GMode,’’); Er := GraphResult; If Er = GrOk then Begin Randomize; SetBkColor(Black); ClearDevice; Repeat Color := Random(GetMaxColor)+1; X := Random(GetMaxX); Y := Random(GetMaxY); PutPixel(x,y, Color); Delay(10); Until Keypressed; CloseGraph; End Else begin Writeln(’Ошибка графики: ’,Er,’. ’,GraphErrorMsg(Er)); Writeln(’ Нажмите любую клавишу. ’); Repeat Until KeyPressed; end End.
Источник: upbyte.net