1

Тема: Алгоритм переміщення вузлів сітки

Іноді для візуального редагування чого-небудь використовують сітку. Тобто програмне забезпечення будує стіку поверх зображення, яке редагється, а користувач переміщує вузли. Коли користувач тягне мишкою один з вузлів, оточуючі його вузли рухаються за ним, дуже плавно і приємно.
Мені потрібно зробити так само. Наразі у мене є масив, кожен з елементів якого описує місцеположення вузла сітки (координати X та Y). Потрібен алгоритм, який пов'язує переміщення того вузла, який тягне користувач, з переміщеннями всіх інших вузлів.

2

Re: Алгоритм переміщення вузлів сітки

Може для Вас будуть корисними ці посилання:
http://libregraphicsworld.org/blog/entr … sform-tool
http://www.gegl.org/
Я шукав в сторону GIMP Cage Transform Tool Code.

3

Re: Алгоритм переміщення вузлів сітки

Ну це вже з гармати на горобців, вибачте.
Єдиного "правильного" алгоритму тут немає, бо завдання є різні, і різними мають бути дії, але, в загальних рисах, все виглядає так: є масив точок, координати тієї точки, яку рухає користувач, і величина зсуву. Якщо точки не пов'язані, то масив не зміниться, тільки та, яку рухають, посунеться. Якщо точки закріплені як частини твердого тіла, то всі точки посунуться на однаковий зсув. Тобто первинна формула зсуву для решти точок буде
(нові координати) = (старі координати) + (зсув) * коефіцієнт.
Коефіцієнт, очевидно, 0 для "газу" і 1 для "твердого тіла". Далі вимальовуються такі питання: чи всі точки мають однаковий зв'язок із тією, яку рухають? Може, там є виділені ("сусіди") і решта, яка не буде рухатися? Чи сусіди сусідів рухаються так, ніби їх тягнуть вже сусіди? Чи, може, величина руху залежить від відстані до рухомої точки? чи будуть ті точки, що знаходилися в напрямку руху, "тікати" від рухомої точки? якщо це не точки, а вузли, то чи мають вони орієнтацію і чи будуть в русі повертатися?

Подякували: cuhedg2

4

Re: Алгоритм переміщення вузлів сітки

koala, якось так я і спробував зробити нашвидкоруч. В принципі, всю математику я і сам можу прописати, якщо поборю свою лінь. Мені цікаво було, чи немає десь опису чогось подібного на те, чого хочу я. Щоб не винаходити велосипед.
Тіло не тверде, але і не газ. Значить, рідина. Точки між собою пов'язані, сусіди сусідів рухаються так, ніби їх тягнуть вже сусіди. Точки, що знаходились в напрямку руху, тікають від рухомої точки. Орієнтації у моїх вузлів немає.

5

Re: Алгоритм переміщення вузлів сітки

Ну тоді навмання - ставте коефіціент 0.5 для сусідів, 0.25 для сусідів сусідів і т.д. і перевіряйте, воно чи не воно.

6 Востаннє редагувалося Yola (11.02.2015 18:45:08)

Re: Алгоритм переміщення вузлів сітки

Взагалі, такого типу взаємодію з мишкою радять чіпляти на пружинку, тобто додається пружинка між мишкою і взятою точкою. Це задля плавності і красивості для ока. Мабуть, для такої пружинки можна спробувати взяти просто закон Гука [formula]ma = -kx.[/formula] Звісно застосовувати треба не до прискорення, а до швидкості, бо інакше отримаєте коливання нескінченні:)

Подякували: koala, Chemist-i2