Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите найти ошибку 
:(
    Опции темы
asp1rant
Дата 13.2.2012, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 23.12.2009

Репутация: нет
Всего: нет



собсна, вот код:
Код

const int db = 10;
const int len = 10;
const int xsize = 1000;
const int ysize = 1000;
const int degsize = 360;

using namespace cv;
using namespace std;



int myc(double d)
{
    double i;
    if (modf(d,&i)>0.5)
        return ceil(d);
    else
        return floor(d);
}
class PPoint
{
private:
    
public:
    int x,y;
    int angle;
    PPoint(int _x, int _y, int _an)
    {
        x = _x;
        y = _y;
        angle = _an;
    }
    

};

class graf
{
private:
    int mymap[ysize][xsize];
    int state[ysize][xsize][degsize];
    vector <vector< pair<int,int> > > g;
    int id;
    vector<PPoint> points;
public:
    graf()
    {
        int i=1;
    }
    void calcDst(PPoint &p)
    {
        double an1, an2;
        double x1, y1, x2, y2;
        an1 = p.angle - db;
        an2 = p.angle+ db;
        x1 = cos(toRad(an1))*len + p.x;
        y1 = sin(toRad(an1))*len + p.y;
        x2 = cos(toRad(an2))*len + p.x;
        y2 = sin(toRad(an2))*len + p.y;
        double xmin, xmax, ymin, ymax;
        vector<Point2f> vect;
        vect.push_back(Point2f(p.x, p.y));
        vect.push_back(Point2f(x1, y1));
        vect.push_back(Point2f(x2, y2));
        xmin = min(min(p.x, x1), x2);xmin=max(xmin, 0);
        ymin = min(min(p.y, y1), y2);ymin=max(ymin, 0);
        xmax = max(max(p.x, x1), x2);xmin=min(xmin, xsize-1);
        ymax = max(max(p.y, y1), y2);ymin=min(ymin, ysize-1);
        int i, imax, j, jmax;
        Mat mt = Mat(vect);
        double gamma, beta, dr;
        int deg;
        for(i = ceil(ymin); i < floor(ymax); i++)//y
            for(j = ceil(xmin); j < floor(xmax); j++)//x
            {
                if (pointPolygonTest(mt, Point2f(j, i), false) > 0 && mymap[i][j] == 1)
                {
                    //inside
                    gamma = atan(double(i-p.y)/(j-p.x));
                    beta = p.angle - toDeg(gamma);
                    if (fabs(beta) > db)
                    {
                        gamma += M_PI;
                        beta = p.angle - toDeg(gamma);
                    }
                    dr = fabs(beta)*2;
                    deg = myc(dr);
                    if (state[i][j][deg] == 0)
                    {

                        [color=red]points.push_back(PPoint(j, i, deg));[/color]//тут красный
                        int num = points.size()-1;
                        state[i][j][deg] = 1;
                        g[id].push_back(pair<int, int>(num, 1));
                    }

                }
                dr=0;
            }
    }

    void calcGraf()
    {
        int i, j;
        for(i = 0; i < ysize; i++)
        {
            for(j = 0; j < xsize; j++)
                mymap[i][j] = 1;
        }
        id = 0;
        vector<pair<int, int> > p;
        g.push_back(p);
        points.push_back(PPoint(50,50, 0));
        calcDst(points[0]);
        id++;
        while(id != points.size())
        {
            calcDst(points[id]);
            id++;
        }
    }
};
graf g1;



int _tmain(int argc, _TCHAR* argv[])
{
    
    g1.calcGraf();
    
    return 0;
}

совершенно непонятное поведение на красной строчке. после того, как в вектор points заносится новый объект PPoint, портится переменная p. все три ее поля получают одно непонятно откуда взявшееся число (типа -1225435). почему так? мы ведь делаем пуш и он не должен трогать другие значения вектора.с моей точки зрения все корректно, нужен свежий взгляд

Это сообщение отредактировал(а) asp1rant - 13.2.2012, 16:15
PM MAIL   Вверх
borisbn
Дата 13.2.2012, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



после N-ного push_back'а в points память в этом векторе перераспределяется. данные в векторе продолжают оставаться актуальными, а вот ссылка на 0-й элемент указывает в никуда. В общем, замени
Цитата(asp1rant @  13.2.2012,  16:14 Найти цитируемый пост)
void calcDst(PPoint &p)

на
Код
void calcDst(PPoint p)

и будет тебе счастье smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
asp1rant
Дата 13.2.2012, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 23.12.2009

Репутация: нет
Всего: нет



thx
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0805 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.