Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2010, 16:33   #1
iworb
Новичок
Джуниор
 
Регистрация: 11.12.2010
Сообщений: 2
По умолчанию Цикл и вектор

Проблема в том, что оно входит в цикл ака for(i=0;i<-1;i++)
Сразу даю кусок кода =)
В функцию передаем координаты вершин фигуры, прямоугольник, по которому отсекаем ее и цвет
points - vector<point> (в point находятся x и y)
rect - структура из left, right, top, bottom
Код:
void Cross(points p, rect r, int cc)
{
        p.push_back(p[0]);//добавим в начало первую точку, чтобы всю фигуру анализировать
        int i,j;
        points swap(15), tmp(15);
        point temp;
        swap.clear();
        tmp.clear();
        //left-----------------------------
        for(i=0;i<p.size()-1;i++)//отсечение фигуры по x=r.left. Новая фигура в tmp
        {
                if(p[i].x<r.left&&p[i+1].x<r.left) continue;
                if(p[i].x>=r.left&&p[i+1].x>=r.left)
                {
                        tmp.push_back(p[i+1]);
                        continue;
                }
                if(p[i].x<=r.left&&p[i+1].x>=r.left)
                {
                        temp.x=r.left;
                        temp.y=p[i].y+(p[i].y-p[i+1].y)*(r.left-p[i].x)/(p[i].x-p[i+1].x);
                        tmp.push_back(temp);
                        tmp.push_back(p[i+1]);
                        continue;
                }
                if(p[i].x>=r.left&&p[i+1].x<=r.left)
                {
                        temp.x=r.left;
                        temp.y=p[i].y+(p[i].y-p[i+1].y)*(r.left-p[i].x)/(p[i].x-p[i+1].x);
                        tmp.push_back(temp);
                        continue;
                }
        }
        if(tmp.size()>0) tmp.push_back(tmp[0]);
        //right----------------------------
        for(i=0;i<tmp.size()-1;i++)//изначально фигура не пересекает область и tmp.size() возвращает 0, но в цикл оно заходит(((
        {
                if(tmp[i].x>r.right&&tmp[i+1].x>r.right) continue;
                if(tmp[i].x<=r.right&&tmp[i+1].x<=r.right)
                {
                        swap.push_back(tmp[i+1]);
                        continue;
                }
                if(tmp[i].x<=r.right&&tmp[i+1].x>=r.right)
                {
                        temp.x=r.right;
                        temp.y=((r.right-tmp[i].x)*(tmp[i+1].y-tmp[i].y))/(tmp[i+1].x-tmp[i].x)+tmp[i].y;
                        swap.push_back(temp);
                        continue;
                }
                if(tmp[i].x>=r.right&&tmp[i+1].x<=r.right)
                {
                        temp.x=r.right;
                        temp.y=((r.right-tmp[i].x)*(tmp[i+1].y-tmp[i].y))/(tmp[i+1].x-tmp[i].x)+tmp[i].y;
                        swap.push_back(temp);
                        swap.push_back(tmp[i+1]);
                        continue;
                }
        }
        //---------------------------------
        p.pop_back();
}

Последний раз редактировалось iworb; 11.12.2010 в 16:37.
iworb вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
Вектор? Slavik Microsoft Office Excel 0 23.02.2009 10:30
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34