Russian Qt Forum
Апрель 25, 2024, 07:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 4 5 [6]   Вниз
  Печать  
Автор Тема: оператор [] для union  (Прочитано 36194 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #75 : Май 20, 2018, 12:20 »

    // _hint - это что вам захочется, тип кривой (и тогда внутре будет свитч по типу кривой)
Внутренние данные (неизменяемые при интерполяции) зависят от типа сплайна. Напр для Безье это red_ctl0 и red_ctl1, но для TCB сплайна это уже t, c и b (3 числа на точку). Поэтому хинты бесполезны, нельзя интерполировать заданный тип кривой не имея нужных параметров в ее точках.

Как я понял, задумка QVariantAnimation в том что QEasyCurve разберется с математикой/сплайнами и выдаст progress который потом используется для линейной интерполяции двух QVariant. Мы можем это изменить сказав QEasyCurve выдавать оригинальное время и написав свою (НЕлинейную) интерполяцию. Этот вызов может выглядеть точно так же, напр
Код
C++ (Qt)
QVariant Interpolate( const MyData & c1, const MyData & c2. double t );
Но тогда что мы имеем с QVariantAnimation ? Да ровным счетом ничего, он бесполезен. Схема "сплайны отдельно, данные отдельно"  слишком красива чтобы быть правдой.

Типов данных к меня 3 , типов сплайна 5. Тупо расписать 3*5 = 15 классов - ну это уже не "перетерпеть", это просто безграмотно. К тому же там совсем не одна интерполяция, нужно апдейтить сплайн на изменения настраиваемых параметров и/или просто значений в точках (если они имеют флажок "автомат"),

Короче - надо обобщать, вот и решил посоветоваться со знатоками которые в курсе всего нового. Ну пока поступило одно предложение - хапнуть готовый класс из букваря. Та, на жаль, моiх бананiв там нема  Плачущий
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #76 : Май 20, 2018, 16:30 »

Ну пока поступило одно предложение - хапнуть готовый класс из букваря. Та, на жаль, моiх бананiв там нема  Плачущий

10й раз - я привел ПРИМЕР API а не сказал взять класс из букваря. Или у вас с чтением проблемы?

Типов данных к меня 3 , типов сплайна 5. Тупо расписать 3*5 = 15 классов - ну это уже не "перетерпеть", это просто безграмотно.

Распишите 5 классов в 4х мерном просранстве и сделайте 3 конвертатора из 4хмерного пространства в нужный тип. Склеивая один с другим, получите 15 вариантов.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #77 : Май 21, 2018, 06:00 »

10й раз - я привел ПРИМЕР API а не сказал взять класс из букваря. Или у вас с чтением проблемы?
Не горячитесь. Хоть бы и взять - в этом нет ничего плохого. Просто не вижу ни как взять, ни как "подсмотреть идею". Если у нас есть напр вызов (уже устал его писать)
Код
C++ (Qt)
QVariant Interpolate( const Variant & c1, const Variant & c2, double t );
То и задача решена, никакие классы не нужны. Пример кода для конкретного типа данных и конкретного сплайна приводил выше. Проблема как это сделать с разнообразными комбинациями данных и сплайнов.

Распишите 5 классов в 4х мерном просранстве и сделайте 3 конвертатора из 4хмерного пространства в нужный тип. Склеивая один с другим, получите 15 вариантов.
"Прошу исполнить"  Улыбающийся

Ну и мы несколько углубились в детали (сплайнов). Изначально рассматривалась только задача хранения таких разнообразных данных в контейнере.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #78 : Май 21, 2018, 06:07 »

Если Вам эта штука приятнее отой бандуры с виртуалами, так и пользуйтесь на здоровье Улыбающийся.
И не подумаю Улыбающийся Ведь "внутренних" методов у такого контейнера масса, и на каждом разрывать QVariant - проще застрелиться. Вот я и предлагаю для общения с классом использовать вариант, а внутри - темплейтшину. Не пойму почему такое простое и естественное (на мой взгляд) решение осуждается. Ну да ладно, а что взамен ?
Ничего пока не услышал  Улыбающийся
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #79 : Май 21, 2018, 11:52 »

И не подумаю Улыбающийся Ведь "внутренних" методов у такого контейнера масса, и на каждом разрывать QVariant - проще застрелиться. Вот я и предлагаю для общения с классом использовать вариант, а внутри - темплейтшину. Не пойму почему такое простое и естественное (на мой взгляд) решение осуждается. Ну да ладно, а что взамен ?
Ничего пока не услышал  Улыбающийся

Вы хочете задачек? Их есть у меня! Улыбающийся Если воспринимать высказывание из этого сообщения буквально, т.е. напрямую транслировать из русского языка в С++, что Вы в нём видете/слышите (не видите/не слышите)?

Давайте оформлю это высказывание немного по другому:
1. работать с контейнерами из элементов Value, Coord, Color:
1.1. по отдельности;
1.2. в compile-time в составе:
1.2.a. структуры,
1.2.b. tuple;
1.3. в run-time в составе vector.
2. Как для этого примеры операторов из моего VarData органично расширяются для контейнеров.
3. Как можно std::any и его визитёров применять, чтобы в vector  в run-time добавлять различные контейнеры данных, если с проектированием голову особо ломать не хочется.
Записан

Пока сам не сделаешь...
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #80 : Май 21, 2018, 13:34 »

"Прошу исполнить"  Улыбающийся

Код:
class LinearInterpolator : public AbstractInterpolator
{
    LinearInterpolator(QVector4D start, ... /*тут */)
    QVector4D interpolate(double time) override
    {
         // тут считаем кривую в 4d в зависимости от опорных параметров, прееданных в конструктор
    }
}

class ColorConverter : public AbstractConverter
{
    ColorConverter(AbstractInterpolator *interpolator) {...}
    Variant interpolate(double time)  override
    {
          auto v = _interpolator()->interpolate(double);
          return Color(v.x(), v.y(), v.z());
    }
}

Ну и дальше кладем в мапу как хотим.
Как менять интерполяторы - это уже к вам, в зависимости от тычек в UI или как там удобно.
В идеале, к каждой проперте привязан интерполятор и конвертер.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #81 : Май 22, 2018, 14:28 »

Ну и дальше кладем в мапу как хотим.
Далась Вам та мапа.. 
Код
C++ (Qt)
class LinearInterpolator : public AbstractInterpolator
{
   LinearInterpolator(QVector4D start, ... /*тут */)
   QVector4D interpolate(double time) override
...
 
На QVector4D дело не кончится, есть еще 2 др типа данных. А для сплайнов выше линейного это даже не QVector4D, есть еще опции/настройки сплайна. Да и вообще зачем выделять сущность/класс "интерполятор"? Какую смысловую нагрузку он несет? Элемент данных хранит и опции сплайна (нужные для интерполяции), ну так почему бы и не поручить интерполяцию ему же? А заодно и др методы для работы со сплайном. А так, ну да, можно создать мапу с 3*5 = 15 интерполяторами, но это не есть хорошо

Вы хочете задачек?
Улыбающийся Ну вообще-то нет, надо заниматься проектом. Просто (в очередной раз) возникла задача "универсальный контейнер", вот решил поинтересоваться как ее вообще решают

Давайте оформлю это высказывание немного по другому:
1. работать с контейнерами из элементов Value, Coord, Color:
1.1. по отдельности;
1.2. в compile-time в составе:
1.2.a. структуры,
1.2.b. tuple;
1.3. в run-time в составе vector.
2. Как для этого примеры операторов из моего VarData органично расширяются для контейнеров.
3. Как можно std::any и его визитёров применять, чтобы в vector  в run-time добавлять различные контейнеры данных, если с проектированием голову особо ломать не хочется.
Не было у меня никаких планов чего-то еще добавлять, а о всяких туплах даже не помышлял  Улыбающийся  Разве термин "контейнер" не самодостаточен? Читать/писать/добавлять/удалять эл-ты - любой контейнер так или иначе реализует этот ф-ционал. Также понятно что если данные разнотипны, то должны быть ограничения, вопрос как их минимизировать. Напр присвоить один эл-т другому без геморроя.  Хорошо хоть в этот раз обошлось ьез реплик типа
Цитировать
С++ типизированный язык, поэтому выражение "универсальный контейнер" - чушь!
Улыбающийся
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #82 : Май 22, 2018, 15:08 »

Код
C++ (Qt)
class LinearInterpolator : public AbstractInterpolator
{
   LinearInterpolator(QVector4D start, ... /*тут */)
   QVector4D interpolate(double time) override
...
 
На QVector4D дело не кончится, есть еще 2 др типа данных.

Мне кажется, или 3х компонентный цвет включен в QVector4D (просто 1 компонента 0), а double - тем более? Или я чего-то не понимаю, как всегда в исходных условиях?
Что, нельзя интерполировать 1 дабл в 4хмерном пространстве?
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #83 : Май 22, 2018, 18:33 »

Практическая часть зашла в тупик, давайте в лирическую.

Просто (в очередной раз) возникла задача "универсальный контейнер"...

Цитировать
    Один контейнер, чтоб править всеми,
    Один главнее всех,
    Один сберёт всех вместе
    И заключит во тьме.

"Моя прелесть..." (с)

Был такой "универсальный контейнер", да спалили его в недрах Ородруина, чтоб тёмным силам не достался. Кстати, персонаж, который его очень сильно жаждал, последовал туда же, в недра.

Записан

Пока сам не сделаешь...
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #84 : Май 23, 2018, 09:01 »

Мне кажется, или 3х компонентный цвет включен в QVector4D (просто 1 компонента 0), а double - тем более?
Кажется, QVector4D хранит 4-байтовые флоты.

Был такой "универсальный контейнер", да спалили его в недрах Ородруина, чтоб тёмным силам не достался. Кстати, персонаж, который его очень сильно жаждал, последовал туда же, в недра.
Вот объясните мне, откуда такое "скептическое" (мягко говоря) отношение к задаче которая возникает "по жизни", т.е. объективно. Ну ладно, тут какие-то сплайны, вот более простой пример

Некоторые части кода (часто плагины, исходников нет) хранят координаты/вектора как тройки float, другие - как тройки double. Более того, один класс хранит одни данные в double, др в float, и на мульенах эл-тов это совершенно обоснованно. Так что мне, все перегонять в double, что ли? Это ни в какие ворота не лезет. Вот Вам и "универсальный контейнер", хочу я или нет, а делать его надо. Не нравится термин - да ради бога, предложите/используйте свой, дело не в терминах. Но чего "фыркать"-то?  Улыбающийся
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #85 : Май 23, 2018, 10:06 »

Некоторые части кода (часто плагины, исходников нет) хранят координаты/вектора как тройки float, другие - как тройки double. Более того, один класс хранит одни данные в double, др в float, и на мульенах эл-тов это совершенно обоснованно. Так что мне, все перегонять в double, что ли? Это ни в какие ворота не лезет. Вот Вам и "универсальный контейнер", хочу я или нет, а делать его надо. Не нравится термин - да ради бога, предложите/используйте свой, дело не в терминах. Но чего "фыркать"-то?  Улыбающийся

Так чем Вам стандартные контейнеры не универсальны? Улыбающийся Если не можете для них писать обобщённые/специализированные алгоритмы, то это не проблема контейнеров. Можете описать спецификацию Вашего "универсального контейнера"? Для образца, вот концепт SequenceContainer.
Записан

Пока сам не сделаешь...
Страниц: 1 ... 4 5 [6]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.122 секунд. Запросов: 22.