Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.01.2014, 12:01
Профессор
Отправить личное сообщение для Dorian_bs Посмотреть профиль Найти все сообщения от Dorian_bs
 
Регистрация: 24.03.2011
Сообщений: 217

Canvas, реализация веревки
Всем привет!
Встала интересная задача - реализовать по средствам Canvas веревку.
Обошел весь гугл возможными запросами, но нашел только одну статью, в которой показывают уже готовый пример реализации на C++, без описания того, как это было сделано

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

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



Если есть какие то мысли по этому поводу, формулы и пр. - напишите

Последний раз редактировалось Dorian_bs, 12.01.2014 в 12:10.
Ответить с цитированием
  #2 (permalink)  
Старый 12.01.2014, 12:06
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
Конечно есть вариант убить уйму времени "переводя" язык на js
https://github.com/kripken/emscripten/wiki

Цитата:
Using Emscripten, you can

Compile C and C++ code into JavaScript and run that on the web
Run code in languages like Python as well, by compiling CPython from C to JavaScript and interpreting code in that on the web
__________________
kobezzza
code monkey
Ответить с цитированием
  #3 (permalink)  
Старый 12.01.2014, 12:08
Профессор
Отправить личное сообщение для Dorian_bs Посмотреть профиль Найти все сообщения от Dorian_bs
 
Регистрация: 24.03.2011
Сообщений: 217

Сообщение от kobezzza Посмотреть сообщение
https://github.com/kripken/emscripten/wiki
Спасибо
Ответить с цитированием
  #4 (permalink)  
Старый 12.01.2014, 12:15
Профессор
Отправить личное сообщение для Dorian_bs Посмотреть профиль Найти все сообщения от Dorian_bs
 
Регистрация: 24.03.2011
Сообщений: 217

Нашел комментарий одного из пользователей =)) :

Цитата:
XProger:
Верёвки и прочую soft-body (если постараться то и rigid-body) физику можно писать используя интегрирование Верле.
Вся теория завязана на том, что скорость — разница между текущим и предыдущим её положением.
Применительно к задаче реализация сводится к следующему (псевдокод):
Есть набор точек (joints) связанных пружинками (links).
Задача каждой точки — двигаться согласно скорости.

joint.update
tempPos = pos // запоминаем текущую позицию во временную переменную
pos += pos - lastPos // прибавляем скорость
pos += gravity // и вектор гравитации
lastPos = tempPos

Задача каждой пружинки — поддерживать нужное расстояние между её joint'ами.

link.update
delta = joint[1].pos - joint[0].pos // вектор в сторону второй точки
length = sqrt(delta.x^2 + delta.y^2) // текущее расстояние между точками
delta /= length // нормализация вектора
delta *= length - LINK_LENGTH // LINK_LENGTH - расстояние которое следует поддерживать
delta *= FORCE // FORCE - коэффициент упругости пружинки (0..1)
// расталкиваем точки в противоположных направлениях
joint[0].pos += delta * 0.5
joint[1].pos -= delta * 0.5

Сама организация цикла обновления сводится к обновлению всех joint'ов, и нескольким иттерациям обновления всех link'ов (для стабилизации).
Таким незамысловатым способом можно создавать верёвки, рэгдоллы (ограничить углы между link'ами), волосы и даже некий аналог твёрдотельной физики. Реализация простая и никаких физических движков не требует.
Пример работы такой физики.
Ответить с цитированием
  #5 (permalink)  
Старый 12.01.2014, 16:07
Профессор
Отправить личное сообщение для Dorian_bs Посмотреть профиль Найти все сообщения от Dorian_bs
 
Регистрация: 24.03.2011
Сообщений: 217

Нашел решение))
http://habrahabr.ru/post/178135/
Всем удачи!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Canvas картинка с обесцвечиванием. cheba Общие вопросы Javascript 9 31.05.2013 09:13
canvas и drawImage() jussik Элементы интерфейса 0 27.10.2012 16:57
Почему неправильно вырисовывается canvas? Amateur Events/DOM/Window 0 19.09.2012 10:45
Создание экземпляра Canvas не затрагивая HTML Tails Общие вопросы Javascript 2 09.03.2012 13:55
Добавить на canvas еще один елемент greengarlic Общие вопросы Javascript 5 22.09.2010 10:16