Название: Не получается задать размер массиву Отправлено: voodoo от Май 29, 2012, 01:10 Вообщем, суть проблемы. Есть массив точек m_points, объявленный как: QVector<QPoint> m_points;
Мне нужно создать массив такой же размерности как и m_points, но вместо этого ему постоянно присваивается значение 0. Помогите разобраться, уже и так, и сяк, и не работает хоть убей. Код: void PointsToVector() Название: Re: Не получается задать размер массиву Отправлено: kambala от Май 29, 2012, 01:36 Код полагаю это и есть проблемная строчка. Код изучать C++ надо прежде всего. Название: Re: Не получается задать размер массиву Отправлено: sidsukana от Май 29, 2012, 06:09 Код полагаю это и есть проблемная строчка. Код изучать C++ надо прежде всего. Для STL контейнеров существует resize(size); Название: Re: Не получается задать размер массиву Отправлено: voodoo от Май 29, 2012, 09:08 Тьфу, забыл добавить что массив объявляется как структура:
Код: struct m_vector Название: Re: Не получается задать размер массиву Отправлено: Igors от Май 29, 2012, 09:23 Там много чего неправильно, вдаваться в критику - пустая трата времени. Скажите что Вам нужно, как я понял найти все наклоны - углы ребер исходящих из m_startpoint в точки на расстоянии не более (5, 5) ?
Название: Re: Не получается задать размер массиву Отправлено: voodoo от Май 29, 2012, 09:32 Вообщем, это дипломная работа - рисуешь граф, задаёшь точку для распознавания и погнал.
На данный момент надо: указал точку, определить какие рёбра выходят из этой точки и определить их угол наклона. Вообщем, вот проект: http://rghost.ru/38346884, правда нужен Qt Creator. По возможности - напишите свою критику, что где не так. Заранее спасибо. Название: Re: Не получается задать размер массиву Отправлено: Igors от Май 29, 2012, 10:24 Вообщем, это дипломная работа - рисуешь граф, задаёшь точку для распознавания и погнал. Хмм... ну давайте все-таки ограничимся тем что нужно на данный момент :)На данный момент надо: указал точку, определить какие рёбра выходят из этой точки и определить их угол наклона. Вообщем, вот проект: http://rghost.ru/38346884, правда нужен Qt Creator. По возможности - напишите свою критику, что где не так. Заранее спасибо. Вот набросок Код
Название: Re: Не получается задать размер массиву Отправлено: voodoo от Май 29, 2012, 11:14 Спасибо за пример, но хотелось бы реализовать так - как я вижу это в своём проекте. Так проще для понимания, я только начинаю)
Так почему же ptv_vector не создаётся размерности m_points.size()? Название: Re: Не получается задать размер массиву Отправлено: Igors от Май 29, 2012, 12:08 Спасибо за пример, но хотелось бы реализовать так - как я вижу это в своём проекте. Так проще для понимания, я только начинаю) Это вполне нормально/понятно - ведь что-то уже написано и оно "почти работает" :)Нужно только чуть-чуть доделать - и все. Однако это чуть-чуть оказывается очень и очень долгим. Граф, ребра - все это вещи хорошо известные, так зачем изобретать велосипед (в данном случае очень паршивый)? Храните ребра как делают все - индексы 2 вершин (которые это ребро соединяет). Плюс доп данные (в данном случае угол). Если Вы только начинаете - не лезьте в глупые итераторы, обходитесь циклом for. Если Вы замечаете что получается длинное/неудобное выражение - делайте метод (таких маленьких методов обычно много у класса "ребро"). Объявляя массив думайте точно ли он нужен и точно ли этой размерности. А пока все Ваши массивы - источники ошибок, которые Вы будете искать очень долго. Название: Re: Не получается задать размер массиву Отправлено: voodoo от Май 29, 2012, 12:19 Ладно, допустим вместо координат - будут индексы, так ещё проще выйдет. Но мне хоть убей нужно объявить массив, размерность которого я знаю :-\
Название: Re: Не получается задать размер массиву Отправлено: Igors от Май 29, 2012, 12:29 Ладно, допустим вместо координат - будут индексы, так ещё проще выйдет. Но мне хоть убей нужно объявить массив, размерность которого я знаю :-\ Создайте новый проект, в нем объявите структуру m_vector и выделите массив как указал kambala. Сообщите результатНазвание: Re: Не получается задать размер массиву Отправлено: voodoo от Май 29, 2012, 14:00 Код (http://storage7.static.itmages.ru/i/12/0529/h_1338289228_5141188_5160539e8b.png) Снова печаль :-\ Название: Re: Не получается задать размер массиву Отправлено: Пантер от Май 29, 2012, 14:04 И в чем печаль?
Название: Re: Не получается задать размер массиву Отправлено: mutineer от Май 29, 2012, 14:09 Название: Re: Не получается задать размер массиву Отправлено: kambala от Май 29, 2012, 14:11 массив надо ещё заполнить нужными элементами - из воздуха они не появятся
Название: Re: Не получается задать размер массиву Отправлено: voodoo от Май 29, 2012, 14:52 Печаль в том что размер m_points сумасшедший.
Код (http://storage7.static.itmages.ru/i/12/0529/h_1338292325_2552036_7746f1f420.png) И заполняется как я понял только одна ячейка. Название: Re: Не получается задать размер массиву Отправлено: Igors от Май 29, 2012, 15:00 А отладчик и не обязан показывать все элементы массива выделенного динамически. Напр у меня Xcode тоже показывает только первый элемент. Напоминает анекдот "трусы линяют" :)
Название: Re: Не получается задать размер массиву Отправлено: kambala от Май 29, 2012, 15:02 дебаггер - это конечно здорово, но выводить значения можно и с помощью cout/qDebug(). а чтоб наверняка, то инициализируй поля структуры в зависимости от i.
если размер m_points очень большой, то может имеет смысл отказаться от контейнера и хранить точки сразу в обычном массиве, раз нужно в него преобразовывать? Название: Re: Не получается задать размер массиву Отправлено: voodoo от Июнь 03, 2012, 04:22 Вообщем, вышло всё как хотел, но теперь другая проблема - криво вычисляет углы наклона.
Код: for(int i=0; i<j; i++) Начальная точка: (150,286) Рёбра: (170,251) (150,286) 60 (150,286) (190,286) 0 (170,321) (150,286) 300 (150,286) (110,286) 0 Но отображает совсем другие радианы: "rebro" 2.08994 "rebro" 0 "rebro" 4.1931 "rebro" 3.14159 В чём может быть проблема? Название: Re: Не получается задать размер массиву Отправлено: Igors от Июнь 03, 2012, 10:24 qAbs неправильно. Ф-ция atan2 сама разбирается со знаками и возвращает угол от -PI до PI, положительный угол отсчитывается против часовой стрелки. Пример
(170,251) (150,286) // вектор из begin в end atan2(35, -20) = 2.08 // примерно 119.7 градусов, как Вы насчитали 60 ? Название: Re: Не получается задать размер массиву Отправлено: voodoo от Июнь 03, 2012, 13:17 Да вот тоже понять не могу, по картинке должно быть 60, а выходит совсем по другому.
Название: Re: Не получается задать размер массиву Отправлено: kambala от Июнь 03, 2012, 13:38 смежный угол как раз равен ~120 градусам, так что можно просто делать "180 - результат"
Название: Re: Не получается задать размер массиву Отправлено: Igors от Июнь 03, 2012, 15:37 Да вот тоже понять не могу, по картинке должно быть 60, а выходит совсем по другому. Выходит правильно, просто в экранных координатах Y идет вниз, а в мировых вверх. Поэтому если хотите соответствия рисунку - берите Y с минусомКод Ну и конечно базовая точка всегда должна быть первой (отнимаемой). А у Вас то так, то сяк Рёбра: (150,286) должно быть всегда слева(170,251) (150,286) 60 (150,286) (190,286) 0 (170,321) (150,286) 300 (150,286) (110,286) 0 |