C++ (Qt)float distance = sqrt(sx * sx + sy * sy);if (distance >= R) return; // радар внутри круга float delta_angle = asin(R / distance);float mid_angle = atan2(sy, sx);float angle1 = mid_angle - delta_angle; // первый угол (в радианах)float angle2 = mid_angle + delta_angle; // второй
C++ (Qt)float dist2 = distance * cos(delta_angle);inters_x = dist2 * cos(angle1);inters_y = dist2 * sin(angle1);
QPointF Arthur::intersectPoint(QGraphicsItem *it){ bool first = true; QPointF t1, t2, t3; QPainterPath h = it->shape(); for (int i = 1; i< h.elementCount(); i++) { if (!first) { t1 = h.elementAt(i); continue; } t2 = h.elementAt(i); QLineF l1 (it->mapToScene(t1),it->mapToScene(t2)); if(Linne->intersect(l1, &t3) == 2) { break; } t1 = t2; } sc->addRect(t3.x(),t3.y(),150,150,QPen(),QBrush(QColor(Qt::red))); // Этот QRect рисует черт знает где , а не в точке пересечения... }
C++ (Qt)float angle = atan2(point.y, point.x);