Как Вы тянете как Мелок?

Я думаю, я бы сделал это, чтобы получить базовые данные:

select uid, date, sum(credit) as credit, sum(debit) as debit
from ((select uid, dat amt as credit, 0 as debit
       from credittable1
      ) union all
      (select uid, dat amt as credit, 0 as debit
       from credittable2
      ) union all
      (select uid, dat amt as credit, 0 as debit
       from credittable3
      ) union all
      (select uid, dat, 0, - amt
       from debittable
      )
     ) ad
group by uid, dat
order by uid, date;

Затем вы можете использовать переменные для получения баланса:

select uid, date,
       (@b := if(@u = uid, @u + credit + debit,
                 if(@u := uid, credit + debit, credit + debit)
                )
       ) as balance
from (select uid, date, sum(credit) as credit, sum(debit) as debit
      from ((select uid, dat amt as credit, 0 as debit
             from credittable1
            ) union all
            (select uid, dat amt as credit, 0 as debit
             from credittable2
            ) union all
            (select uid, dat amt as credit, 0 as debit
             from credittable3
            ) union all
            (select uid, dat, 0, - amt
             from debittable
            )
           ) ad
      group by uid, date
      order by uid, date
     ) ud cross join
     (select @u := -1, @b := 0) balance;

Или в MySQL 8+ может использовать накопленную сумму:

sum(debit + credit) over (partition by uid order by date)
39
задан Glorfindel 27 February 2019 в 20:00
поделиться

6 ответов

Я не забываю читать (давным-давно) краткое описание алгоритма, чтобы сделать так:

  • для общей формы строки, Вы разделяете сегмент в два в случайной точке и перемещаете эту точку немного далеко от, он - положение (изменение в зависимости от расстояния точки к оконечности). Повторитесь рекурсивно/случайным образом. Таким образом, Вы строки не "прекрасны" (прямая линия)

  • для данного сегмента, по которому можно "промахнуться" немного путем расширения одной оконечности или другого (или оба). Таким образом, у Вас нет идеальных соединений . Если я помню хорошо, лучшее было к, расширяет исходные оконечности, но можно сделать это для подсегмента, если Вы хотите явно разделить их.

  • проводят линии с шаблоном/штампом

  • было также (уже упомянуто) возможность оттянутому с другим запуском и конечной непрозрачностью (для имитации тенденции выпустить перо в конце рисования)

  • , можно использовать другой размер для штампа в начале и конце строки (также для имитации тенденции выпустить перо в конце рисования). Для того же эффекта можно также разграничить дважды с маленьким изменением для одной из оконечности (быть осторожным с альфой в этом случае, как линия будет проведена дважды)

  • Наконец, для данной строки, можно несколько раз делать предыдущие модификации (т.е. разграничивать дважды с различными изменениями): человек склонен повторять строку, если они делают некоторые ошибки.

Отношения

21
ответ дан PATRY Guillaume 27 November 2019 в 02:49
поделиться

При выдувании изображения, Вы видите повторяющийся шаблон штампа.. существует, вероятно, маленький выбор, который это использует, когда это перемещается от до b - мог бы даже повернуть их..

колеблющаяся из строки не может быть всем этим трудным сделать. Разделитесь на набор случайных сегментов, выберите положения немного далеко от прямого маршрута и потяните шлицы.

7
ответ дан mmcdole 27 November 2019 в 02:49
поделиться

Вот бумага , который использует много математики для моделирования смещения воска на бумаге с помощью модели трения. Но я думаю, что Ваш лучший выбор состоит в том, чтобы просто использовать повторяющийся шаблон, как другой читатель упомянул, и варьируйтесь непрозрачность согласно давлению.

Для несовершенных частей рисования строки, я имею запись в блоге описание, как сделать это с помощью кривых Безье.

7
ответ дан Steve Hanov 27 November 2019 в 02:49
поделиться

Можно основывать темноту на скорости. Это просто имеет размеры, расстояние переместилось курсором между этим кадром, и последний кадр (помните Теорему Пифагора), и затем когда Вы идете, чтобы привлечь тот линейный сегмент на экране, скорректировать альфу (непрозрачность) согласно расстоянию, Вы имели размеры.

4
ответ дан mmcdole 27 November 2019 в 02:49
поделиться

Я считаю, что проще всего было бы просто использовать текстуру со случайным затемнением (возможно, с некоторыми градиентами) повсюду и задавать размер случайным образом.

0
ответ дан 27 November 2019 в 02:49
поделиться

Есть бумага под названием Mimicking Hand Drawn Pencil Lines , в которой немного рассказывается о том, что вам нужно. Хотя в нем нет подробного представления об алгоритме, авторы описывают основные шаги, которые они использовали.

В этот документ включены высокоуровневые описания того, как они генерировали линии, а также как они генерировали текстуры для линий, и они получают результаты, подобные тем, которые вы хотите.

4
ответ дан 27 November 2019 в 02:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: