• Триангуляция поверхности и её сглаживание. Как грамотно реализовать?

    @nirvimel
    Для начала попробуйте на время забыть про физический смысл ваших данных, про все высоты и про 3D вообще. Дальше у вас имеется просто некая функция z = f(x, y) от двух аргументов, заданная таблицей значений в некоторых точках (ваши высоты). Вам нужно получить значения этой функции в других точках с меньшим шагом, то есть с большим разрешением по x и y. Это классическая задача 2D-интерполяции. Методов решения масса. Классикой считаются Бикубическая интерполяция и Фильтр Ланцоша.

    Что касается готовых решений, то, например, в scipy есть соответствующие инструменты.
    Ответ написан
    1 комментарий
  • Как быстро вспомнить былые школьно-университетские знания по математике, геометрии, тригонометрии?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    вики и гугл.
    Ответ написан
    Комментировать
  • Qt. Как передавать данные между формами?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    На самом деле вам не нужно ничего и никуда передавать, как мне кажется. Т.к. вторая форма используется только для создания новых элементов. Но обо всём по порядку. В приведённом фрагменте кода я вижу несколько архитектурных проблем (если не интересно, можете игнорироваться все, кроме пункта 3):
    1) Вторая форма создаётся каждый раз, когда пользователь кликает на кнопку add_item. Это утечка памяти, т.к. все формы будут удалены только после удаления главного окна, но не ранее. Почему бы не создать форму один раз и просто её не показывать на действие? Создали в классе поле QScopedPointer m_addItemDlg (ну или std::unique_ptr), один раз выделили память в конструкторе и радуетесь жизни.
    2) Это не очень хорошо, что Institution хранится в контейнере QList по значению т.к., скорее всего вы не реализовали семантику перемещения и всё это копируется... Хотя бы по этой причине (и по многим другим) стоит подумать о том, чтобы хранить все элементы как shared_ptr.
    3) Наконец-то мы добрались и до вашего вопроса! В Qt есть отличный механизм слотов и сигналов. В вашем случае идея проста: у главной формы надо реализовать слот onInstitutionAdded а у второй формы дописать сигнал institutionAdded и соединить их в конструкторе главной формы. Когда новый объект создан выслать сигнал из второй формы и в слоте главного окна реализовать добавление в коллецию.
    Если же нужно будет редактировать какой-то итем в коллекции, то его конечно лучше передать просто по ссылке перед тем как показать форму. Ну и в этом случае посмотреть уже в сторону Qt model-view.
    4) Название класса второй формы слишком общее и ни о чем не говорит.
    Ответ написан
    2 комментария
  • Qt. Как передавать данные между формами?

    @Mercury13
    Программист на «си с крестами» и не только
    Вариантов много, в зависимости от того, форма модальная или нет, и нужно ли каким-то моделям передавать сообщение «обновись».

    Вариант 1.
    class AddItem : public QWidget
    {
    public:
      AddItem(QWidget* aParent, QList<Institution>& aInstitutions)
          : QWidget(aParent), institutions(aInstitutions) {}
    private:
      QList<Institution>& institutions;
    };


    Во втором варианте у нас модальная форма, но редактировать можно только копию (например, институции первой формы задействованы в какой-то модели, или нужны каскадные удаления, или что-то ещё).
    class AddItem : public QDialog
    {
    public:
      int exec(QList<Institution>& aInstitutions);
    private:
      QList<Institution> institutions;
    };
    
    int AddItem::exec(QList<Institution>& aInstitutions)
    {
      institutions = aInstitutions;
      int r = QDialog::exec();
      if (r) {
         aInstitutions = std::move(institutions);
      }
      return r;
    }


    И много-много других вариантов.
    Ответ написан
    Комментировать
  • Qt. Как передавать данные между формами?

    AtomKrieg
    @AtomKrieg
    Давай я поищу в Google за тебя
    По неконстантной ссылке (или указателю):
    class AddItem
    {
        AddItem(MainWindow *parent, QList<Institution>& ins);
    ...
    private:
    QList<Institution>& parent_institutions;
    };

    Но вообще это плохая практика. Свою приватную переменную должен редактировать класс который ей владеет. Для этого нужны свои методы - MainWindow::AddInstitution, MainWindow::RemoveInstitution, etc. Так как это у вас QT, то тут надо использовать слоты и сигналы.
    Ответ написан
    Комментировать
  • ООП. Как правильно организовать связь классов?

    AtomKrieg
    @AtomKrieg
    Давай я поищу в Google за тебя
    Класс предмет - имеет абстрактный метод, который возвращает название. Классы потомки "Математика", "Физика", "Информатика" их реализуют
    Ответ написан
    3 комментария