| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Графический симулятор человеческой руки |
| Автор: profesiachuvak 18.2.2011, 20:11 |
| Здравствуйте форумчане. Появилась необходимость создать графический симулятор человеческой руки. В упрощённом виде. Меня интересует передвижение руки в одной плоскости (на руку смотрим сверху). Есть два отрезка: от плеча до локтя и от локтя до кисти (сама кисть не интересует). Вообщем имеем два отрезка соединённый между собой, и они двигаются в плоскости XY. Главное условие этого симулятора максимально точное позиционирование её на координатной сетке. Смысл симулятора в том, что мы задаём координату (X;Y) и конец второго отрезка перемещается в эту точку. При этом естественно двигается и первый отрезок, но они как и настоящая человеческая рука не удлиняются, а согинаются под различными углами относительно друг друга. Место воображаемого плеча (начало первого отрезка) строго зафиксировано, т.е. его положение не изменяется. Вопрос: чем мне воспользоваться для отображения этой графики? Как максимально точно обеспечить правильность позиционирования. Какие компоненты на это способны? |
| Автор: CodeMonkey 18.2.2011, 20:46 |
| Есть мнение, что для отображения двух отрезков можно воспользоваться чем угодно. |
| Автор: VictorTsaregorodtsev 18.2.2011, 21:55 |
| Правильность позиционирования обеспечивается при решении обратной задачи кинематики. Т.е. смотрите на алгоритмы управления "многосуставными" манипуляторами роботов - у этих "рук" тоже есть ограничения на углы поворота в отдельных суставах. Естественно, вряд ли будут готовые компоненты ;) Слишком уж задача невостребована массами, несмотря на то, что алгоритмы известны уже несколько десятилетий. Могу написать код (правда, на С) для манипулятора с любым числом шарниров, в том числе и в варианте, когда рука огибает те или иные препятствия (на плоскости или в объеме) для достижения кистью заданной точки. Естественно, незабесплатно ;) |
| Автор: Gwire 19.2.2011, 16:39 |
| Здесь все просто. (но лучше сразу взять ручку бумагу и линейку) Плече и локоть можно представить двумя сторонами триугольника П и Л. Скажем вершины креугольника О(неподвижная точка), С(сустав) и К(кисть). При перемешении К, ОС и СК менятся (по условию) не могут. Значит меняется ОК и углы между сторонами треугольника. Возмем что координаты О=0,0 (попровку OffsetX и OffsetY для сделать не сложно). 1) ОК можно посчитать за Пифагором, относительно координат О и новой позиции К. 2) Зная длину всех сторон можно расчитать угол СОК (этого в сети навалом). 3) Считаем угол КОХ (где Х точка на оси ординат) относительно позиции К 4) Узнаем угол плеча к оси ординат СОК + КОХ. 5) Узнаем координаты вершины С за стороной П и углом СОХ. 6) Нарисовать линии по найденным коодинатам (не забываем про Offsetы). |
| Автор: profesiachuvak 19.2.2011, 21:23 |
| Gwire, спасибо за ответ. Попробую прикинуть на бумаге. Вообщем-то сам расчёт углов и координат я сделаю сам. В этом вопроса нет. Нужен совет с каким графическим компонентом работать будет удобнее всего? Каким образом выводить графику на экран? Что взять в качестве холста? В каком компоненте я смогу точно указывать угол между отрезка, их длину? |
| Автор: Gwire 20.2.2011, 14:36 | ||||
profesiachuvak, можешь написать свой компонент
Зная координаты рисовать очень просто. А координаты у тебя есть. Создание
Можно сделать "руку" как руку в 3D. Набор компонентов GLScene (взял в иституте на комп.графике). |