Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [СИ++]пересечение


Автор: pawelkovalev 29.10.2011, 18:21
Дана окружность с координатами центра и радиус, Дан прямоугольник с координатами его вершин, Как Проверить есть ли пересечение окружности и прямоугольника?

Хоть убейте не могу понять как проверить пересекаются ли стороны прямоугольника с окружностью:(

Автор: Dov 31.10.2011, 00:42
Как-то так, вроде бы...

Код

struct CIRCLE
{
    int r;      // радиус окружности
    int x;      // x-координата центра окружности 
    int y;      // y-координата центра окружности
};

struct RECTANGLE
{
    int lft;    // x-координата левого верхнего угла прямоугольника
    int top;    // y-координата левого верхнего угла прямоугольника
    int rgt;    // x-координата правого нижнего угла прямоугольника
    int btm;    // y-координата правого нижнего угла прямоугольника
};

bool isIntersect(CIRCLE c, RECTANGLE r)
{
    return (abs(c.x - r.lft) <= c.r ||
            abs(c.x - r.rgt) <= c.r ||
            abs(c.y - r.top) <= c.r ||
            abs(c.y - r.btm) <= c.r);
}

int main()
{
    CIRCLE     circ;
    RECTANGLE  rect;

    circ.r   =  2;
    circ.x   =  3;
    circ.y   = -4;

    rect.lft = -2;
    rect.top =  3;
    rect.rgt =  4;
    rect.btm = -7; 
    
    if(isIntersect(circ, rect))
        cout << "Da";
    else
        cout << "Net";

    cout << endl;
    return 0;
} 

Автор: baldina 31.10.2011, 01:12
Цитата(pawelkovalev @  29.10.2011,  18:21 Найти цитируемый пост)
Как Проверить есть ли пересечение окружности и прямоугольника?

окружность (x,y,r) и прямоугольник НЕ пересекаются, если
1. прямоугольник внутри окружности, т.е. для каждой вершины (x',y') прямоугольника (x'-x)*(x'-x)+(y'-y)*(y'-y) < r*r
2. окружность внутри прямоугольника
3. все точки прямоугольника находятся по одну сторону окружности на расстоянии > r

в остальных случаях пересекаются

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)