void add_new_point(KDTreeNode* node, const Irradiance& point) { const int axis = node->axis; double delta; switch (axis) { case 0: delta = point.position.x - node->point->position.x; break; case 1: delta = point.position.y - node->point->position.y; break; case 2: delta = point.position.z - node->point->position.z; break; } if (delta > 0.0) { // みぎ if (node->right != NULL) { add_new_point(node->right, point); } else { KDTreeNode* newnode = new KDTreeNode; newnode->axis = (axis + 1) % 3; newnode->point = new Irradiance(point); ptrs.push_back(newnode->point); node->right = newnode; } } else { // ひだり if (node->left != NULL) { add_new_point(node->left, point); } else { KDTreeNode* newnode = new KDTreeNode; newnode->axis = (axis + 1) % 3; newnode->point = new Irradiance(point); ptrs.push_back(newnode->point); node->left = newnode; } } }
void PointInPolygonWidget::on_loadFromCSVFileButton_clicked() { QString file_name = QFileDialog::getOpenFileName(0, "Carregar pontos dos polígonos do arquivo CSV", "~", "Todos (*.*);;" "CSV (*.csv *.CSV *.txt)"); QFile file(file_name); if (!file.open(QFile::ReadOnly)) { QMessageBox::warning(0, "Falha ao abrir arquivo!", "Ocorreu um erro ao abrir o arquivo: " + file_name + ". Erro: " + file.errorString()); return; } while (!file.atEnd()) { QString line = file.readLine(); QStringList content = line.split(","); if (content.size() >= 4) { const QString& mine = content.at(0); const QString& point = content.at(1); double x = content.at(2).toDouble(); double y = content.at(3).toDouble(); add_new_point(mine, point, x, y); } } file.close(); update_points_map(); }
void AddPointToTree(const Irradiance &point) { if (root != NULL) { add_new_point(root, point); } else { KDTreeNode* newnode = new KDTreeNode; newnode->axis = 0; newnode->point = new Irradiance(point); ptrs.push_back(newnode->point); root = newnode; } }
void PointInPolygonWidget::on_addPointButton_clicked() { add_new_point(ui->mine->text(), ui->point->text(), ui->xNewPoint->value(), ui->yNewPoint->value()); update_points_map(); }