void unary_interval_updater::expand(theorem_node *n, property const &p) { int b = 3; property res = p; interval const &bnd = p.bnd(); interval &ih = n->hyp[0].bnd(), &ir = res.bnd(); interval hyp = ih; while (b != 0) { if (b & 1) { number const &old = lower(ih); number m = simplify(old, -1); if (m != old) { hyp = interval(m, upper(ih)); (*compute)(hyp, ir); if (!(ir <= bnd)) { hyp = ih; b &= ~1; } else ih = hyp; } else b &= ~1; } if (b & 2) { number const &old = upper(ih); number m = simplify(old, 1); if (m != old) { hyp = interval(lower(ih), m); (*compute)(hyp, ir); if (!(ir <= bnd)) { hyp = ih; b &= ~2; } else ih = hyp; } else b &= ~2; } } (*compute)(hyp, ir); n->res = boundify(p, res); }
void binary_interval_updater::expand(theorem_node *n, property const &p) { int b = 15; property res = p; interval const &bnd = p.bnd(); interval &i1 = n->hyp[0].bnd(), &i2 = n->hyp[1].bnd(), &ir = res.bnd(); interval hyps[] = { i1, i2 }; while (b != 0) { if (b & 1) { number const &old = lower(i1); number m = simplify(old, -1); if (m != old) { hyps[0] = interval(m, upper(i1)); (*compute)(hyps, ir); if (!(ir <= bnd)) { hyps[0] = i1; b &= ~1; } else i1 = hyps[0]; } else b &= ~1; } if (b & 2) { number const &old = upper(i1); number m = simplify(old, 1); if (m != old) { hyps[0] = interval(lower(i1), m); (*compute)(hyps, ir); if (!(ir <= bnd)) { hyps[0] = i1; b &= ~2; } else i1 = hyps[0]; } else b &= ~2; } if (b & 4) { number const &old = lower(i2); number m = simplify(old, -1); if (m != old) { hyps[1] = interval(m, upper(i2)); (*compute)(hyps, ir); if (!(ir <= bnd)) { hyps[1] = i2; b &= ~4; } else i2 = hyps[1]; } else b &= ~4; } if (b & 8) { number const &old = upper(i2); number m = simplify(old, 1); if (m != old) { hyps[1] = interval(lower(i2), m); (*compute)(hyps, ir); if (!(ir <= bnd)) { hyps[1] = i2; b &= ~8; } else i2 = hyps[1]; } else b &= ~8; } } (*compute)(hyps, ir); n->res = boundify(p, res); }
virtual void enlarge(property const &p) { res = boundify(p, res); }
void ConnectorLine::drawShape(QPainter &p) { if (!m_bAnimateCurrent) { QCanvasLine::drawShape(p); return; } const int ss = 3; // segment spacing const int sl = 13; // segment length (includes segment spacing) int offset = int(dynamic_cast<ElectronicConnector *>(m_pConnector)->currentAnimationOffset() - m_pixelOffset); offset = ((offset % sl) - sl) % sl; int x1 = startPoint().x(); int y1 = startPoint().y(); int x2 = endPoint().x(); int y2 = endPoint().y(); QPen pen = p.pen(); // pen.setStyle( Qt::DashDotLine ); p.setPen(pen); if (x1 == x2) { int _x = int(x() + x1); int y_end = int(y() + y2); if (y1 > y2) { // up connector line for (int _y = int(y() + y1 - offset); _y >= y_end; _y -= sl) { int y_1 = boundify(_y, int(y() + y1), y_end); int y_2 = boundify(_y - (sl - ss), int(y() + y1), y_end); p.drawLine(_x, y_1, _x, y_2); } } else { // down connector line for (int _y = int(y() + y1 + offset); _y <= y_end; _y += sl) { int y_1 = boundify(_y, int(y() + y1), y_end); int y_2 = boundify(_y + (sl - ss), int(y() + y1), y_end); p.drawLine(_x, y_1, _x, y_2); } } } else { // y1 == y2 int _y = int(y() + y1); int x_end = int(x() + x2); if (x1 > x2) { // left connector line int x_start = int(x() + x1 - offset); for (int _x = x_start; _x >= x_end; _x -= sl) { int x_1 = boundify(_x, int(x() + x1), x_end); int x_2 = boundify(_x - (sl - ss), int(x() + x1), x_end); p.drawLine(x_1, _y, x_2, _y); } } else { // right connector line for (int _x = int(x() + x1 + offset); _x <= x_end; _x += sl) { int x_1 = boundify(_x, int(x() + x1), x_end); int x_2 = boundify(_x + (sl - ss), int(x() + x1), x_end); p.drawLine(x_1, _y, x_2, _y); } } } }