Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Розроблення алгоритмів динамічного керування товщиною пензля

Читайте также:
  1. Коефіцієнт динамічного навантаження KFV при твердості поверхні зубів HB£ 350
  2. Панель керування Windows XP
  3. Послідовність розроблення макета бланка з поздовжнім розташуванням реквізитів для службового листа.
  4. Розроблення алгоритмів зафарбовування
  5. Розроблення алгоритму згладжування кутів
  6. Розроблення дизайну меню та елементів управління

Розібравшись зі згладжуванням кутів, можна перейти до різноманітних ефектів зміни товщини під час малювання. Якщо малювати зі стабільною товщиною пензля, виходить лінія, яку звично бачити в багатьох графічних редакторах (рис. 2.7.1).

Рис. 2.7.1 Зразок малюнка без використання динамічної товщини пензля.

 

Малюючи на папері, можна помітити, що чим швидше вести маркер, тим тоншою виходить лінія. Якщо реалізувати подібний ефект в графічному редакторі – малюнки виходитимуть більш ефектними, а лінія вийде такою, наче вона намальована справжнім, звичним маркером. Реалізувати такий підхід можна за допомогою коду, представленого в лістингу 2.7.1.

float dx = lx - x;
float dy = ly - y;
float d = (float)Math. sqrt (dx*dx + dy*dy);
return (brushSize / Math. max (1, (d/(float)Data. store. DPI * 50f)));

Лістинг 2.7.1. Розрахунок товщини пензля від швидкості руху.

 

В представленому коді використовуються поточні координати пальця (x та y) та попередні координати (lx та ly). На їх основі розраховується відстань яку було пройдено на останній крок за Теоремою Піфагора та остаточно розраховується товщина пензля. Товщина пензля варіюється в інтервалі від початкової товщини пензля до мінімально можливої. Число DPI – це число точок на дюйм на даному пристрої, і потрібно воно для того, щоб на всіх пристроях алгоритм міг працювати однаково добре. Число 50f – це емпірично підібраний множник, який забезпечує достатню чутливість товщини пензля від малювання. Результат роботи такого алгоритму можна бачити на рис. 2.7.2.

Рис. 2.7.2 Робота алгоритму динамічної товщини пензля від швидкості малювання

 

Як видно з рисунка, даний результат складно назвати схожим на малюнок маркером. Так відбувається тому, що маркер зазвичай не моментально реагує на зміну швидкості руху, а алгоритм дає моментальну зміну товщини, що призводить до різких стрибків. Щоб цього позбавитись, введемо функцію згладжування стрибків товщини (лістинг 2.7.2).

private float smoothBrushSize(float in){
return lastSize + (in - lastSize) * 0.3f;
}

Лістинг 2.7.2 Функція згладжування різких стрибків товщини пензля

 

На вході функції знаходиться те значення товщини, яке розрахувала функція з лістингу 2.7.1, а lastSize – значення товщини пензля на попередньому кроці. Коефіцієнт 0.3f – емпірично отриманий коефіцієнт, який забезпечує достатню чутливість функції до переходів товщини і в той же час не допускає різких стрибків. Якщо застосувати алгоритм згладжування до алгоритму товщини пензля з лістингу 2.7.1, отримаємо результат, зображений на рисунку 2.7.3.

Рис. 2.7.3 Результат роботи динамічної товщини пензля, що залежить від швидкості малювання із застосуванням алгоритму згладжування стрибків товщини пензля

 

Розглянемо ще один підхід до товщини пензля. Спробуємо розробити алгоритм, який дозволить змінювати товщину пензля відповідно до того, як сильно користувач тисне на дисплей свого пристрою. Здається, що така можливість відсутня в смартфонах на ринку, однак якщо вивчати достатньо глибоко, виявляється, що більшість пристроїв середньої та високої цінових груп підтримують розпізнавання сили дотику. От лише цю можливість практично ніхто із розробників ПЗ не використовує.

Незважаючи на те, що більшість пристроїв таку можливість підтримує, кожен з них використовує різний діапазон значень для позначення сили дотику. Таким чином, Galaxy S2 відображає силу дотику в діапазоні від 0.0 до 0.5 одиниць сили, в той час як Nexus 7 передає в програму значення від 0.0 до 3.0. Саме через таку неоднозначність виникає проблема адаптації до кожного окремого пристрою.

Для вирішення проблеми неоднозначності інтервалів в програмі передбачена спеціальна змінна, pressureCoefficient. Вона зберігається в файлі конфігурації програми та містить в собі максимальне значення сили дотику, що коли-небудь було отримано програмою на цьому пристрої. Уточнення цього значення відбувається навіть тоді, коли керування силою дотику неактивно. Це дозволяє зібрати всю необхідну для роботи алгоритму інформацію ще до того, як користувач звернеться до керування силою дотику.

Розрахунок сили товщини пензля виконується кодом, представленим в лістингу 2.7.3

return (brushSize * (pressure/ pressureCoefficient));

Лістинг 2.7.3. Розрахунок товщини пензля від сили дотику

 

В коді використовується pressureCoefficient, розглянутий вище, та pressure – значення сили дотику в даний момент часу, що надається системою. Остаточна товщина пензля визначається пропорційно до сили дотику, де максимально можлива товщина пензля – задана в налаштуваннях.

Далі результат роботи цих розрахунків, як і в попередньому алгоритмі, проходить згладжування від різких стрибків та використовується при малюванні. Результат його роботи можна бачити на рис. 2.7.4

Рис. 2.7.4 Результат роботи алгоритму визначення товщини пензля від сили дотику.

 


Дата добавления: 2015-08-09; просмотров: 73 | Нарушение авторских прав


Читайте в этой же книге: АНАЛІЗ КОНКУРЕНТНИХ РІШЕНЬ НА РИНКУ | Критерії порівняння програмних продуктів | Огляд програми «SketchBook Express» від Autodesk Inc. | Огляд програми «Рисование» від developer5 | Розроблення структури меню та інтерфейсу програми | Розроблення дизайну меню та елементів управління | Розроблення набору кольорів для палітри | ОПИС ПРОГРАМНОГО ПРОДУКТУ | Меню жестів | Головне меню |
<== предыдущая страница | следующая страница ==>
Розроблення алгоритму згладжування кутів| Розроблення алгоритмів зафарбовування

mybiblioteka.su - 2015-2024 год. (0.007 сек.)