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();
}