int main(int argc, char const *argv[]) { min_p("int: %d\n", 4); min_p("str: %s\n", "mm"); return 0; }
double KdTree::computeCost (LineSegments &lineSegments, LineSegments::iterator begin, LineSegments::iterator end, Point* p, int splitType) { int TL = 0; int TR = 0; Parameter PL, PR; Parameter min_p((double)999999); Parameter max_p((double)-999999); if (splitType == 0) { for (LineSegments::iterator it = begin; it != end; ++it) { //pl(*it); if ((*it)->p0 != p && (*it)->p1 != p && XOrder((*it)->p0, p) == 1 && XOrder((*it)->p1, p) == 1) { TL++; if ((*it)->p0->getP().getX() < min_p) { min_p = (*it)->p0->getP().getX(); } if ((*it)->p1->getP().getX() < min_p) { min_p = (*it)->p1->getP().getX(); } } else if ((*it)->p0 != p && (*it)->p1 != p && XOrder(p, (*it)->p0) == 1 && XOrder(p, (*it)->p1) == 1) { TR++; if ((*it)->p0->getP().getX() > max_p) { max_p = (*it)->p0->getP().getX(); } if ((*it)->p1->getP().getX() > max_p) { max_p = (*it)->p1->getP().getX(); } } else { TL++; TR++; if ((*it)->p0->getP().getX() < min_p) { min_p = (*it)->p0->getP().getX(); } if ((*it)->p1->getP().getX() < min_p) { min_p = (*it)->p1->getP().getX(); } if ((*it)->p0->getP().getX() > max_p) { max_p = (*it)->p0->getP().getX(); } if ((*it)->p1->getP().getX() > max_p) { max_p = (*it)->p1->getP().getX(); } } } PL = (p->getP().getX() - min_p) / (max_p - min_p); PR = (max_p - p->getP().getX()) / (max_p - min_p); } else { for (LineSegments::iterator it = begin; it != end; ++it) { if ((*it)->p0 != p && (*it)->p1 != p && YOrder((*it)->p0, p) == 1 && YOrder((*it)->p1, p) == 1) { TL++; if ((*it)->p0->getP().getY() < min_p) { min_p = (*it)->p0->getP().getY(); } if ((*it)->p1->getP().getY() < min_p) { min_p = (*it)->p1->getP().getY(); } } else if ((*it)->p0 != p && (*it)->p1 != p && YOrder(p, (*it)->p0) == 1 && YOrder(p, (*it)->p1) == 1) { TR++; if ((*it)->p0->getP().getY() > max_p) { max_p = (*it)->p0->getP().getY(); } if ((*it)->p1->getP().getY() > max_p) { max_p = (*it)->p1->getP().getY(); } } else { TL++; TR++; if ((*it)->p0->getP().getY() < min_p) { min_p = (*it)->p0->getP().getY(); } if ((*it)->p1->getP().getY() < min_p) { min_p = (*it)->p1->getP().getY(); } if ((*it)->p0->getP().getY() > max_p) { max_p = (*it)->p0->getP().getY(); } if ((*it)->p1->getP().getY() > max_p) { max_p = (*it)->p1->getP().getY(); } } } PL = (p->getP().getY() - min_p) / (max_p - min_p); PR = (max_p - p->getP().getY()) / (max_p - min_p); } return log((double)TL) * PL.mid() + log((double)TR) * PR.mid(); }